我想增加从tableadapter中检索数据的时间。我该怎么设置它?我试过用这个:
http://www.codeproject.com/KB/database/TableAdaptrCommandTimeout.aspx
但是,_commandCollection.Length设置为null因此我无法设置CommandTimeout
有什么想法吗?
答案 0 :(得分:3)
您必须在tableAdapter上调用GetData()方法,然后才能设置超时,否则SelectCommand将不会被初始化。
protected void setAdapterTimeout(SqlDataAdapter da, int timeOut = 120)
{
if (da.SelectCommand != null)
da.SelectCommand.CommandTimeout = timeOut;
}
然后这样称呼:
//Replacing AccessoryTableAdapter with your table Adapter
AccessoryTableAdapter ata = new AccessoryTableAdapter();
setAdapterTimeout(ata.Adapter);
编辑:扩展方法很酷!
public static class Extensions
{
public static void setAdapterTimeout(this SqlDataAdapter da, int timeOut = 120)
{
if (da.SelectCommand != null)
da.SelectCommand.CommandTimeout = timeOut;
if (da.InsertCommand != null)
da.InsertCommand.CommandTimeout = timeOut;
}
}
然后调用它:
AccessoryTableAdapter ata = new AccessoryTableAdapter();
ata.Adapter.setAdapterTimeout(120);
答案 1 :(得分:0)
在我的情况下,这工作正常。 唯一的想法是在原始 codeproject 解决方案中添加这行代码:
if ((this._commandCollection == null)) this.InitCommandCollection();
因此,SelectCommandTimeout属于:
// Add this check before the assign step...
if ((this._commandCollection == null)) this.InitCommandCollection();
for (int i = 0; i < this._commandCollection.Length; i++)
{
if ((this._commandCollection[i] != null))
{
((System.Data.SqlClient.SqlCommand)
(this._commandCollection[i])).CommandTimeout = value;
}
}
}
}