开发者

SqlCeException: Expression evaluation caused an overflow

There are other questions with similar sounding titles, but my case appears to be unique, so here goes:

This problem seems to be centered on using Decimal values in my table. If I create a table and leave out the Precision and Scale parameters, the table creates but all of my data is inserted as an integer value. If I create a table and specify the Precision and Scale parameters, I get the exception thrown below my SQL Statements.

Here is my Create Table statement:

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() returns -1, but this must be OK because it creates the table.

If a table exists, the SELECT statement works fine:

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 Source: SQL Server Compact ADO.NET Data Provider

Does anyone know how to read th开发者_运维知识库e HResult or NativeError?

My INSERT statement isn't too long or something, is it?

If it helps, I've uploaded my Visual Studio 2010 C# project SqlCeTool (without the binaries) >> HERE << (I will remove my project link after this issue is resolved).


You are creating a decimal values with equal precision and scale, is that intended? As it stands, you are creating fields like Altitude which can contain values of .0000000000 to .9999999999 (assuming I counted right). I believe you will want to adjust your precision and scale to be something like Altitude(20,10)

Books On Line article discussing Precision, Scale, and Length Money quote: "Precision is the number of digits in a number. Scale is the number of digits to the right of the decimal point in a number. For example, the number 123.45 has a precision of 5 and a scale of 2."

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜