DataRow - OverflowException: значение было слишком большим или слишком маленьким для Int32 - PullRequest
1 голос
/ 23 мая 2019

Проблема

Я сталкивался с некоторым существующим кодом, который выдает ошибку ниже, это использует .net Framework 4.5.2 и v4.0.30319 \ System.Data.dll

У меня естьУпростил пример кода до части, которая выдает ошибку.

Посмотрел декомпилированную dll и, похоже, там была ошибка, а также искал новую версию, которая исправляет эту ошибку, но, похоже, этопоследняя версия System.Data.

Тип данных БД bigint

Как бы я мог обновить данные строки таким образом, чтобы он учитывал значение int64, которое передается, и не имелон пытается конвертировать в int32?

Ошибка

    Exception whilst flushing buffered appenders: System.ArgumentException:Value 
    was either too large or too small for an Int32.Couldn't store 
    <32370073298665472> in SerialisationTimeMilliseconds Column.  Expected type 
    is 
    Int32. ---> System.OverflowException: Value was either too large or too 
    small 
    for an Int32.
       at System.Convert.ToInt32(Int64 value)
       at System.Int64.System.IConvertible.ToInt32(IFormatProvider provider)
       at System.Data.Common.Int32Storage.Set(Int32 record, Object value)
       at System.Data.DataColumn.set_Item(Int32 record, Object value)
       --- End of inner exception stack trace ---
       at System.Data.DataColumn.set_Item(Int32 record, Object value)
       at System.Data.DataRow.set_Item(DataColumn column, Object value)

Код

    private static void PopulateRow(long number, DataRow row)
    {
         row[0] = number;
    }

1 Ответ

0 голосов
/ 23 мая 2019
* Определение столбца

в коде было запутано, я предположил, что он взял тип данных передаваемого значения.

Изменено с

    Columns.Add("number", typeof(int));

на

    Columns.Add("number", typeof(long));
...