簡體   English   中英

C#+ SQL Server ExecuteScalar()沒有返回最后插入的id

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM