只是尝试执行插入然后获取@@ Identity,但它证明有点困难。
所以我有以下Sql:
int retInt = 0;
string Sql = insertSql;
Connection.Open();
commandArg.CommandText = insertSql;
commandArg.Connection = Connection;
commandArg.ExecuteNonQuery();
commandArg.CommandText = "SELECT @@Identity;";
commandArg.CommandText = Sql;
retInt = (int)commandArg.ExecuteScalar();
return retInt;
但是当我最后到达ExecuteScalar命令时,我得到一个空引用异常。我对csharp做错了什么?因为当我在Sql编辑器上执行此操作时(当我在行中执行两个命令时)。
希望有人能帮忙......
(btw commandArg作为参数传入)
更新:
我原来的帖子不对,但我已经改变了,但仍然得到错误。希望有人可以帮忙!
更新2:
阅读下面的内容后,我可以看到我的代码很简单,所以我修改了代码,这样就可以了!...
SqlCeConnection myConnection = new SqlCeConnection(@"Data Source=C:\database.sdf");
SqlCeCommand myCommand = new SqlCeCommand();
myCommand.Connection = myConnection;
myConnection.Open();
myCommand.CommandText = "Insert into tbl_media (dateadded) values (getdate())";
SqlCeDataReader insertReader = myCommand.ExecuteReader();
myCommand.CommandText = "select @@identity";
SqlCeDataReader identityReader = myCommand.ExecuteReader();
myConnection.Close();
答案 0 :(得分:2)
我一直在单独的查询中使用@@ identity。重要的是它是在同一个连接上。如前所述,您没有执行“SELECT @@ Identity;”。您将值设置为commandArg.CommandText = Sql;在ExecuteScalar之前。使用retInt = commandArg.ExecuteNonQuery();并查看retInt是否为1.将其置于try catch finally块中,即可读取异常消息。有意义的是,你在最后一行得到一个null,因为insert不是Scalar命令。
答案 1 :(得分:1)
听起来你正试图获取最近插入的项目的标识列。
鉴于:
您可以执行插入,然后查询适合插入记录的最后一条记录:
SELECT TOP 1 ID FROM MyTable
WHERE Name = @CustomerName
/* AND all your other matching criteria for the entity from your INSERT */
ORDER BY CreateDate DESC
答案 2 :(得分:-1)
将SELECT @@ IDENTITY文本放在insertSql字符串的末尾。 @@ IDENTITY仅在插入后直接起作用。它不能在不同的查询中。