我需要一个在数据库上执行INSERT语句并返回Auto_Increment主键的函数。我有以下C#代码,但是,尽管INSERT语句运行正常(我可以看到数据库中的记录,但PK正确生成并且行== 1),id值始终为0。关于可能发生的事情的任何想法错误?
public int ExecuteInsertStatement(string statement)
{
InitializeAndOpenConnection();
int id = -1;
IDbCommand cmdInsert = connection.CreateCommand();
cmdInsert.CommandText = statement;
int rows = cmdInsert.ExecuteNonQuery();
if (rows == 1)
{
IDbCommand cmdId = connection.CreateCommand();
cmdId.CommandText = "SELECT @@Identity;";
id = (int)cmdId.ExecuteScalar();
}
return id;
}
private void InitializeAndOpenConnection()
{
if (connection == null)
connection = OleDbProviderFactory.Instance.CreateConnection(connectString);
if(connection.State != ConnectionState.Open)
connection.Open();
}
为了回答这些问题,我尝试了:
public int ExecuteInsertStatement(string statement, string tableName) { InitializeAndOpenConnection(); int id = -1; IDbCommand cmdInsert = connection.CreateCommand(); cmdInsert.CommandText = statement + ";SELECT OID FROM " + tableName + " WHERE OID = SCOPE_IDENTITY();"; id = (int)cmdInsert.ExecuteScalar();
return id;
}
但是我现在收到错误“ SQL语句结束后找到字符”
我正在使用具有OleDb连接,Provider = Microsoft.Jet.OLEDB.4.0的MS Access数据库
问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
1)将INSERT和SELECT语句(使用“;”连接)组合成1个db命令
2)使用SCOPE_IDENTITY()代替@@ IDENTITY
插入blabla ...; 从表WHERE OID = SCOPE_IDENTITY()中选择SELECT OID
-更新:
由于事实证明该问题与MS ACCESS有关,因此我发现本文建议仅重复使用第一个命令并将其CommandText设置为“ SELECT @@ IDENTITY”就足够了。