微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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();

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

快乐的编码.

原文地址:https://www.jb51.cc/csharp/100429.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐