Лучший метод для заполнения DataSet из SQLDataReader - PullRequest
8 голосов
/ 04 февраля 2009

Я работаю над DAL, который асинхронно получает DataReader.

Я хотел бы написать один метод для преобразования DataReader в DataSet. Он должен обрабатывать другую схему, чтобы этот единственный метод отвечал всем моим потребностям выборки.

P.S. Я заполняю SQLDataReader асинхронно, пожалуйста, не давайте ответов, которые избавляются от DataReader.

Ответы [ 3 ]

14 голосов
/ 22 июня 2012

DataTable.load () может использоваться для общего подхода.

do {
    var table = new DataTable();
    table.Load(reader);
    dataset.Tables.Add(table);
} while(!reader.IsClosed);
9 голосов
/ 04 февраля 2009

Попробуйте DataSet.Load () . Он имеет несколько перегрузок, принимающих IDataReader.

0 голосов
/ 06 ноября 2013

Если по какой-либо причине метод 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);
...