2012-02-23 2 views
6

У меня возник вопрос о преобразовании datareader в datatable. В моем коде у меня есть datareader, созданный в одном классе, и переданный другому классу, который я хочу преобразовать в datatable.Как преобразовать datareader в datatable

Когда я это делаю, он не работает, поскольку таблица остается пустой. Если я выполняю преобразование в одной и той же функции, он работает нормально.

Его единственный, когда я передаю datareader другой функции, которую он прекращает работать. Это потому, что dr закрыт или что-то еще? Как мне решить эту проблему? Любая помощь будет большой.

+0

Вы никогда не должны пропускать 'DataReader', поскольку вы полностью пропустите, чтобы уничтожить объекты, или несколько раз данные больше не будут там. Можете ли вы отредактировать метод, который используется, тот, который перед возвратом «DataReader»? Например, вы можете добавить свойство DataTable к этому методу и заполнить его до возврата, чтобы вы могли захватить за пределами этого 'class' ... – balexandre

+1

no, мне было дано указание только вернуть datareader. логика заключается в том, что функция, которая проходит через datareader, может использоваться в другом месте – jason

ответ

2

Проверьте это:

Public Function ExecuteQuery(ByVal s As String, ByVal condb As SqlConnection, ByVal ParamArray params() As SqlParameter) As DataTable 
     Dim dt As DataTable = Nothing 
     Using da As New System.Data.SqlClient.SqlDataAdapter(s, condb)    
      dt = New DataTable 
      If params.Length > 0 Then 
       da.SelectCommand.Parameters.AddRange(params) 
      End If 
      If da.SelectCommand.Connection.State <> ConnectionState.Open Then da.SelectCommand.Connection.Open() 
      da.Fill(dt)      
     End Using 
     Return dt 
End Function 
+0

+1, хороший один @HndlCode –

+0

спасибо за ответ. есть ли способ сделать это, не зная соединения или параметров? Единственное, что я передал, - это datareader. спасибо – jason

+0

ParamArray не является обязательным, поэтому вам не нужно передавать какой-либо параметр :), пожалуйста, отметьте мой anser как правильный – HndlCode

39

Использование DataTable Load() метод.

// Given a DataReader called "reader" 
DataTable dt = new DataTable(); 
dt.Load(reader) 
Смежные вопросы