我有一个用于连接我的应用程序的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的空引用。我已经查看了错误,我对导致问题的原因感到困惑。
答案 0 :(得分:2)
这可能是一个迟到的答案,但可能会帮助有同样问题的人......
我们的想法是为表适配器创建一个基类继承,这会增加表适配器中所有命令的超时。它必须使用反射,因为生成的表适配器不会继承任何有用的东西。它公开了一个公共函数来改变超时。
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