tableadapters问题与SelectCommandTimeout属性c#

时间:2011-04-14 13:46:35

标签: c# tableadapter

我想增加从tableadapter中检索数据的时间。我该怎么设置它?我试过用这个:

http://www.codeproject.com/KB/database/TableAdaptrCommandTimeout.aspx

但是,_commandCollection.Length设置为null因此我无法设置CommandTimeout

有什么想法吗?

2 个答案:

答案 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;
       }
    }
   }
 }