Oct*_*oid 5 c# database sqlite
我试图找出在向数据库中插入一行时获取最后一个 ID 的最佳方法。
它是一个基本的库,它使用System.Data.SQLite.
该库可以从控制台应用程序、表单应用程序、网站、服务、单线程、多线程调用 - 因此虽然这个库非常小且简单,但重要的是每次调用它都是无状态的、稳定的和准确的。
在我使用的主要 SQL 库中OUTPUT inserted.id,这使事情变得非常简单,但据我所知,这在 SQLite 中不可用。我确实发现有一两个人提到了它,但它似乎对我不起作用。
如果没有,我看到另一种方法是创建一个游标并使用它来跟踪最后插入的 id。但是,它被列为扩展名,我似乎在 .NET 库中找不到任何迹象。
我能找到的最相关的 .NET 示例使用了让我担心的第二种命令方法。
我担心的是,当引发和记录异常时,通常会很快引发很多异常,我想 100% 确定我正确地链接了 InnerException 链。
INSERT INTO...... OUTPUT inserted.idSQLite 不支持?SELECT last_insert_rowid()仅限于当前光标?像这样的事情是你需要做的:
using (var connection = new SQLiteConnection(ConnectionString))
{
using (var command = new SQLiteCommand())
{
string sql = "INSERT INTO MyTable (Field1) VALUES (@val1); SELECT last_insert_rowid();";
command.Connection=connection;
command.CommandType = CommandType.Text;
command.CommandText = sql;
command.Parameters.Add(new SQLiteParameters("@val1", DbType.String) {value = "MyValue"});
connection.Open();
object obj = command.ExecuteScalar();
long id = (long)obj; // Note regardless of data type, SQLite always returns autoincrement fields as long.
// Do something with id
}
}
Run Code Online (Sandbox Code Playgroud)
显然,您需要修改 SQL 文本以完全匹配您的需要。