2011-10-10 108 views
2

我有兩個函數。SQLite在連接關閉後得到最後一行ID

一個插入數據庫。它會打開連接並在插入後關閉它。 其他是GetLastID函數。

我知道我可以查詢的最大ID,但有人告訴我,這是一個不好的做法。

「SELECT sqlite_last_insert_rowid();」似乎沒有用,因爲我在插入後關閉連接。

回答

3

你需要插入數據和檢索使用相同的連接ID(而不將其關閉)。

你會做類似下面的SQL的東西:

string sql = "Insert into Product (Name) values(@Name); SELECT last_insert_rowid() AS ProductID;"; 

,那麼你將不得不使用命令對象ExecuteScalar()功能,而不是ExecuteNonQuery()得到ROWID。

一定要確保你的表中有一個名爲ProductID列,通常與自動增量INTEGER,並設置主鍵。

0

last_insert_rowid()(和其他數據庫類似的功能),通過其性質僅在當前連接上工作。在關閉連接之前,您是否可以不重構代碼以查詢last_insert_rowid()?

如果出於某種原因是不可能的,我想這只是葉查詢的最大ID。這被認爲是不好的做法,因爲之後可能會插入另一行,因此您無法保證您將獲得您認爲的行的ID。數據庫中是否有另一個列可以查詢的唯一索引?也就是說,像這樣:

SELECT id FROM users WHERE email = '[email protected]' 

將是一個可靠的選擇,當電子郵件保證唯一。