2011-10-10 29 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]' 

将是一个可靠的选择,当电子邮件保证唯一。