gpt4 book ai didi

c# - SQLite 事务抛出我无法弄清楚的异常

转载 作者:太空宇宙 更新时间:2023-11-03 20:13:17 24 4
gpt4 key购买 nike

    public void test2(String[] users)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
using (var myTransaction = myDB.BeginTransaction())
{
using (cmd = myDB.CreateCommand())
{
cmd.Transaction = myTransaction;
cmd.CommandText = "UPDATE myTable SET counter = counter + 1 WHERE user = @user";
cmd.Parameters.AddWithValue("@user", "");
foreach (string person in users)
{
cmd.Parameters["@user"].Value = person;
cmd.ExecuteNonQuery();
}
}
myTransaction.Commit();
stopwatch.Stop();
Console.WriteLine("Updating existing users took: " + stopwatch.Elapsed);
}
}

我费了好大劲才弄明白这个问题。我看过大量的 c# 事务示例,除了有 foreach 循环外,我的代码看起来与所有示例都非常相似。但是我在一个事务中看到了多个 ExeCuteNonQuery,所以我不知道问题是什么。有帮助吗?

编辑:我想我应该解释一下问题 :P

获得:

“System.ObjectDisposedException:无法访问已释放的对象。
对象名称:'SQLiteCommand'。"

cmd.Parameters["@user"].Value = person; 行。

最佳答案

我的猜测是该命令在执行后被处理掉。尝试将 foreach 循环放在外面:

foreach (string person in users)
{
using (cmd = myDB.CreateCommand())
{
cmd.Transaction = myTransaction;
cmd.CommandText = "UPDATE myTable SET counter = counter + 1 WHERE user = @user";
cmd.Parameters.AddWithValue("@user", person);
cmd.ExecuteNonQuery();
}
}

关于c# - SQLite 事务抛出我无法弄清楚的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18544410/

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