SqlCeException:表达式求值导致溢出

本文关键字:溢出 表达式 SqlCeException | 更新日期: 2023-09-27 18:01:25

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

这个问题似乎集中在使用十进制值在我的表。如果我创建一个表并省略Precision和Scale参数,则表将创建,但我的所有数据都将作为整数值插入。如果我创建了一个表并指定了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,但这必须是OK的,因为它创建了表。

如果存在表,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。长度= 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(没有二进制文件)>>这里<<(我将删除我的项目链接后,这个问题得到解决)。

SqlCeException:表达式求值导致溢出

您正在创建具有相同精度和比例的十进制值,这是预期的吗?目前,您正在创建像Altitude这样的字段,它可以包含0.0000000000到0.9999999999的值(假设我没算错)。我相信你会想要调整你的精度和比例,像海拔(20,10)

Books On Line一篇讨论精度、比例和长度的文章Money引用:"精度是一个数中的位数。小数是一个数中小数点右边的位数。例如,数字123.45的精度是5,比例是2。"