2014-10-06 41 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 
相关问题