проблема с адаптерами таблиц в свойстве SelectCommandTimeout c # - PullRequest
0 голосов
/ 14 апреля 2011

Я хочу увеличить время для извлечения данных из моего адаптера таблицы.Как мне это установить?Я пытался использовать это:

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

Однако _commandCollection.Length установлен на ноль, поэтому я не могу установить CommandTimeout

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 14 апреля 2011

Вам нужно вызвать метод GetData () в вашем tableAdapter, прежде чем вы сможете установить время ожидания, иначе команда 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);
0 голосов
/ 07 марта 2016

В моем случае это работает правильно.Единственная мысль - добавить эту строку кода в исходное решение 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;
       }
    }
   }
 }
...