从查询中检索mssql主键?

时间:2014-09-15 16:30:27

标签: sql-server get primary-key

在C#Visual Studio Express Windows窗体中: 如何检索刚刚执行的插入查询的主键。

这是我的con +查询代码:

SqlConnection con = new SqlConnection(...);
SqlCommand command = con.CreateCommand();    
command.CommandText = "INSERT INTO bestillinger (ha) VALUES (@ha);
command.Parameters.AddWithValue("@ha", listBox1.SelectedItem.ToString());            
con.Open();
command.ExecuteNonQuery();
con.Close();

2 个答案:

答案 0 :(得分:1)

使用手动Close(),如果使用它的代码抛出异常,则可能会泄漏连接。所以请改用using

假设您的PK是identity列,则可以使用scope_identity()轻松检索新值:

using (var con = new SqlConnection(...))
{
    con.Open();
    var command = con.CreateCommand();
    command.CommandText = @"
         INSERT INTO bestillinger (ha) VALUES (@ha);
         select scope_identity();";
    command.Parameters.AddWithValue("@ha", listBox1.SelectedItem.ToString());
    var newPk = (long) command.ExecuteScalar();
}

答案 1 :(得分:0)

正如@Andomar在回答中所说,确保你正确关闭连接。

另一种返回新插入的标识字段值的方法是:

using (var con = new SqlConnection(...))
{
    con.Open();
    var command = con.CreateCommand();
    command.CommandText = @"
         INSERT INTO bestillinger (ha) OUTPUT inserted.[ID] VALUES (@ha);";
    command.Parameters.AddWithValue("@ha", listBox1.SelectedItem.ToString());
    var newPk = (long) command.ExecuteScalar();
}

[ID]将替换为您想要的身份字段(或任何字段或字段)的名称。