Tableadapter.fill истекает, когда таблица пуста - PullRequest
0 голосов
/ 24 августа 2011

У меня есть представление, которое я пытаюсь использовать для заполнения TableAdapter. В своем коде я правильно заполняю адаптер таблицы в первый раз, фильтрую свой источник привязки и использую datarowviews для циклического перебора строк данных и выполнения необходимых обновлений (выполняемых хранимой процедурой). Теперь проблема в том, что после этих обновлений мне нужно снова заполнить табличный адаптер, чтобы он отражал эти изменения. Иногда вид, который я использую, не будет иметь результатов, в других случаях это может быть. Я не могу привести конкретный пример, поскольку данные чувствительны к работе, но я постараюсь создать упрощенный пример

_taMyView.Fill(_dsMyConnection.MyView)
_bsMyView.Filter = "Number = 1"
For Each drvMyViewRow in _bsMyView
   Do Stuff
   'stored procedure that updates MyTable (what the view was created from)
Next

_taMyView.Fill(_dsMyConnection.MyView)
_bsMyView.Filter = "Number = 0"

Это точная ошибка «Истекло время ожидания. Время ожидания истекло до завершения операции или сервер не отвечает.»

Хорошо, вы заметите, что я заполняю свое представление, затем фильтрую эти результаты по столбцу Number, равному 1. Я перебираю все эти результаты и обновляю таблицу, из которой создано мое представление. После выхода из цикла я нажал второй .fill, который истекает примерно через 20 секунд. После тестирования этот тайм-аут возникает только тогда, когда MyView не содержит никаких записей. Любая помощь будет принята с благодарностью.

Некоторые дополнительные лакомые кусочки. Я использую Visual Studio 2010 и sqlserver 2008. Вся работа выполняется в VB.NET. Кроме того, во время отладки я сделал паузу во второй заливке, пошел к Toad for Data Analytics и запустил SELECT * FROM MyView, который не остановился, и возвратил пустую таблицу результатов примерно через 19 секунд. Я также пытался избавиться от адаптера таблицы перед вторым заполнением, но у него аналогичное время ожидания. Извините, если этот ответ кажется очевидным или что-то в этом роде, я всего лишь стажер и все еще изучаю язык.

EDIT

MyAdapter.Adapter.SelectCommand.CommandTimeout = 0

Похоже, что сработало, насколько я понимаю, оно позволяет ему работать до тех пор, пока оно не завершится (SQLServer отключит его, если соединение будет оставаться открытым дольше, чем позволяет). Ta.fill работает примерно с той же скоростью, что и Жаба, набирая около 19-20 секунд, и не выдает ошибку после нескольких тестов. Спасибо за помощь

1 Ответ

1 голос
/ 24 августа 2011

19 секунд? Сколько строк? Насколько сложен вид? Если запрос занимает 19 секунд из Toad или Management Studio, вполне возможно, что он удваивает это из вашего кода VB.NET. Возможно, вам следует подумать об увеличении значения CommandTimeout (по-моему, 30 секунд) и / или оптимизации структуры, если вы считаете, что 19 секунд - это слишком долго (я, конечно, так).

...