sql – @@ IDENTITY之后,INSERT语句总是返回0

前端之家收集整理的这篇文章主要介绍了sql – @@ IDENTITY之后,INSERT语句总是返回0前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要一个在数据库上执行INSERT语句并返回Auto_Increment主键的函数.我有以下C#代码,但是当INSERT语句工作正常(我可以看到数据库中的记录,PK正确生成,行== 1),id值始终为0.任何想法可能会发生错误
  1. public int ExecuteInsertStatement(string statement)
  2. {
  3. InitializeAndOpenConnection();
  4. int id = -1;
  5.  
  6.  
  7. IDbCommand cmdInsert = connection.CreateCommand();
  8. cmdInsert.CommandText = statement;
  9. int rows = cmdInsert.ExecuteNonQuery();
  10.  
  11. if (rows == 1)
  12. {
  13. IDbCommand cmdId = connection.CreateCommand();
  14. cmdId.CommandText = "SELECT @@Identity;";
  15. id = (int)cmdId.ExecuteScalar();
  16. }
  17.  
  18. return id;
  19. }
  20. private void InitializeAndOpenConnection()
  21. {
  22. if (connection == null)
  23. connection = OleDbProviderFactory.Instance.CreateConnection(connectString);
  24.  
  25. if(connection.State != ConnectionState.Open)
  26. connection.Open();
  27. }

为了回答答案,我试过:

  1. public int ExecuteInsertStatement(string statement,string tableName)
  2. {
  3. InitializeAndOpenConnection();
  4. int id = -1;
  5. IDbCommand cmdInsert = connection.CreateCommand();
  6. cmdInsert.CommandText = statement + ";SELECT OID FROM " + tableName + " WHERE OID = SCOPE_IDENTITY();";
  7. id = (int)cmdInsert.ExecuteScalar();
  8.  
  9. return id;
  10. }

但是我现在得到错误sql语句结束后找到的字符”

我正在使用具有OleDb连接的MS Access数据库,Provider = Microsoft.Jet.OLEDB.4.0

解决方法

1)将INSERT和SELECT语句(使用“;”连接)组合成1个db命令

2)使用SCOPE_IDENTITY()而不是@@ IDENTITY

INSERT INTO blabla …; SELECT OID FROM table WHERE OID = SCOPE_IDENTITY()

– 更新:

因为事实证明这个问题与MS ACCESS相关,所以我发现this article表明只需重新使用第一个命令并将其CommandText设置为“SELECT @@ IDENTITY”就足够了.

猜你在找的MsSQL相关文章