从 SQLDataReader 填充数据集的最佳方法

发布于 2024-07-12 23:21:08 字数 174 浏览 8 评论 0原文

我正在开发一个异步获取 DataReader 的 DAL。

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

PS 我正在异步填充 SQLDataReader,请不要给出删除 DataReader 的答案。

I am working on a DAL that is getting a DataReader Asynchronously.

I would like to write a single method for transforming the DataReader into a DataSet. It needs to handle different schema so that this one method will handle all of my fetch needs.

P.S. I am populating the SQLDataReader Asynchronously, please don't give answers that are getting rid of the DataReader.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

初心 2024-07-19 23:21:08

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

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

DataTable.load() can be used for a generic approach.

do {
    var table = new DataTable();
    table.Load(reader);
    dataset.Tables.Add(table);
} while(!reader.IsClosed);
┊风居住的梦幻卍 2024-07-19 23:21:08

尝试DataSet.Load()。 它有几个采用 IDataReader 的重载。

Try DataSet.Load(). It has several overloads taking an IDataReader.

萌辣 2024-07-19 23:21:08

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

If for some reason the Load method fails, here is a manual way to do it:

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

Another way is to use SqlTableAdapter:

var adapter = new SqlDataAdapter(command);
DataSet ds = new DataSet();
adapter.Fill(ds);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文