Select SCOPE_IDENTITY 使用 SqlCeCommand 插入后
Select SCOPE_IDENTITY after insert with SqlCeCommand
我的程序有在线和离线模式。
- 在线它使用 C#
SqlCommand
类. 连接到 SQL 服务器实例
- 离线它使用 C#
SqlCeCommand
类. 连接到本地 .SDF
文件
现在我想在在线模式下执行以下操作
GetSqlCommand("insert into my_table (col1) values (@c1); SELECT SCOPE_IDENTITY()", conn))
所以我插入一条记录并用 SELECT SCOPE_IDENTITY()
取回该新记录的 ID。
但是在离线模式下使用 SQL Server CE 时,它会抛出错误。有没有办法在没有 运行 单独查询的情况下使用 SQL Server CE 从插入中取回 ID?
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());
尽管 Damith 的回答是正确的,但是我们不能 运行 使用 SQL 服务器 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());
注意:两个命令之间应该打开连接,否则第二次查询将失败。
最好在事务中使用此代码。
注意:SQL Server CE对象不是线程安全的,如果跨线程共享SqlCeConnection
或SqlCeTransaction
的实例,可能会导致访问冲突异常。建议每个线程应该使用单独的连接,不应该跨多个线程共享。
我想这就是你的答案:
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
我的程序有在线和离线模式。
- 在线它使用 C#
SqlCommand
类. 连接到 SQL 服务器实例
- 离线它使用 C#
SqlCeCommand
类. 连接到本地
.SDF
文件
现在我想在在线模式下执行以下操作
GetSqlCommand("insert into my_table (col1) values (@c1); SELECT SCOPE_IDENTITY()", conn))
所以我插入一条记录并用 SELECT SCOPE_IDENTITY()
取回该新记录的 ID。
但是在离线模式下使用 SQL Server CE 时,它会抛出错误。有没有办法在没有 运行 单独查询的情况下使用 SQL Server CE 从插入中取回 ID?
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());
尽管 Damith 的回答是正确的,但是我们不能 运行 使用 SQL 服务器 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());
注意:两个命令之间应该打开连接,否则第二次查询将失败。
最好在事务中使用此代码。
注意:SQL Server CE对象不是线程安全的,如果跨线程共享SqlCeConnection
或SqlCeTransaction
的实例,可能会导致访问冲突异常。建议每个线程应该使用单独的连接,不应该跨多个线程共享。
我想这就是你的答案: 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