如何从IDataReader获取DataTable?

4
我试图从一个IDataReader中获取一个DataTable或DataSet,但是我失败了。以下是代码:

string sql = @"SELECT ID, DOCNUMBER FROM TBDOCUMENT";

using (IDbConnection conn = CreateConnection(provider, connectionString))
                {
                    conn.Open();
                    using (IDbCommand command = conn.CreateCommand())
                    {
                        command.CommandText = sql;
                        IDataReader reader = command.ExecuteReader();

                        using (reader)
                        {
                            while (reader.Read())
                            {
                                long key = reader.GetInt64(0);
                                decimal value = reader.GetDecimal(1);
                            }
                        }
                    }
                }

我正在使用IDbConnectionIDbCommand,因为它可以与三个不同的数据库一起工作(方法CreateConnection(provider, connectionString)根据数据库获取特定类型的连接)。我的查询会得到一个ID(Int64)和一个DocNumber(Decimal),但每次我试图获取Decimal值时,它都会抛出OverflowException异常并显示消息:“Conversion overflows.”这两个值对我来说都很重要,但我不知道如何获取这些值。
实际上,我现在没有尝试将代码转换为DataTable,我必须在没有异常的情况下获取这两个值。
需要一些帮助吗?

TBDOCUMENT表中的DOCNUMBER列类型是什么?如果它是整数,你应该有int value = reader.GetInt... - Davide Piras
嗨,Davide,TBDOCUMENT中的DOCNUMBER类型为Decimal(30,0)。 - Guilherme Oliveira
1个回答

7

虽然我还没有执行检查,但应该可以工作...

    // Load the data into the existing DataSet. 
    DataTableReader reader = GetReader();
    dataSet.Load(reader, LoadOption.OverwriteChanges,
    customerTable, productTable); 

    // Load the data into the DataTable.
    SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    DataTable dt = new DataTable();
    dt.Load(dr);

我相信它应该可以工作。我在这里尝试执行,但抛出了异常(OverflowException)。也许十进制值无法转换,然后引发异常。 - Guilherme Oliveira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接