c# – 设置强类型DataSet TableAdapter中使用的CommandTimeout?

前言:

因此,在过去5年左右的时间里,我公司已经编写了各种应用程序和工具.不幸的是,许多开发这些应用程序的人都使用了强类型数据集,我现在正考虑在我们的商店中取消它们……

使用强类型数据集的一个较大的进程现在超时…我打算在接下来的几个月内使用nHibernate重写整个进程但是目前我需要更改超时以允许我们的用户使用该进程虽然很慢……不幸的是,微软将commandtimeout方法设为私有,所以我无法直接访问它们.

到目前为止,我遇到的唯一解决方案是为每个TableAdapter创建一个部分类,并在那里包含超时方法……

这非常笨重,因为它意味着为很多TableAdapter添加部分类…

有谁知道一种更有效的方法来处理这个问题?

解决方法

我用反射“解决了”这个问题. (例如,VS2010模型允许公开Adapter属性,SelectCommand等在GetData之前将为null.)

我正在使用的“丑陋的代码但功能代码”:

void SetAllCommandTimeouts(object adapter,int timeout)
{
    var commands = adapter.GetType().InvokeMember(
            "CommandCollection",BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.NonPublic,null,adapter,new object[0]);
    var sqlCommand = (SqlCommand[])commands;
    foreach (var cmd in sqlCommand)
    {
        cmd.CommandTimeout = timeout;
    }
}

// unfortunately this still requires work after a TableAdapter is obtained...
var ta = new MyTableAdapter();
SetAllCommandTimeouts(ta,120);
var t = ta.GetData();

由于缺少公共基础/接口,实际上不可能更好地键入适配器(尽管可能是组件).

快乐的编码.

相关文章

文章浏览阅读6.2k次,点赞2次,收藏3次。C#数学运算表达式解...
文章浏览阅读5.2k次,点赞6次,收藏7次。程序要做到用户配置...
文章浏览阅读9k次。错误信息检测到 ContextSwitchDeadlock M...
文章浏览阅读2w次,点赞10次,收藏9次。我发生错误时的环境:...
文章浏览阅读9.8k次。C# 二进制字节流查找函数IndexOf ...
文章浏览阅读2.5w次,点赞3次,收藏9次。c#DataGridView数据...