【发布时间】:2011-10-10 05:34:06
【问题描述】:
我有两个功能。
一个插入数据库。它打开连接并在插入后关闭它。 其他是GetLastID函数。
我知道我可以查询最大的 ID,但有人告诉我这是一种不好的做法。
"选择 sqlite_last_insert_rowid();"似乎没有用,因为我在插入后关闭了连接。
【问题讨论】:
标签: c# sqlite lastinsertid
我有两个功能。
一个插入数据库。它打开连接并在插入后关闭它。 其他是GetLastID函数。
我知道我可以查询最大的 ID,但有人告诉我这是一种不好的做法。
"选择 sqlite_last_insert_rowid();"似乎没有用,因为我在插入后关闭了连接。
【问题讨论】:
标签: c# sqlite lastinsertid
您需要插入数据并使用相同的连接检索 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 = 'somone@gmail.com'
在保证电子邮件唯一性的情况下,这将是一个可靠的替代方案。
【讨论】:
SELECT seq FROM sqlite_sequence where name=@Table
问题解决了。
【讨论】: