Как мне получить DataTable от IDataReader?
Я пытаюсь получить DataTable
или же DataSet
из IDataReader
, но я терплю неудачу. Вот код:
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);
}
}
}
}
я использую IDbConnection
а также IDbCommand
потому что он будет работать с тремя различными базами данных (метод CreateConnection(provider, connectionString)
получает конкретный тип соединения в соответствии с базой данных). Мой запрос получает идентификатор (как Int64) и DocNumber (как десятичное), но каждый раз, когда я пытаюсь получить десятичное значение, он выдает OverflowException
с сообщением: "Конверсия переполнена". Оба значения важны для меня, но я не знаю, как мне получить эти значения.
На самом деле код, который я не пытаюсь преобразовать в DataTable
Я должен получить значение двух без исключения.
Некоторая помощь?
1 ответ
Хотя я не проверял, но это должно работать...
// 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);