2016-11-13 188 views
0

我想下面的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作为Events中的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

'但我一直没能组的PK成功连接为FK在Events.' <=你这是什么意思?你也应该把你的SqlConnections封装在''using''块中,并且每次你想与数据库进行交互时都要创建一个新的实例(没有一个可重用的中心SqlConnection!)。另请参见[最佳实践 - 执行SQL语句](http://stackoverflow.com/documentation/.net/3589/ado-net/14261/best-practices-executing-sql-statements)。 – Igor

+0

向Event表添加新行时,我有一个下拉菜单,其中包含与[Groups]的[Group_Name]中相同的文本。我希望能够获得与DropDown菜单中选择的[Group_Name]相同行的Group_ID,并将该值分配给[Events]表中的[Event_Group_ID]。 – user2911539

+0

你没有提到任何UI,到目前为止,这个问题只显示了Sql DDL和ADO.NET。这部分代码对我来说看起来很好,只需要注意一下,你在'@ GroupEventID'参数中硬编码了'1',这可能是也可能不是你的意图。如果你需要下拉值的帮助,你应该显示相关的代码。 – Igor

回答

0

改变你的设计师屏幕value拍摄https://i.stack.imgur.com/c0Ryz.png为1,然后2等对应于您在数据库表中使用的ID。这就是为什么你的代码失败,因为你不能将字符串名称转换为整数。该值是唯一的id(int),名称是显示文本。

一个更好的和更易于维护的选择是动态生成时表单/控件加载数据库值的列表项。有许多已经要求具有良好的答案的问题在这个喜欢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.Convert.ToInt32(String value)在System.Number.ParseInt32(String s,NumberStyles样式,NumberFormatInfo信息)System.Number.StringToNumber(String str,NumberStyles选项,NumberBuffer&number,NumberFormatInfo信息,布尔parseDecimal) .btnAddEvent_Click(Object sender,EventArgs e)in c:\ Users \ 11342 \ OneDrive \ Documents \ 4th Year \ FYP \ BallinoraWaterfallCommunity \ Admin.aspx.cs:line 88 – user2911539

0

和文字GroupID说明从数据库,同时建立下拉列表中,您可以直接与ID下面SQL的组ID而不是组名称查询:

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