3

からDataTableまたはを取得しようとしていますが、失敗しています。コードは次のとおりです。DataSetIDataReader

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

私は and を使用IDbConnectionしています。IDbCommandこれは、3 つの異なるデータベースで動作するためです (メソッドCreateConnection(provider, connectionString)は、データベースに応じて特定の種類の接続を取得します)。私のクエリは ID (Int64 として) と DocNumber (Decimal として) を取得しますが、10 進数値を取得しようとするたびに、OverflowException「変換オーバーフロー」というメッセージがスローされます。どちらの値も私にとって重要ですが、これらの値を取得する方法がわかりません。

実際には、コードを に変換しようとしていないためDataTable、例外なく 2 つの値を取得する必要があります。

手助け?

4

1 に答える 1

6

実行して確認していませんが、動作するはずです...

    // 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);
于 2011-09-13T12:30:10.027 に答える