Select SCOPE_IDENTITY 使用 SqlCeCommand 插入后

Select SCOPE_IDENTITY after insert with SqlCeCommand

我的程序有在线和离线模式。

现在我想在在线模式下执行以下操作

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对象不是线程安全的,如果跨线程共享SqlCeConnectionSqlCeTransaction的实例,可能会导致访问冲突异常。建议每个线程应该使用单独的连接,不应该跨多个线程共享。

我想这就是你的答案: 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