在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();
答案 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]
将替换为您想要的身份字段(或任何字段或字段)的名称。