2014-10-01 13 views
0

Моя проблема: вызов в хранимую процедуру истекает через 30 секунд. Кажется, что автоматически сгенерированный адаптер таблицы не предоставляет интерфейс для его изменения.Изменить время ожидания для адаптера таблицы (вызов хранимой процедуры) в проекте VB Visual Studio 2012 VB?

Вопрос: Как изменить значение тайм-аута для моего вызова SP?

Окружающая среда: Visual Studio 2012, код в VB.NET, база данных: SQL Server 2008 R2. Я использую набор данных с помощью DataSet Designer для CRUD-операций, а также вызывая процедуры Store. Сгенерированные автоматически адаптеры таблицы вызываются из кода.

Исследования уже сделано: Я нашел некоторые ответы на C# проектов, но у меня мало опыта в языке: post 1

ответ

0

Поскольку вы используете строго типизированный TableAdapter который просто держит DataAdapter как protected недвижимость , вы не можете изменить все SqlCommandCommandTimeouts напрямую. Что вы можете сделать, так это расширить этот автогенерированный класс (это Partial Class). Поэтому создайте другой класс с тем же именем в том же каталоге, например: Public Partial Class YourTableAdapter.

Теперь вы можете создавать новые свойства или методы, которые могут получить доступ к DataDapter. Обратите внимание, что класс должен находиться в том же (автогенерированном) пространстве имен. Например:

Namespace ApplicationName.DataSetNameTableAdapters 
    Partial Public Class YourTableAdapter 
     Public Property CommandTimeout As Int32 
      Get 
       Return Me.CommandCollection(0).CommandTimeout 
      End Get 
      Set(value As Int32) 
       For Each cmd As SqlCommand In Me.CommandCollection 
        cmd.CommandTimeout = value 
       Next 
      End Set 
     End Property 
    End Class 
End NameSpace 

Не выдвигайте исходный класс (.designer.vb), то он будет перезаписан при каждом изменении в конструкторе.

Теперь вы можете сделать:

Dim adapter = new YourTableAdapter() 
adapter.CommandTimeout = 60 * 30 ' 30 minutes 
+0

Это работало для меня, спасибо! Мне просто нужно было объявить «cmd» как «cmd As SqlCommand». –

+0

@ DanielHillebrand: Я одобрил редактирование. Но он компилируется для меня, поскольку [массивы реализуют 'IEnumerable (Of T)'] (http://stackoverflow.com/questions/2773740/why-do-arrays-in-net-only-implement-ienumerable-and-not- ienumerablet), вам не нужно бросать его. В настройках компилятора вы не установили параметр «Option Infer» в _on_. Используйте 'As', если тип не реализует' IEnumerable (Of T) ', а только не общий интерфейс IEnumerable (например, [' DataTable.Rows'] (http://msdn.microsoft.com/en-us /library/system.data.internaldatacollectionbase(v=vs.110).aspx)). 'As' переводит объект в реальный тип. –

 Смежные вопросы

  • Нет связанных вопросов^_^