C#和#x2B;SQL Server ExecuteScalar()未返回上次插入的id
我有以下函数,它执行一个查询并在成功时返回true,在失败时返回false。不,我想扩展该方法,以便在触发每个插入查询时,类varC#和#x2B;SQL Server ExecuteScalar()未返回上次插入的id,c#,sql-server,C#,Sql Server,我有以下函数,它执行一个查询并在成功时返回true,在失败时返回false。不,我想扩展该方法,以便在触发每个插入查询时,类varinsertId包含最后插入行的ID 问题是insertId始终为0,因此executeScalar()不知何故没有返回ID 有什么想法吗?或其他解决方案来获取最后一个插入查询的ID public int insertId; public bool executeCommand(string q) { q += ";
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;
}
尝试使用SCOPE_IDENTITY()而不是@IDENTITY,如果这不起作用,可以发布正在运行的表架构和插入查询。您应该更改
insert
以立即将插入的ID返回给您(在输出
子句中)!这适用于SQL Server 2005上-SQL Server 2000或更早版本中没有输出
子句(您没有指定您在问题中使用的SQL Server的版本)。请阅读更多有关该网站的信息
将插入内容更改为类似以下内容:
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();
}
您的
结果
变量现在应该包含正确的、新插入的值 我用的是2005年的版本。。。我将尝试这个,但这将是一些工作,因为所有的插入查询都已编写。。。编辑:谢谢!这样做成功了,结果现在包含插入行的id,非常感谢。但请记住,Inserted.ID表示ID列的Inserted.name:)Muchas gracias,functiona de maravilla:D