正在表适配器中设置命令超时
本文关键字:设置 命令 超时 适配器 | 更新日期: 2023-09-27 18:19:38
我有一个XSD文件,用于连接我的应用程序。我在一个单独的cs文件中有我的表适配器和访问查询的方法。我想增加我的外出时间限制。我看到了另一种解决方案:
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Select, false)]
public Scout.ScoutDataTable GetItems(string node, int rank1, int rank2)
{
ScoutTableAdapter Adapter = new ScoutTableAdapter();
Adapter.Adapter.SelectCommand.CommandTimeout = 60;
return Adapter.GetDataBy(node, rank1, rank2);
}
然而,我在设置超时=60的行上得到了null引用。我已经看了这个错误,我很困惑是什么导致了我的问题。
这可能是一个有点晚的答案,但可能会帮助有同样问题的人,所以。。。
其想法是为表适配器创建一个基类too-inherit,这会增加表适配器中所有命令的超时时间。它必须使用反射,因为生成的表适配器没有继承任何有用的东西。它公开了一个公共函数来更改超时。
using System;
using System.Data.SqlClient;
using System.Reflection;
namespace CSP
{
public class TableAdapterBase : System.ComponentModel.Component
{
public TableAdapterBase()
{
}
public void SetCommandTimeout(int Timeout)
{
foreach (var c in SelectCommand())
c.CommandTimeout = Timeout;
}
private System.Data.SqlClient.SqlConnection GetConnection()
{
return GetProperty("Connection") as System.Data.SqlClient.SqlConnection;
}
private SqlCommand[] SelectCommand()
{
return GetProperty("CommandCollection") as SqlCommand[];
}
private Object GetProperty(String s)
{
return this.GetType().GetProperty(s, BindingFlags.NonPublic | BindingFlags.GetProperty | BindingFlags.Instance).GetValue(this, null);
}
}
}
所以你的例子会变成:
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Select, false)]
public Scout.ScoutDataTable GetItems(string node, int rank1, int rank2)
{
ScoutTableAdapter Adapter = new ScoutTableAdapter();
Adapter.SetCommandTimeout(60);
return Adapter.GetDataBy(node, rank1, rank2);
}
在数据集设计器中,默认基类是System.ComponentModel.Component只需将其设置为上面的类TableAdapterBase