C# SQLite在连接关闭后获取最后一行ID
我有两个功能 一个插入到数据库中。插入后,它会打开连接并将其关闭。 另一个是GetLastID函数 我知道我可以查询最大的ID,但有人告诉我这是一个糟糕的做法C# SQLite在连接关闭后获取最后一行ID,c#,sqlite,lastinsertid,C#,Sqlite,Lastinsertid,我有两个功能 一个插入到数据库中。插入后,它会打开连接并将其关闭。 另一个是GetLastID函数 我知道我可以查询最大的ID,但有人告诉我这是一个糟糕的做法 “选择sqlite_last_insert_rowid();”似乎没有用,因为我在插入后关闭连接。您需要插入数据并使用相同的连接检索id(不关闭它) 您可以执行类似于以下SQL的操作: string sql = "Insert into Product (Name) values(@Name); SELECT last_insert_ro
“选择sqlite_last_insert_rowid();”似乎没有用,因为我在插入后关闭连接。您需要插入数据并使用相同的连接检索id(不关闭它) 您可以执行类似于以下SQL的操作:
string sql = "Insert into Product (Name) values(@Name); SELECT last_insert_rowid() AS ProductID;";
然后必须使用命令objectsExecuteScalar()
函数而不是ExecuteNonQuery()
来获取rowid
请确保您的表中有一个名为ProductID
的列,通常是带有自动递增的整数,并设置为主键。last_insert_rowid()(以及其他数据库中的类似函数)就其性质而言,仅适用于当前连接。在关闭连接之前,是否可以重构代码以查询最后一个\u insert\u rowid()
如果由于任何原因都不可能,我想这只会留下查询最大ID的结果。这被认为是一种不好的做法,因为之后可能会插入另一行,因此您不能保证您将获得您认为的行的ID。数据库中是否还有一列具有唯一索引,您可以对其进行查询?也就是说,类似于:
SELECT id FROM users WHERE email = 'somone@gmail.com'
如果保证电子邮件是唯一的,那么这将是一个可靠的选择
SELECT seq FROM sqlite_sequence where name=@Table
它解决了这个问题