2016-11-13 7 views
0

は、私が一緒に以下の2つのテーブルを接続しようとしている:接続する2つのSQL Serverのテーブル

CREATE TABLE [dbo].[Groups] 
(
    [Group_Id] INT IDENTITY (1, 1) NOT NULL, 
    [Group_Name] NVARCHAR (50) NULL, 
    [Group_Desc] NVARCHAR (50) NULL, 

    PRIMARY KEY CLUSTERED ([Group_Id] ASC) 
); 

CREATE TABLE [dbo].[Events] 
(
    [Event_Id] INT IDENTITY (1, 1) NOT NULL, 
    [Event_Group_Id] INT null, 
    [Event_Type] NVARCHAR (50) NULL, 
    [Event_Title] NVARCHAR (50) NULL, 

    PRIMARY KEY CLUSTERED ([Event_Id] ASC), 

    CONSTRAINT fk_event_group 
     FOREIGN KEY (Event_Group_Id) REFERENCES Groups (Group_Id) 
); 

最初の質問:私は正しく、テーブルを作成していますか?

Eventsに次のコードを追加できましたが、のGroupsのPKをFKとして正常に接続することができませんでした。

誰にも提案はありますか?

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["BallinoraDBConnectionString1"].ConnectionString); 
     conn.Open(); 
     string findGroupOfEvent = "SELECT Group_Id FROM Groups WHERE Group_Name ='" + DropDownListEventGroup.SelectedItem.ToString() + "'"; 
     int groupId = Convert.ToInt32(findGroupOfEvent); 
     string insertQuery = "INSERT INTO Events (Event_Group_Id, Event_Type, Event_Title) VALUES (@GroupEventID, @Type, @Title)"; 
     SqlCommand com = new SqlCommand(insertQuery, conn); 
     com.Parameters.AddWithValue("@GroupEventID", groupId); 
     com.Parameters.AddWithValue("@Type", DropDownListEventType.SelectedItem.ToString()); 
     com.Parameters.AddWithValue("@Title", TextBoxET.Text); 
     com.ExecuteNonQuery(); 
     Response.Redirect("ViewEvents.aspx"); 
     Response.Write("Registration is successful"); 
     conn.Close(); 

UI

Adding Dropdown Items

+3

'しかし、私はイベントのFKとしてグループのPKに正常に接続できませんでした。<=あなたはこれをどういう意味ですか?また、SqlConnectionsを 'using'ブロックにラップし、DBと対話するたびに新しいインスタンスを作成する必要があります(再利用する中心的なSqlConnectionはありません)。 [ベストプラクティス - SQL文の実行](http://stackoverflow.com/documentation/.net/3589/ado-net/14261/best-practices-executing-sql-statements)も参照してください。 – Igor

+0

イベントテーブルに新しい行を追加すると、[グループ]の[グループ名]にある同じテキストを含むドロップダウンメニューが表示されます。ドロップダウンメニューで選択した[Group_Name]と同じ行のGroup_IDを取得し、その値を[Events]テーブルの[Event_Group_ID]に割り当てる必要があります。 – user2911539

+0

あなたは何もUIの言及をしていない、これまでのところこの質問はSql DDLとADO.NETを示しています。そのパートコードは、あなたの意図であるかもしれないし、そうでないかもしれないあなたの '@GroupEventID'パラメタに' 1'をハードコーディングしているというメモをつけて私にはうまく見えます。値を落とすのに役立つ場合は、関連するコードを表示する必要があります。 – Igor

答えて

0

変更あなたのデザイナー画面でvalueは1にhttps://i.stack.imgur.com/c0Ryz.pngを撮影し、その後、あなたのデータベーステーブルで使用されるIDに対応して2など。そのため、文字列名を整数に変換できないため、コードが失敗してしまいます。値は一意のID(int)です。名前は表示テキストです。

フォーム/コントロールが読み込まれるときに、データベース値からリスト項目を動的に生成するオプションが、はるかによくメンテナンス可能です。そこドロップダウンリストを構築しながら、多くがすでにデータベースからGroupID説明に、このようなDatabind ASP.NET List of ListItem to DropDownList issue

+0

それは問題を解決するために管理されています。助けてくれてありがとう。 – user2911539

+0

@ user2911539 - それはあなたのために働いてうれしい。回答を受け入れることを検討してください([回答を受け入れる方法](http://meta.stackexchange.com/a/5235)を参照)。 – Igor

-1

あなたは詳細の下に提供することができ、優れたSQLは微ように思われ、データベースも探して:

  1. あなたはUIからDropDownListEventGroupの値を取得していますグローバルディテールテーブルを照会し、データを提供します。

  2. グループテーブルにデータがありますか?

乾杯 スーディープ

+0

こんにちは、グループテーブルのデータのスクリーンショットを追加しました – user2911539

+0

投稿されたデータをUIからサーバーに表示することができます。 –

+0

新しいイベントを送信しようとすると、次のエラーが表示されます。Error:System.FormatException:入力文字列は、正しい形式ではありませんでした。 System.Number.ParseInt32(String s、NumberStyles style、NumberFormatInfo info)at System.Convert.ToInt32(String value)at管理者のSystem.Number.StringToNumber(String str、NumberStylesオプション、NumberBufferおよびnumber、NumberFormatInfo情報、ブールparseDecimal) c:\ Users \ 11342 \ OneDrive \ Documents \ 4th Year \ FYP \ BallinoraWaterfallCommunity \ Admin.aspx.cs:行88 – user2911539

0

とテキストに良い答えと質問をしている、とあなたではなく、グループ名のグループIDに以下のSQLでIDと直接問い合わせることができます。

string findGroupOfEvent = "SELECT Group_Id FROM Groups WHERE Group_ID ='" + DropDownListEventGroup.SelectedItem.ToString() + "'"