2009-02-04 2 views
8

DataReader를 비동기 적으로 가져 오는 DAL에서 작업하고 있습니다.SQLDataReader에서 DataSet을 채우는 가장 좋은 방법

DataReader를 DataSet으로 변환하는 단일 메서드를 작성하고 싶습니다. 이 하나의 메소드가 모든 가져 오기 요구를 처리 할 수 ​​있도록 다른 스키마를 처리해야합니다.

P. 비동기 적으로 SQLDataReader를 채우고 있습니다. DataReader를 제거하는 응답을 제공하지 마십시오.

+0

이 DataSet.Load 되었습니까 (:

 DataTable dt = new DataTable(); dt = sdr.GetSchemaTable(); //dt.Constraints.Clear(); //dt.PrimaryKey = null; //dt.BeginLoadData(); if (sdr.HasRows) { DataRow row; while (sdr.Read()) { row = dt.NewRow(); sdr.GetValues(row.ItemArray); dt.Rows.Add(row); } 

또 다른 방법은 사용하는 SqlTableAdapter있다가) 좋지 않다? http://msdn.microsoft.com/en-us/library/5fd1ahe2.aspx –

+0

사실이 옵션을 알지 못했습니다. 닷넷 프레임 워크가 버전 5 등에서 얼마나 복잡한 지 기다려 볼 수는 없다. –

+0

나는 그 매트에 대해 감사한다. – Phaedrus

답변

9

시도 DataSet.Load(). IDataReader를 사용하여 여러 오버로드가 발생합니다.

+0

DataTable (동일한 방법을 사용하는) –

+2

을 사용하면 세 번째 매개 변수로 string [] 또는 DataTable []이 필요합니다. 사전에 스키마를 모른 채 테이블이없는 빈 DataSet을 채울 수있는 방법이 있습니까? DataSet.Load()가 SqlDataReader의 ReadAsync() 및 NextResultAsync() 메서드를 사용하지 않기 때문에이 솔루션이 부분적으로 차단되어있는 것 같습니다. – KolA

14

DataTable.load()은 일반적인 접근 방식으로 사용할 수 있습니다.

do { 
    var table = new DataTable(); 
    table.Load(reader); 
    dataset.Tables.Add(table); 
} while(!reader.IsClosed); 
+0

질문에 대한 답변입니다. 감사. – mcNux

0

로드 방법이 실패 어떤 이유로, 여기에 그것을 할 수있는 수동 방식 인 경우 :

var adapter = new SqlDataAdapter(command); 
DataSet ds = new DataSet(); 
adapter.Fill(ds);