我有两个功能。
一 插入数据库。它打开连接并在插入后关闭它。其他是GetLastID 函数。
我知道我可以查询最大的 ID,但有人告诉我这是一种不好的做法。
“选择 sqlite_last_insert_rowid();” 似乎没有用,因为我在插入后关闭了连接。
我有两个功能。
一 插入数据库。它打开连接并在插入后关闭它。其他是GetLastID 函数。
我知道我可以查询最大的 ID,但有人告诉我这是一种不好的做法。
“选择 sqlite_last_insert_rowid();” 似乎没有用,因为我在插入后关闭了连接。
您需要使用相同的连接插入数据并检索 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
它解决了这个问题。