gpt4 book ai didi

c# - 使用 Microsoft.Data.Sqlite C# 获取最后一个插入 rowid

转载 作者:行者123 更新时间:2023-12-05 00:58:00 25 4
gpt4 key购买 nike

我使用 Microsoft.Data.Sqlite 创建了一个带有 sqlite 数据库的 UWP 应用程序。图书馆。插入新行后,我需要知道分配给新行的自动增量值。下面的代码使用了额外的查询“select last_insert_rowid()”,但是有没有更好的方法来获取这个值呢?

public static int AddMovie(Movie movie)
{
string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, DB_FILENAME);
using (SqliteConnection db = new SqliteConnection($"Filename={dbpath}"))
{
db.Open();

SqliteCommand cmd = new SqliteCommand();
cmd.Connection = db;

cmd.CommandText = "INSERT INTO Movie VALUES (NULL, @Title, @Rating)";
cmd.Parameters.AddWithValue("@Title", movie.Title);
cmd.Parameters.AddWithValue("@Rating", movie.Rating);

cmd.ExecuteReader();

// Is there a better way to get this value?
cmd = new SqliteCommand("SELECT last_insert_rowid()", db);
SqliteDataReader query = cmd.ExecuteReader();

var newId = 0;
if (query.Read())
{
newId = query.GetInt32(0);
}

db.Close();

return newId;
}
}

最佳答案

您可以将两个查询组合成一个命令,而不是调用 cmd.ExecuteReader() 调用 cmd.ExecuteScalar() 并将返回值转换为 int:

public static long AddMovie(Movie movie)
{
string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, DB_FILENAME);
using (SqliteConnection db = new SqliteConnection($"Filename={dbpath}"))
{
db.Open();

SqliteCommand cmd = new SqliteCommand();
cmd.Connection = db;

cmd.CommandText = "INSERT INTO Movie VALUES (NULL, @Title, @Rating); SELECT last_insert_rowid();";
cmd.Parameters.AddWithValue("@Title", movie.Title);
cmd.Parameters.AddWithValue("@Rating", movie.Rating);

return (long)cmd.ExecuteScalar();
}
}

注意:Raycoon 的回答指出了此解决方案的一些缺点。

关于c# - 使用 Microsoft.Data.Sqlite C# 获取最后一个插入 rowid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58863022/

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