Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQLite在连接关闭后获取最后一行ID_C#_Sqlite_Lastinsertid - Fatal编程技术网

C# SQLite在连接关闭后获取最后一行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

我有两个功能

一个插入到数据库中。插入后,它会打开连接并将其关闭。 另一个是GetLastID函数

我知道我可以查询最大的ID,但有人告诉我这是一个糟糕的做法


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

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

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

string sql = "Insert into Product (Name) values(@Name); SELECT last_insert_rowid() AS ProductID;";
然后必须使用命令objects
ExecuteScalar()
函数而不是
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
它解决了这个问题