gpt4 book ai didi

c# - 在C#中回滚linq2sql插入事务的问题

转载 作者:太空宇宙 更新时间:2023-11-03 18:00:52 26 4
gpt4 key购买 nike

我正在尝试使用linq2SQL将CSV文件的内容插入数据库表中。

如果任何插入失败,我希望能够回滚事务,但是当我尝试使用此代码时,在db.Transaction.Commit()处出现以下错误

未处理System.InvalidOperationException:此SqlTransaction已完成;它不再可用。

有人知道我在做什么错吗?

using (DataContext db = new DataContext())
{
db.Connection.Open();
db.Transaction = db.Connection.BeginTransaction();

try
{
foreach (string entry in entries)
{
XXX xxx = new XXX()
{
P1 = "something",
P2 = "something"
};

db.XXXX.InsertOnSubmit(xxx);
db.SubmitChanges();
}
}
catch (Exception)
{
db.Transaction.Rollback();
}
finally
{
db.Connection.Close();
}

db.Transaction.Commit();
}

最佳答案

好吧,排序是错误的-您在整个大块之后调用db.Transaction.Commit(),因此即使发生异常并且您已经调用db.Transaction.Rollback();也会被调用

将您的代码更改为:

using (DataContext db = new DataContext())
{
db.Connection.Open();
db.Transaction = db.Connection.BeginTransaction();

try
{
foreach (string entry in entries)
{
....
db.XXXX.InsertOnSubmit(xxx);
db.SubmitChanges();
}

db.Transaction.Commit(); <== CALL HERE !!
}
catch (Exception)
{
db.Transaction.Rollback();
}
finally
{
db.Connection.Close();
}
}


在这种情况下,将在foreach之后调用您的Commit,但是如果遇到异常并进行回滚,则不会调用它。

关于c# - 在C#中回滚linq2sql插入事务的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1518980/

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