sql数据库自增id在强类型数据集中出现溢出

发布时间:2024-05-16 07:16 发布:上海旅游网

问题描述:

我使用sqlserver2000,表中id为自增的int(4),强类型数据集中的对应字段id的类型也是System.Int32,但是当我插入的数据量超过short的范围即32767时,出现溢出错误
为了问题清楚一些,贴上一些异常信息,望知情者予以告知,将不甚感激
如下

[OverflowException: 值对于 Int16 太大或太小。]
System.Convert.ToInt16(Int32 value) +2560957
System.Int32.System.IConvertible.ToInt16(IFormatProvider provider) +8
System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) +2562644
System.Data.SqlClient.SqlParameter.CoerceValue(Object value, MetaType destinationType) +842

[OverflowException: 将参数值从 Int32 转换到 Int16 失败。]
System.Data.SqlClient.SqlParameter.CoerceValue(Object value, MetaType destinationType) +904
System.Data.SqlClient.SqlParameter.GetCoercedValue() +58
......
System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) +199
HotelsDataSetTableAdapters.HotelsTableAdapter.GetDataById(Int32 id) in c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\booking\44dfbf35\daccd2bd\App_Code.0h5nhueq.9.cs:2904
写入数据库的时候没有错,数据库中的int类型可以存储大于32767的id,通过其他字段查询数据库也没有错,但是通过这些大于32767的id查询时就会出错

源错误:

行 2873: this.Adapter.SelectCommand.Parameters[0].Value = ((int)(id));
行 2874: HotelsDataSet.HotelsDataTable dataTable = new HotelsDataSet.HotelsDataTable();
行 2875: this.Adapter.Fill(dataTable);
行 2876: return dataTable;
行 2877: }

问题已解决,是数据集的配置问题,以前的数据库中id用了smallint,后来改成了int,数据集的表中也改成了system.int32
但是没有重新刷新适配器的相应方法,所以用这些方法的时候就出错了,还是要谢谢各位热情相助。

问题解答:

把数据库中的id的类型改成bigint就ok了啊

System.Convert.ToInt16(Int32 value)???????????????

short -> System.Int16 (短整型,占 2 字节,表示 16 位整数,范围 -32,768 ~ 32,767)

不管你再怎么转换,System.Convert.ToInt16(最大的值也只能够32767)

你就直接用int类型好了!

还是建议用bigint吧

热点新闻