2009-02-04 21 views
8

Tôi đang làm việc trên một DAL đang nhận được một DataReader không đồng bộ.Phương pháp tốt nhất để điền dữ liệu từ một SQLDataReader

Tôi muốn viết một phương pháp duy nhất để chuyển DataReader thành Tập dữ liệu. Nó cần xử lý lược đồ khác nhau để phương thức này sẽ xử lý tất cả các nhu cầu tìm nạp của tôi.

P.S. Tôi đang điền vào SQLDataReader Không đồng bộ, vui lòng không đưa ra câu trả lời đang loại bỏ DataReader.

+0

Đã DataSet.Load () không tốt? http://msdn.microsoft.com/en-us/library/5fd1ahe2.aspx –

+0

Thực ra tôi không biết tùy chọn này. Không thể chờ đợi để xem làm thế nào phức tạp. Net khuôn khổ sẽ được trong phiên bản 5 vv –

+0

Hoặc là tôi, cảm ơn cho rằng Matt! – Phaedrus

Trả lời

9

Hãy thử DataSet.Load(). Nó có một số quá tải dùng IDataReader.

+0

Đã kết thúc bằng cách sử dụng một DataTable (có cùng phương thức) –

+2

cần chuỗi [] hoặc DataTable [] làm tham số thứ ba. Có cách nào để cư trú ban đầu rỗng DataSet không có bảng mà không biết lược đồ của nó trước? Nó cũng giống như giải pháp này là một phần chặn như DataSet.Load() sẽ không tận dụng lợi thế của ReadAsync() và NextResultAsync() phương pháp của SqlDataReader – KolA

14

DataTable.load() có thể được sử dụng cho cách tiếp cận chung.

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

Đây là câu trả lời cho câu hỏi. Cảm ơn. – mcNux

0

Nếu vì một số lý do phương thức Load thất bại, đây là một cách thủ công để làm điều đó:

    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); 
         } 

Một cách khác là sử dụng SqlTableAdapter:

var adapter = new SqlDataAdapter(command); 
DataSet ds = new DataSet(); 
adapter.Fill(ds); 
Các vấn đề liên quan