DataRow-OverflowException:对于Int32,值太大或太小

时间:2019-05-23 09:34:27

标签: c# exception overflow datarow

问题

我遇到了一些在下面抛出错误的现有代码,这是使用.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 :(得分:0)

代码中的

列定义被混淆了,我以为它选择了要传递的值的数据类型。

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

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