使用MS Access querydefs将参数作为Decimal类型传递时PARAMETER子句中的语法错误

时间:2013-10-23 14:59:43

标签: .net vb.net ms-access

我正在尝试编写一个插入查询来获取财务数据并将其从.net

写入我的Access数据库

问题是我无法通过十进制数据类型参数传递我的数据,尽管能够在Ms Access参数窗口中选择它们作为十进制数据类型,尽管数据库能够创建十进制数据类型的表字段。

我在想,我正在尝试做什么?如果是这样的话?

以下是我的查询的一个小节:

PARAMETERS pMidPrice Decimal;
INSERT INTO NonStandardPricingInstructions ( MidPrice)
SELECT pMidPrice as Expr1

如果我将Decimal更改为IEEEDouble,那么它可以正常工作,但如果可能的话,我宁愿通过Decimal。

非常感谢

2 个答案:

答案 0 :(得分:2)

以下似乎对我有用:

对于名为[qryDecimalTest]的Access中保存的查询:

PARAMETERS pDecimalColValue Decimal;
SELECT Clients.ID
FROM Clients
WHERE (((Clients.decimalCol)=[pDecimalColValue]));

以下C#代码查找Decimal字段为3的记录并返回正确的ID值

cmd.CommandText =
    "SELECT ID FROM qryDecimalTest";
decimal queryParameterValue = 3;
cmd.Parameters.Add("?", OleDbType.Decimal).Value = queryParameterValue;
var thing = cmd.ExecuteScalar();
Console.WriteLine(String.Format("{0} ({1})", thing, thing.GetType().ToString()));

编辑:评论

我尝试了另一个测试,但这次我使用Jet.OLEDB来对抗Access 2000 .mdb文件。我将Access中保存的查询更改为

PARAMETERS pMidPrice Decimal;
INSERT INTO NonStandardPricingInstructions ( MidPrice )
SELECT [pMidPrice] AS Expr1;

并使用以下C#代码

cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText =
    "qryDecimalTest";
decimal queryParameterValue = 3;
cmd.Parameters.Add("?", OleDbType.Decimal).Value = queryParameterValue;
cmd.ExecuteNonQuery();

这也很好。

答案 1 :(得分:0)

对于与我有同样问题的人,我在此处详细说明了解决方案:Store more than four decimal places in an MS Access Currency field