1
我想跨線程共享SQLite連接。Microsoft.Data.SQLite(.net core)get atomic last_insert_rowid
如果我在SQLite外殼中鍵入以下內容:
sqlite> begin;插入Person值('Tweety','Bird',80);選擇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。我已經確認插入了新行。
- 是否有可能使用一個組合命令獲取新的rowid?
- 如果我通過多個線程共享連接,這是一個原子事務嗎?
您可以在單獨的命令中執行「select last_insert_rowid()」(連接應保持打開狀態)。 –
但是另一個線程在共享連接的同時會插入一個新行嗎? – EternalIdiot
爲每個線程使用單獨的數據庫連接是常見的做法;由於連接池的使用效率保持良好。在一個連接會話期間(打開和關閉之間),「last_insert_rowid()」返回在此會話中執行的最後一次插入的ID。 –