2

我有两个功能。

一 插入数据库。它打开连接并在插入后关闭它。其他是GetLastID 函数。

我知道我可以查询最大的 ID,但有人告诉我这是一种不好的做法。

“选择 sqlite_last_insert_rowid();” 似乎没有用,因为我在插入后关闭了连接。

4

3 回答 3

3

您需要使用相同的连接插入数据并检索 id(不关闭它)。

您将执行类似于以下 SQL 的操作:

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

那么你将不得不使用命令对象ExecuteScalar()函数而不是ExecuteNonQuery()获取rowid。

请确保您的表有一个名为 的列ProductID,通常是具有自动增量的 INTEGER 并设置为主键。

于 2011-10-10T06:10:58.540 回答
0

last_insert_rowid() (以及其他数据库中的类似函数)本质上只适用于当前连接。你不能在关闭连接之前重构你的代码来查询 last_insert_rowid() 吗?

如果由于某种原因无法做到这一点,我想只会查询最大的 ID。这被认为是不好的做法,因为之后可能立即插入了另一行,所以你不能保证你会得到你认为的行的 ID。数据库中是否有另一列具有唯一索引,您可以查询?也就是说,类似:

SELECT id FROM users WHERE email = 'somone@gmail.com'

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

于 2011-10-10T06:14:55.580 回答
0
SELECT seq FROM sqlite_sequence where name=@Table

它解决了这个问题。

于 2011-12-16T03:44:07.683 回答