2011-09-13 8 views
3

私はIDataReaderからDataTableまたはDataSetを取得しようとしているが、私は失敗しています。ここでは、コードです:IDataReaderからDataTableを取得するにはどうすればよいですか?

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

それは、3つの異なるデータベース(データベースによると、接続の特定のタイプを取得しますCreateConnection(provider, connectionString)方法)で動作するので、私はIDbConnectionIDbCommandを使用しています。 私のクエリは、(Int64型として)IDを取得し、(小数など)DocNumberが、私は小数点値を取得しようとするたびに、それはメッセージとOverflowExceptionスロー:「変換オーバーフロー」どちらの価値も私には重要ですが、私はこれらの価値をどのように得るのか分かりません。

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

いくつかお手伝いしますか?

+0

TBDOCUMENTテーブルのDOCNUMBERの列タイプは何ですか?整数の場合、int value = reader.GetInt ... –

+0

こんにちはDavide、TBDOCUMENTのDOCNUMBERの型は10進数(30,0)です。 –

答えて

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); 
+0

私はそれが動作するはずだと信じています。ここで実行しようとしましたが、例外(OverflowException)がスローされました。たぶん小数の値が変換できないし、例外をスローします。 –

関連する問題