SqlCeException: оценка выражения вызвала переполнение - PullRequest
0 голосов
/ 08 июля 2011

Есть другие вопросы с похожими названиями, но мой случай кажется уникальным, так что вот так:

Эта проблема, кажется, связана с использованием десятичных значений в моей таблице. Если я создаю таблицу и пропускаю параметры Precision и Scale, таблица создается, но все мои данные вставляются как целочисленное значение. Если я создаю таблицу и указываю параметры Precision и Scale, я получаю исключение ниже моих операторов SQL.

Вот мой оператор Создать таблицу:

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 (без двоичных файлов) >> ЗДЕСЬ << </a> (я удалю ссылку на проект после этой проблемы решен).

1 Ответ

3 голосов
/ 08 июля 2011

Вы создаете десятичные значения с одинаковой точностью и масштабом, это предназначено?В настоящее время вы создаете такие поля, как высота, которые могут содержать значения от .0000000000 до .9999999999 (при условии, что я считал правильно).Я полагаю, что вы захотите настроить точность и масштаб на что-то вроде высоты над уровнем моря (20,10)

Books On Line, в которой обсуждается статья Точность, масштаб и длина Цитата: «Точностьколичество цифр в числе. Шкала - это число цифр справа от десятичной точки в числе. Например, число 123,45 имеет точность 5 и шкалу 2. "

...