SqlCeException:表达式求值导致溢出

时间:2011-07-07 21:43:49

标签: c# sql visual-studio sql-server-ce

还有其他问题有类似的声音标题,但我的情况似乎是独一无二的,所以这里是:

这个问题似乎集中在我的表中使用十进制值。如果我创建一个表并省略精度和比例参数,则表会创建,但我的所有数据都将作为整数值插入。如果我创建一个表并指定Precision和Scale参数,我会在SQL语句下面抛出异常。

这是我的Create Table语句:

CREATE TABLE RMCoil 
(
    ID int IDENTITY (100,1) PRIMARY KEY
,   Modified DateTime NOT NULL
,   [Type] nchar(1)
,   [Model] nvarchar(50)
,   [CPPartNo] nvarchar(50)
,   [FH] decimal(10,10)
,   [FL] decimal(10,10)
,   [FPI] int
,   [TR] nchar(1)
,   [FinThk] decimal(10,10)
,   [FinMat] nchar(1)
,   [TubeOD] int
,   [Rifled] nchar(1)
,   [WallThk] decimal(10,10)
,   [CKT] int
,   [RD] int
,   [Split] nvarchar(50)
,   [CKT1] int
,   [CKT2] int
,   [CKT3] int
,   [CKT4] int
,   [Feed1] int
,   [Feed2] int
,   [Feed3] int
,   [Feed4] int
,   [Altitude] decimal(10,10)
,   [Connection] decimal(10,10)
,   [Header] decimal(10,10)
) 

SqlCeCommand.ExecuteNonQuery()返回-1,但这必须正常,因为它会创建表。

如果存在表,则SELECT语句可以正常工作:

SELECT
    ID
,   Modified
,   [ID]
,   [MODIFIED]
,   [Model]
,   [VoltCode]
,   [Vendor]
,   [Product]
,   [ACRLA208SP]
,   [LRA208SP]
,   [ACRLA230SP]
,   [LRA230SP]
,   [ACRLA208]
,   [LRA208]
,   [ACRLA230]
,   [LRA230]
,   [ACRLA380]
,   [LRA380]
,   [ACRLA460]
,   [LRA460]
,   [ACRLA575]
,   [LRA575]
,   [ECRLA208]
,   [ECRLA230]
,   [ECRLA460]
,   [ECRLA575]
,   [Displacement]
,   [CF0]
,   [CF1]
,   [CF2]
,   [CF3]
,   [CF4]
,   [CF5]
,   [CF6]
,   [CF7]
,   [CF8]
,   [CF9]
,   [CF10]
,   [CF11]
,   [CF12]
,   [CF13]
,   [CF14]
,   [CF15]
,   [CF16]
,   [CF17]
,   [CF18]
,   [CF19]
,   [CF20]
,   [CF21]
,   [CF22]
,   [CF23]
,   [CF24]
,   [CF25]
,   [CF26]
,   [CF27]
,   [CF28]
,   [CF29]
,   [CF30]
,   [CF31]
,   [CF32]
,   [CF33]
,   [CF34]
,   [CF35]
,   [CF36]
,   [CF37]
,   [CF38]
,   [CF39] 
FROM RMCompressor

SqlCeCommand.CommandText.Length = 633

INSERT INTO RMCompressor
(
    Modified
,   [Model]
,   [VoltCode]
,   [Vendor]
,   [Product]
,   [ACRLA208SP]
,   [LRA208SP]
,   [ACRLA230SP]
,   [LRA230SP]
,   [ACRLA208]
,   [LRA208]
,   [ACRLA230]
,   [LRA230]
,   [ACRLA380]
,   [LRA380]
,   [ACRLA460]
,   [LRA460]
,   [ACRLA575]
,   [LRA575]
,   [ECRLA208]
,   [ECRLA230]
,   [ECRLA460]
,   [ECRLA575]
,   [Displacement]
,   [CF0]
,   [CF1]
,   [CF2]
,   [CF3]
,   [CF4]
,   [CF5]
,   [CF6]
,   [CF7]
,   [CF8]
,   [CF9]
,   [CF10]
,   [CF11]
,   [CF12]
,   [CF13]
,   [CF14]
,   [CF15]
,   [CF16]
,   [CF17]
,   [CF18]
,   [CF19]
,   [CF20]
,   [CF21]
,   [CF22]
,   [CF23]
,   [CF24]
,   [CF25]
,   [CF26]
,   [CF27]
,   [CF28]
,   [CF29]
,   [CF30]
,   [CF31]
,   [CF32]
,   [CF33]
,   [CF34]
,   [CF35]
,   [CF36]
,   [CF37]
,   [CF38]
,   [CF39])
 VALUES
(
    GetDate()
,   @Model
,   @VoltCode
,   @Vendor
,   @Product
,   @ACRLA208SP
,   @LRA208SP
,   @ACRLA230SP
,   @LRA230SP
,   @ACRLA208
,   @LRA208
,   @ACRLA230
,   @LRA230
,   @ACRLA380
,   @LRA380
,   @ACRLA460
,   @LRA460
,   @ACRLA575
,   @LRA575
,   @ECRLA208
,   @ECRLA230
,   @ECRLA460
,   @ECRLA575
,   @Displacement
,   @CF0
,   @CF1
,   @CF2
,   @CF3
,   @CF4
,   @CF5
,   @CF6
,   @CF7
,   @CF8
,   @CF9
,   @CF10
,   @CF11
,   @CF12
,   @CF13
,   @CF14
,   @CF15
,   @CF16
,   @CF17
,   @CF18
,   @CF19
,   @CF20
,   @CF21
,   @CF22
,   @CF23
,   @CF24
,   @CF25
,   @CF26
,   @CF27
,   @CF28
,   @CF29
,   @CF30
,   @CF31
,   @CF32
,   @CF33
,   @CF34
,   @CF35
,   @CF36
,   @CF37
,   @CF38
,   @CF39
)

SqlCeException: Expression evaluation caused an overflow. [ Name of function (if known) = ] HResult: -2147217900 NativeError: 25901 来源: SQL Server Compact ADO.NET Data Provider

有谁知道如何阅读HResult或NativeError?

我的INSERT语句不是太长或什么的,是吗?

如果有帮助,我上传了我的Visual Studio 2010 C#项目 SqlCeTool (没有二进制文件)>> HERE <<(我将在解决此问题后删除我的项目链接)。< / p>

1 个答案:

答案 0 :(得分:3)

您正在创建具有相同精度和比例的十进制值,是否有意?就目前而言,您正在创建像Altitude这样的字段,其中可以包含.0000000000到.9999999999的值(假设我算得正确)。我相信你会想要将你的精度和比例调整为高度(20,10)

Books On Line文章讨论Precision, Scale, and Length货币报价:“精确度是数字中的位数。比例是数字中小数点右边的位数。例如,数字123.45精度为5,刻度为2.“