2015-08-06 3 views
0

Я пытаюсь установить свой DbDataReader динамически на основе версии базы данных (Oracle или SQL) в рамках функции async. Функция GetReaderAsync должна возвращать тип DataReader, поэтому я могу использовать общий читатель с остальными моими операциями. Это моя цель, поэтому не чувствуйте себя обязанным исправить этот код, который может быть основан на неправильной идее, но предоставить код примера для выполнения этого требования. На данный момент я получаю ошибку компиляции ReadAsync is not a member of System.Threading.Tasks.Task(Of System.Data.Common.DbDataReader) Я считаю, что я делаю что-то неправильно, возможно, в функции GetReaderAsync.Выбор типа DataReader на основе версии базы данных

Using reader As Task(Of Common.DbDataReader) = ConnectionController.GetReaderAsync(command) ' CType(Await command.ExecuteReaderAsync(CommandBehavior.SequentialAccess), Oracle.DataAccess.Client.OracleDataReader) 
        While Await reader.ReadAsync() '<-- Compilation Error 
         If reader.HasRows Then 
         End If 
        End While 
End Using 



Public Shared Async Function GetReaderAsync(command As DbCommand) As Threading.Tasks.Task(Of DbDataReader) 
     'Depending on the XML value provided in the [Provider], then select the appropriate connection from 
     'the object oSettings of the SettingsController. The SettingsController provides a structure called Provider to choose from 
     If SettingsController.oSettings.Connection.provider.ToLower = SettingsController.Provider.Oracle Then 
      Using reader As Oracle.DataAccess.Client.OracleDataReader = CType(Await command.ExecuteReaderAsync(CommandBehavior.SequentialAccess), Oracle.DataAccess.Client.OracleDataReader) 
       command.ExecuteReader() 
       Return reader 
      End Using 
     Else 
      Using reader As SqlClient.SqlDataReader = CType(Await command.ExecuteReaderAsync(CommandBehavior.SequentialAccess), SqlClient.SqlDataReader) 
       command.ExecuteReader() 
       Return reader 
      End Using 
     End If 
    End Function 

ответ

0

Вы можете использовать интерфейс "System.Data.IDataReader". Я использую его для MySql, MSSql и Sqlite. Он работает очень хорошо.

+0

Что вы используете для параметров? – alwaysVBNET

+0

Нет параметров. Здесь пример: Использование dr как IDataReader = cmd.ExecuteReader (sql) ... Завершение использования – etalon11

+0

Уверены, но не используете ли вы параметры в своем операторе SQL? Или вы используете только SQL со строковыми значениями? – alwaysVBNET

0

работает так:

Использование читателя Как Common.DbDataReader = Await command.ExecuteReaderAsync (CommandBehavior.SequentialAccess)