Microsoft.Data.SQLite(.net core)获取原子last_insert_rowid

时间:2016-10-05 01:51:35

标签: sqlite .net-core

我希望跨线程共享SQLite连接。

如果我在SQLite shell中键入以下内容:

源码>开始;插入Person值('Tweety','Bird',80); select last_insert_rowid();提交;

shell打印新的rowid。

在使用Microsoft.Data.SQLite

的dotnet核心控制台应用程序中
            SqliteCommand command = new SqliteCommand("begin; insert into Person values('Tweety','Bird',81); select last_insert_rowid(); commit;", connection);

Console.WriteLine(command.ExecuteScalar());

我希望控制台会打印新的rowid,但ExecuteScalar()会返回null。我已确认插入了新行。

  1. 是否可以使用一个组合命令获取新的rowid?
  2. 如果我通过多个线程共享连接,这是一个原子事务吗?

1 个答案:

答案 0 :(得分:0)

我将引用Vitaliy Fedorchenko的评论:

通常的做法是为每个线程使用单独的DB连接;由于连接池,使用效率仍然很好。在一个连接会话期间 (在打开和关闭之间)“last_insert_rowid()”返回在此会话中执行的最后一次插入的id。