Nic*_*ckG 6 c# oledb ms-access
在将新记录插入访问数据库时,我收到"条件表达式中的数据类型不匹配"错误.该应用程序在英国计算机上运行良好,但在南非计算机上它会抛出此错误.这让我觉得它与日期格式有关.但是,如果我将自己的区域设置更改为南非,我无法重现错误.
代码如下:
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "INSERT INTO tblOrders "
+ "( UserID, AccountNumber, EmailAddress, InvoiceAddressID, DeliveryAddressID, PurchaseOrderReference, Comments, TotalPrice, [Date] )"
+ "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
Run Code Online (Sandbox Code Playgroud)
Stack上有许多类似的问题,但它们似乎都是手动构建SQL字符串,否则它们似乎是另一个原因.我已经仔细检查了参数顺序与InsertOrder查询中的相同(并且代码适用于99.9%的用户).
更新2014年8月8日
它实际上似乎 是导致问题的Price参数 - 而不是日期.如果我将价格硬编码为0,那么它可以正常工作.但是在英国和南非的计算机上,totalPrice.ToString()产生"350.6",因为我已经将应用程序强制转换为web.config中的en-GB.因此,必须是这样的情况,在南非的PC上,Access仍然会在十进制值上绊倒.如何在英国和南非的PC上制作相同的应用程序?我不明白在使用参数时它是如何误解十进制值的.
价格是Access数据库中的"货币"数据类型.
| 归档时间: |
|
| 查看次数: |
1923 次 |
| 最近记录: |