Как мне получить DataTable из IDataReader? - PullRequest
3 голосов
/ 13 сентября 2011

Я пытаюсь получить 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 Ответ

6 голосов
/ 13 сентября 2011

Хотя я не проверял, но это должно работать ...

    // 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);
...