Несоответствие типа в выражении

Я получаю несоответствие типа «в выражении критериев при вставке новой записи в базу данных доступа. Приложение отлично работает на компьютерах Великобритании, но на южноафриканских компьютерах эта ошибка возникает. Это заставляет меня думать, что это связано с форматом даты. Однако, если я изменю свои региональные настройки на юг Африки, я не могу воспроизвести ошибку.

Код выглядит следующим образом:

cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = «INSERT INTO tblOrders » + «( UserID, AccountNumber, EmailAddress, InvoiceAddressID, DeliveryAddressID, PurchaseOrderReference, Comments, TotalPrice, )» + «VALUES (?,?,?,?,?,?,?,?,?);»; cmd.Parameters.Add(new OleDbParameter(«@UserID», OleDbType.Integer)).Value = userID; cmd.Parameters.Add(new OleDbParameter(«@AccountNumber», OleDbType.VarChar)).Value = accountNumber; cmd.Parameters.Add(new OleDbParameter(«@EmailAddress», OleDbType.VarChar)).Value = emailAddress; cmd.Parameters.Add(new OleDbParameter(«@InvoiceAddressID», OleDbType.Integer)).Value = invoiceAddressID; cmd.Parameters.Add(new OleDbParameter(«@DeliveryAddressID», OleDbType.Integer)).Value = deliveryAddressID; cmd.Parameters.Add(new OleDbParameter(«@PurchaseOrderReference», OleDbType.VarChar)).Value = purchaseOrderReference; cmd.Parameters.Add(new OleDbParameter(«@Comments», OleDbType.VarChar)).Value = comments; cmd.Parameters.Add(new OleDbParameter(«@TotalPrice», OleDbType.Decimal)).Value = totalPrice; cmd.Parameters.Add(new OleDbParameter(«@Date», OleDbType.Date)).Value = date; cmd.Parameters.Add(new OleDbParameter(«@ID»,OleDbType.Integer)).Value = orderID; ExecuteNonQuery(cmd); // this line errors

В Stack много похожих вопросов, но все они, кажется, строят строки SQL вручную или, как представляется, это другая причина. Я дважды проверял порядок параметров так же, как и в запросе InsertOrder (и код работает на 99,9% пользователей).

ОБНОВЛЕНИЕ 8/8/2014

На самом деле это выглядит как параметр Цена, который вызывает проблему, а не дату. Если я жестко привяжу цену к 0, тогда она отлично работает. Однако на компьютерах Великобритании и Южной Африки totalPrice.ToString() теперь производит «350,6», когда я принудительно подключил приложение к en-GB в web.config. Так что должно быть так, что на южноафриканских ПК доступ все еще срабатывает на десятичном значении. Как я могу сделать одну и ту же работу приложений как на британских, так и на южноафриканских ПК? Я не понимаю, как это может неверно интерпретировать десятичное значение при использовании параметров.

Цена — это тип данных «Валюта» в базе данных Access.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *