我有兩個函數。SQLite在連接關閉後得到最後一行ID
一個插入數據庫。它會打開連接並在插入後關閉它。 其他是GetLastID函數。
我知道我可以查詢的最大ID,但有人告訴我,這是一個不好的做法。
「SELECT sqlite_last_insert_rowid();」似乎沒有用,因爲我在插入後關閉連接。
我有兩個函數。SQLite在連接關閉後得到最後一行ID
一個插入數據庫。它會打開連接並在插入後關閉它。 其他是GetLastID函數。
我知道我可以查詢的最大ID,但有人告訴我,這是一個不好的做法。
「SELECT sqlite_last_insert_rowid();」似乎沒有用,因爲我在插入後關閉連接。
SELECT seq FROM sqlite_sequence where [email protected]
它已經解決了這個問題。
你需要插入數據和檢索使用相同的連接ID(而不將其關閉)。
你會做類似下面的SQL的東西:
string sql = "Insert into Product (Name) values(@Name); SELECT last_insert_rowid() AS ProductID;";
,那麼你將不得不使用命令對象ExecuteScalar()
功能,而不是ExecuteNonQuery()
得到ROWID。
一定要確保你的表中有一個名爲ProductID
列,通常與自動增量INTEGER,並設置主鍵。
last_insert_rowid()(和其他數據庫類似的功能),通過其性質僅在當前連接上工作。在關閉連接之前,您是否可以不重構代碼以查詢last_insert_rowid()?
如果出於某種原因是不可能的,我想這只是葉查詢的最大ID。這被認爲是不好的做法,因爲之後可能會插入另一行,因此您無法保證您將獲得您認爲的行的ID。數據庫中是否有另一個列可以查詢的唯一索引?也就是說,像這樣:
SELECT id FROM users WHERE email = '[email protected]'
將是一個可靠的選擇,當電子郵件保證唯一。