我有一个带有 QueriesTableAdapter 的数据集。为了控制 SqlCommand.CommandTimeout,我添加了一个名为 QueriesTableAdapter 的分部类,其中包含一个名为 ChangeTimeout 的公共方法。
partial class QueriesTableAdapter
{
public void ChangeTimeout(int timeout)
{
foreach (System.Data.SqlClient.SqlCommand cmd in CommandCollection)
{
cmd.CommandTimeout = timeout;
}
}
}
对于我拥有的每个具有 QueriesTableAdapter 的数据集,我可以在执行之前设置 CommandTimeout。
using (NameSpace.DataSet.DataSetTableAdapters.QueriesTableAdapter ta =
new NameSpace.DataSet.DataSetTableAdapters.QueriesTableAdapter())
{
ta.ChangeTimeout(3600);
ta.DoSomething();
}
这在大多数情况下效果很好,因为“QueriesTableAdapter”是在数据集设计器中为您命名的。我遇到的问题是唯一命名的 TableAdapter。例如,如果我有一个名为 Person 的 DataTable 和一个名为 PersonTableAdapter 的 TableAdaper,我必须以与编写 QueriesTableAdaper 类相同的方式编写 PersonTableAdapter 部分类。我有数百个具有唯一 TableAdapter 名称的 DataTable。我不想为每个创建一个部分类。如何以全局方式获取分部类的基础 SqlCommand 对象?
由于某种原因,我的适配器 .selectcommand 为空,所以我最终不得不遍历命令集合对象,所以我想我应该根据上面的先前答案发布我的小更改。
包括:
using System.ComponentModel;
using System.Reflection;
code:
private void ChangeTimeout(Component component, int timeout)
{
if (!component.GetType().Name.Contains("TableAdapter"))
{
return;
}
PropertyInfo adapterProp = component.GetType().GetProperty("CommandCollection", BindingFlags.NonPublic | BindingFlags.GetProperty | BindingFlags.Instance);
if (adapterProp == null)
{
return;
}
SqlCommand[] command = adapterProp.GetValue(component, null) as SqlCommand[];
if (command == null)
{
return;
}
command[0].CommandTimeout = timeout;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)