我的程序有在线和离线模式。
SqlCommand
类连接到SQL Server实例。.SDF
类连接到本地SqlCeCommand
文件。现在我想做以下在线模式下工作
GetSqlCommand("insert into my_table (col1) values (@c1); SELECT SCOPE_IDENTITY()", conn))
所以我插入一条记录,用SELECT SCOPE_IDENTITY()
取回该新记录的ID。
但是在使用SQL Server CE的脱机模式下,它会抛出错误。有没有办法从SQL Server CE的插入中获取ID而不运行单独的查询?
答案 0 :(得分:1)
SQL Server CE在单个命令中不支持多个查询,请尝试如下
SqlCeCommand cmd = new SqlCeCommand("insert into my_table (col1) values (@c1)", conn);
//set paremeter values
//execute insert
cmd.ExecuteNonQuery();
//now change the sql statment to take identity
cmd.CommandText = "SELECT @@IDENTITY";
int id = Convert.ToInt32(cmd.ExecuteScalar());
答案 1 :(得分:0)
虽然Damith回答是对的,但是我们无法使用SQL Server CE运行多个查询。
我以相同的代码举例说明。
SqlCeCommand cmd = new SqlCeCommand("insert into my_table (col1) values (@c1)", conn);
//set paremeter values
//execute insert
cmd.ExecuteNonQuery();
//now change the sql statment to take identity
////////////////**CONNECTION SHOULD NOT BE CLOSED BETWEEN TWO COMMANDS**/////
cmd.CommandText = "SELECT @@IDENTITY";
int id = Convert.ToInt32(cmd.ExecuteScalar());
注意:连接应该在两个命令之间打开,否则第二个查询将失败。
最好在Transaction中使用此代码。
注意:SQL Server CE对象不是线程安全的,如果跨线程共享SqlCeConnection
或SqlCeTransaction
的实例,则可能导致访问冲突异常。建议每个线程应使用单独的连接,不应跨多个线程共享。
答案 2 :(得分:0)
我认为这是你的答案: How do I use an INSERT statement's OUTPUT clause to get the identity value?但我不确定SQL CE ..试一试。
修改强> 那么这个答案可能是正确的:Inserting into SQL Server CE database file and return inserted id