2014-10-06 71 views
3

我在數據庫中添加了一條記錄,其值爲identity。我想在插入後得到身份值。我不想通過存儲過程來做到這一點。如何在插入記錄後從SQL服務器獲取標識值

這是我的代碼:

SQLString = " INSERT INTO myTable "; 
SQLString += " (Cal1, Cal2, Cal3, Cal4) "; 
SQLString += " VALUES(N'{0}',N'{1}',N'{2}',N'{3}') "; 
SQLString = string.Format(SQLString, Val1, Val2, Val3, Val4); 
SQLString += " Declare @_IdentityCode INT SET @_IdentityCode = @@IDENTITY RETURN @_IdentityCode"; 

int result; 

public int DoCommand2(string sql) 
{ 
     con = new SqlConnection(); 
     cmd = new SqlCommand(); 
     da = new SqlDataAdapter(); 
     cmd.Connection = con; 
     da.SelectCommand = cmd; 

     string cs = GlobalConstants.SqlConnectionString; 
     con.ConnectionString = cs; 

     cmd.CommandText = sql; 
     int i = cmd.ExecuteNonQuery(); 
     return i; 
} 

,但我得到這個錯誤:

A RETURN statement with a return value cannot be used in this context.

+0

你有沒有嘗試谷歌? – Stokedout 2014-10-06 09:27:58

+0

我希望這只是「樣本」代碼,並不適用於任何類型的生產系統。如果你打算真實地使用它,請查看查詢中使用的參數而不是String.Format,並且至少在使用sql連接時使用「using」,以便它關閉並處理連接。 – 2014-10-06 09:48:33

回答

4

追加SELECT SCOPE_IDENTITY();到正常的INSERT語句:

替換最後一個串聯:

SQLString += "; SELECT SCOPE_IDENTITY();" 

然後檢索ID:

int ID = Convert.ToInt32(command.ExecuteScalar()); 
+0

謝謝,它的工作 – Elahe 2014-10-06 10:30:48

3

拿在OUTPUT clause好好看看。您可以從INSERT語句中輸出您插入的ID。我發佈的鏈接中有一些示例。

+0

你應該在你的答案中包含'OUTPUT'在行上工作,所以你將能夠從語句中檢索所有'插入的ID'(不僅是'插入的ID')。 – DrCopyPaste 2014-10-06 09:52:35

+0

@DrCopyPaste,所以如果我們想要所有的ID,我們該怎麼做? – 2014-12-08 07:43:53

+1

@vishalsharma [這是一個示例小提琴](http://sqlfiddle.com/#!6/aaac9/1) – DrCopyPaste 2014-12-08 08:54:02

2

...或者只是運行

select @@identity 
相關問題