我正在使用下面的方法獲取最後插入的行的ID。獲取最後一個插入的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;
這種方法到目前爲止工作得很好,但我不確定它是否完全可靠。
假設有兩個客戶端應用程序,每個客戶端應用程序都有自己單獨的數據庫連接,它們完全同時調用上面的服務器端方法。請記住,客戶端線程並行運行,並且SQLite一次只能運行一個操作(或者我聽說過),一個客戶端實例是否可以返回插入的記錄的行ID另一個例子?
最後,有沒有更好的方法來獲取最後插入的行ID?
在代碼中評論的問題與問題的其餘部分一樣要求相同的問題。註釋行僅用於標記我認爲另一個客戶端實例可以插入記錄的時間。 – rafale 2011-06-15 05:33:48
好的。儘管如此,我們很清楚,註釋行並不表示比「SELECT」之前更具體的時間。 – 2011-06-15 05:36:50
是的,「在SELECT之前」是我的意思。我只是不確定你爲什麼一開始不回答。在讀取期間寫入不會發生,但是在讀取另一個客戶端之前可能發生來自一個客戶端的寫入。該客戶端然後將獲得由另一個客戶端插入的行的ID。理想情況下,我會讓SQLite在INSERT之後執行鎖定,然後在SELECT之後釋放。 – rafale 2011-06-15 05:45:50