[英]C# + SQL Server ExecuteScalar() not returning last inserted id
我有以下函數執行查詢並在成功時返回true,在失敗時返回false。 不,我想擴展該方法,以便在每次觸發的插入查詢時,類var insertId
包含最后插入的行的ID。
問題是insertId
總是0,所以executeScalar()
不會返回ID。
有任何想法嗎? 或其他解決方案來獲取最后一個插入查詢的ID ....
public int insertId;
public bool executeCommand(string q) {
q += "; SELECT @@IDENTITY AS LastID";
bool retour = true;
SqlConnection myCon = new SqlConnection(Settings.DSN);
SqlCommand cmd = new SqlCommand(q, myCon);
try {
cmd.Connection.Open();
insertId = (int)cmd.ExecuteScalar();
if (insertId > 0) {
MessageBox.Show(insertId.ToString());
}
myCon.Close();
} catch (Exception ex) {
this.error = ex.Message;
retour = false;
}
return retour;
}
您應該更改INSERT
以立即返回插入的ID(在OUTPUT
子句中)! 這適用於SQL Server 2005 - OUTPUT
子句在SQL Server 2000或更早版本中不可用(您沒有指定您在問題中使用的SQL Server 版本 ...)。 閱讀有關MSDN聯機叢書中的OUTPUT
子句的更多信息。
將插入更改為:
INSERT INTO dbo.YourTable(Col1, Col2, ..., ColN)
OUTPUT Inserted.ID
VALUES(Val1, Val2, ..., ValN);
然后當你從C#執行insert語句時,你應該能夠做到:
using(SqlCommand cmdInsert = new SqlCommand("INSERT.....", myCon))
{
myCon.Open();
var result = cmdInsert.ExecuteScalar();
myCon.Close();
}
並且您的result
變量現在應該包含正確的,新插入的值!
嘗試SCOPE_IDENTITY()而不是@@ IDENTITY,如果這不起作用,您可以發布表模式和正在運行的插入查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.