raf*_*ale 3 c# sqlite system.data.sqlite
我目前正在使用下面的方法来获取最后插入的行的ID.
Database.ExecuteNonQuery(query, parameters);
//if another client/connection inserts a record at this time,
//could the line below return the incorrect row ID?
int fileid = Convert.ToInt32(Database.Scalar("SELECT last_insert_rowid()"));
return fileid;
Run Code Online (Sandbox Code Playgroud)
到目前为止,这种方法工作正常,但我不确定它是否完全可靠.
假设有两个客户端应用程序,每个应用程序都有自己独立的数据库连接,它们在同一时间调用上面的服务器端方法.请记住,客户端线程并行运行,并且SQLite一次只能运行一个操作(或者我听说过),一个客户端实例是否可以返回由插入的记录的行ID另一个例子?
最后,是否有更好的方法来获取最后插入的行ID?
如果此时另一个客户端/连接插入记录,下面的行可能会返回错误的行ID吗?
不,因为写入将在读取之后或读取之前发生,而不是在读取期间发生.
请记住,客户端线程并行运行,并且SQLite一次只能运行一个操作,一个客户端是否可以获取另一个客户端插入的记录的行ID?
当然是.
在完全相同的时间调用服务器端方法并不重要.数据库的锁定允许并发读取,但不是并发写入,也不是写入时读取.
如果您还没有,请阅读SQLite的文件锁定模型.