gpt4 book ai didi

c# - TransactionScope 错误保存大量信息

转载 作者:行者123 更新时间:2023-11-30 21:05:46 25 4
gpt4 key购买 nike

我正在开发一个使用 C# 和 SQL Server 作为数据库的 .NET Web 应用程序,我是这两种技术的新手。当我尝试同时保存大量信息时遇到问题。

我的代码很简单:

  SqlConnection cn = null;
try
{
using (TransactionScope scope = new TransactionScope())
{
using (cn = Util.getConnection())
{
cn.Open();

BusinessObject.saveObject1(param1, cn);
BusinessObject.saveObject2(param2, cn);
BusinessObject.saveObject3(param3, cn);
BusinessObject.saveObject4(param4, cn);

...

scope.Complete();

}
}

我总是使用相同的连接对象,因为如果发生错误,我必须撤消我的数据中的任何更改,并且如果过程正常,则需要相同的行为。

我不介意保存过程需要很多时间,在我的应用程序中是完全正常的,因为我必须保存很多信息。

这里的怪异之处在于:

  • 当我在数据库的同一个局域网中执行这个函数时,它完美地工作。
  • 但是,如果我从外部执行它,例如通过 VPN 连接并因此具有更高的延迟,我会收到一条错误消息:“与当前连接关联的事务已完成但尚未完成已处置。必须先处置事务,然后才能使用连接执行 SQL 语句。”

我试图通过 web.config 中的连接字符串更改数据库的超时,但它没有解决任何问题。此外,如果在每个 executeNonQuery() 语句之后执行 cn.Dispose(),我会在下次尝试使用连接对象时遇到错误。

我是否必须更改 TransactionScope 对象的参数?还有其他更好的方法吗?

提前致谢。

最佳答案

这是由于超时错误。 TransactionScope 可能决定在超时的情况下回滚事务。

您需要在 TransactionScope 构造函数中增加超时值。默认最大值超时为 10 分钟。

关于c# - TransactionScope 错误保存大量信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11491266/

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