2012-02-23 2 views
6

datareaderdatatable으로 변환하는 것에 대해 질문이 있습니다. 내 코드에서는 datareader을 하나의 클래스에서 만들고 다른 클래스로 전달하여 datatable으로 변환하려고합니다.datareader를 datatable로 변환하는 방법

이렇게하면 표가 비어있는 것처럼 작동하지 않는 것 같습니다. 같은 함수에서 변환을하면 잘 동작합니다.

datareader을 다른 기능으로 전달할 때만 은 작동을 중지합니다.. dr이 폐쇄 되었기 때문입니까? 이 문제를 어떻게 극복 할 수 있습니까? 어떤 도움이라도 좋을 것입니다.

+0

개체를 완전히 놓치지 않거나 데이터가 더 이상 존재하지 않을 것이라는 점을 감안하면 결코 DataReader를 전달하면 안됩니다. 'DataReader'를 리턴하기 전에 사용중인 메소드를 편집 할 수 있습니까? 그래서 예를 들어'DataTable' 속성을 그 메소드에 추가하고 반환 전에 그것을 채워서'class' 밖에서 잡을 수 있습니다 ... – balexandre

+1

아니요, 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

응답에 감사드립니다. 어쨌든 연결이나 매개 변수를 몰라도이 작업을 수행 할 수 있습니까? 내가 통과 한 유일한 것은 데이터 보관자입니다. 감사합니다 – jason

+0

ParamArray는 선택 사항입니다. 매개 변수를 전달하지 않아도됩니다. :) 내 anser를 오른쪽으로 표시하십시오. – HndlCode

39

를 사용하여 DataTable을 Load() 방법.

// Given a DataReader called "reader" 
DataTable dt = new DataTable(); 
dt.Load(reader) 
관련 문제