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

前端之家收集整理的这篇文章主要介绍了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();

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

快乐的编码.

猜你在找的C#相关文章