2009-02-04 42 views
8

我正在获取异步获取DataReader的DAL。从SQLDataReader填充数据集的最佳方法

我想写一个方法将DataReader转换为DataSet。它需要处理不同的模式,以便这一个方法可以处理我所有的提取需求。

P.S.我正在异步填充SQLDataReader,请不要给出摆脱DataReader的答案。

+0

当时DataSet.Load( ) 不好? http://msdn.microsoft.com/en-us/library/5fd1ahe2.aspx – 2009-02-04 05:33:11

+0

其实我并不知道这个选项。迫不及待地想知道.Net框架在版本5等方面会有多复杂。 – 2009-02-04 06:01:42

+0

要么是我,要感谢Matt! – Phaedrus 2009-02-04 06:06:27

回答

14

DataTable.load()可用于通用方法。

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

如果由于某种原因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:

var adapter = new SqlDataAdapter(command); 
DataSet ds = new DataSet(); 
adapter.Fill(ds); 
相关问题