gpt4 book ai didi

c# - 在 SQLite3 中插入​​和返回自动标识

转载 作者:搜寻专家 更新时间:2023-10-30 20:26:39 24 4
gpt4 key购买 nike

当我向数据库中插入一行时,我正在尝试找出获取最后一个 ID 的最佳方法。

这是一个基本库,使用 System.Data.SQLite 将异常和程序状态数据记录到 SQLite 数据库中。

库可以从控制台应用程序、表单应用程序、网站、服务、单线程、多线程调用 - 因此虽然这个库非常小和简单,但重要的是每次调用它都是无状态、稳定和准确的。

在我的主要 SQL 库中,我使用 OUTPUT inserted.id,这使事情变得非常简单,但据我所知,这在 SQLite 中不可用。我确实发现一两个人提到它,但它似乎对我不起作用。

如果没有,我看到另一种方法是 create a cursor and use that to track the last inserted id .但是,它被列为扩展,我似乎无法在 .NET 库中找到它的任何迹象。

most relevant .NET example I could find使用了令我担心的第二种命令方法。

我担心的是,当引发和记录异常时,通常会很快引发很多异常,我想 100% 确定我正确地链接了 InnerException 链。


  • 我认为INSERT INTO...SQLite 不支持OUTPUT inserted.id 是否正确?
  • 假设不是,游标是获取最后插入的 ID 且不会出现并发请求问题的最佳方式吗?
  • 如果这是最好的方法,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
}
}

显然,您需要修改 SQL 文本以准确匹配您的需要。

关于c# - 在 SQLite3 中插入​​和返回自动标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30715802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com