使用参数化查询将自动生成的ID插入外键列

时间:2015-04-21 02:24:00

标签: c# sql asp.net sql-server-2012 parameterized-query

不确定如何使用SQL参数化查询来解决此问题。我现在可以将数据(此方案中的客户)插入到SQL表中,让数据库生成并处理主键ID,而不是手动插入ID以及其余属性。

我的问题是如何使用参数化查询将此自动生成的ID插入到其相关的外键列的另一个表中?例如,如果第二个表用于预订,则必须获取进行预订的客户的ID值(Customer表)并将其插入Booking表中的FK ID列。

我已经在线查看了代码和Stack Overflow,但它并不是我想要的,因为他们要么在数据库设计器中使用SQL程序,要么处理手动插入的ID。

我写的示例代码:

//Insert CustomerID into TestTable
public void AddCustomerIdToForeignKeyColumnInNewTable()
{
    string connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;

    SqlConnection myConnection = new SqlConnection(connectionString);

    String query;

    query = "INSERT INTO TestTable VALUES (@CustomerID)";
    SqlCommand dbCommand = new SqlCommand(query, myConnection);
    dbCommand.Parameters.AddWithValue("@CustomerID", whateverIdValueGoesHere);
    try
    {
        myConnection.Open();
        dbCommand.ExecuteNonQuery();
        myConnection.Close();
    }
    catch (Exception ex)
    {
        Exception e = ex;
        myConnection.Close();
    }

}

1 个答案:

答案 0 :(得分:0)

您可以使用:

 Select SCOPE_IDENTITY(); 

在插入声明之后。

换句话说:

query = "INSERT INTO TestTable VALUES (@CustomerID); SELECT SCOPE_IDENTITY();";

然后:

 var cid= dbCommand.ExecuteScalar();

cid将包含数据库生成的客户ID的值