gpt4 book ai didi

c# - C# 中的 TransactionScope 超时问题

转载 作者:行者123 更新时间:2023-11-30 18:34:10 24 4
gpt4 key购买 nike

我有一个插入方法可以很好地处理较小的数据集,但是一旦数据集超过一定大小,该方法就会超时,无论我在初始事务范围内设置了什么。

代码中的插入方法使用使用“ExecuteNonQuery”调用的简单存储 sql 过程

我的代码看起来像这样(去除了绒毛):

     public void method()
{

using (TransactionScope testScope = new TransactionScope(TransactionScopeOption.Required, new System.TimeSpan(1, 25, 0)))
{

timeDB.insert(var.time);

codeDB.insert(var.code);

foreach (variable var in listOfVariables)
{

nameDB.insert(var.value);

}

testScope.Complete();
}
}

我认为这个问题与命令超时有关,而不是范围超时,因为代码适用于较小的数据集......如果是这样的话,有没有办法改变命令超时不修改 machine.config(或任何其他 .config 文件,我被严格禁止修改它们,因为更改值会弄乱程序的其余部分)

如果问题不是特定命令超时,是什么原因造成的?就像我说的那样,代码在 8000-15000 次插入之间的任何地方都可以正常工作(取决于我们的 ConnectionString 中设置的超时“在我们的程序配置文件中设置的连接超时值,我只能出于测试目的修改但不能更改其中的任何值),但是任何比这更大的东西都会崩溃。

我也确定这绝对不是范围超时值,因为任务在大约几分钟后超时,没有接近事务范围中设置的 1 小时 25 分钟

预先感谢您抽出宝贵时间帮助我解决此问题。

编辑:

根据要求,我添加了一个最终由 nameDB.insert 方法调用的插入方法的示例(Fluff 已删除,请注意,实际的插入方法实际上是 NameDB.insert 方法的子方法,并且实际循环在那个 nameDB.insert 方法中。我只是使用 NameDB....等来减少绒毛。)

  public Int32 Insert(Hashtable serData, DataDO data)
{
int numAffected = 0;

IDataParameter[] parameters =
{
this.Helper.GetParameter("@Text", data.Text),
this.Helper.GetParameter("@CreationDt", ((data.CreationDate == DateTime.MinValue)
? Convert.DBNull : data.CreationDate)),
this.Helper.GetParameter("@TypeId", data.TypeId),
this.Helper.GetParameter("@KeyId", DbType.Int32, 4, ParameterDirection.Output)
};

numAffected = this.Helper.ExecuteNonQuery(this.ConnectionString, "InsertData", parameters);

if (numAffected > 0)
return Convert.ToInt32(parameters[parameters.Length - 1].Value);

return 0;
}

最佳答案

我认为您还可以在代码中设置命令超时:DBCommand ,如果您使用的是命令。并且 DbCommand 不继承事务范围或连接字符串,因此您必须手动设置它。

关于c# - C# 中的 TransactionScope 超时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16448701/

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