2012-02-23 12 views
6

Tengo una pregunta sobre la conversión de un datareader a un datatable. En mi código, tengo un datareader creado en una clase y pasado a otra clase que quiero convertirlo a datatable.Cómo convertir un lector de datos a datatable

Cuando hago esto, parece que no funciona, ya que la tabla permanece vacía. Si hago la conversión en la misma función, funciona bien.

Es solo cuando paso el datareader a otra función que deja de funcionar. ¿Esto es porque el dr está cerrado o algo así? ¿Cómo supero este problema? Cualquier ayuda sería genial.

+0

Nunca debe pasar el 'DataReader', ya que se perderá por completo la eliminación de los objetos o varias veces los datos ya no estarán allí. ¿Puedes editar el método que está en uso, el anterior a devolver el 'DataReader'? Entonces, por ejemplo, puede agregar una propiedad 'DataTable' a ese método y llenarlo antes de la devolución para que pueda tomar esa' clase' ... – balexandre

+1

no, se me indicó que solo devolviera un lector de datos. la lógica es que la función que pasa el lector de datos se puede usar en otro lugar – jason

Respuesta

2

mira esto:

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, bien @HndlCode –

+0

gracias por la respuesta. ¿Hay alguna forma de hacerlo sin conocer la conexión o los parámetros? Lo único que me pasa es el lector de datos. gracias – jason

+0

ParamArray es opcional por lo que no necesita pasar ningún parámetro :), por favor, marque mi respuesta como correcta – HndlCode

39

Uso DataTable Load() método.

// Given a DataReader called "reader" 
DataTable dt = new DataTable(); 
dt.Load(reader) 
Cuestiones relacionadas