Ziv*_*Ziv 3 c# sql ms-access visual-studio
我正在尝试使用查询编辑器在访问数据库中为C#数据集创建查询,但创建的方法表示存在问题但未正确创建.
SELECT Discs.*
FROM Discs
WHERE (Title=@Title OR @Title IS NULL) AND
(Type=@Type OR @Type IS NULL) AND
(ContainerID=@ContainerID OR @ContainerID IS NULL) AND
NOT (@Title IS NULL AND @Type IS NULL AND @ContainerID IS NULL)
Run Code Online (Sandbox Code Playgroud)
错误是:
Generated SELECT statement.
Error in WHERE clause near '@'.
Unable to parse query text.
Run Code Online (Sandbox Code Playgroud)
生成的select方法没有任何参数且无法使用.我在访问查询中尝试了完全相同的SQL语句,它运行得很完美,在将它转移到C#时,我应该采取哪些不同的做法?
据我所知(上次我试过,.NET 1.1是最新的,所以我不确定是这种情况),当你与Jet OLEDB提供商交谈时,你应该在查询中用问号表示参数(参数未命名且订单很重要):
SELECT [Discs].*
FROM [Discs]
WHERE ([Title]=? OR ? IS NULL) AND
([Type]=? OR ? IS NULL) AND
([ContainerID]=? OR ? IS NULL) AND
NOT (? IS NULL AND ? IS NULL AND ? IS NULL)
Run Code Online (Sandbox Code Playgroud)
(我将标识符包装在括号中,以便它们中的一个成为关键字时不会导致问题,您可以在将参数更改为问号之前尝试此操作)
考虑到您的查询重复使用相同的参数,您可能不得不多次将其添加到实例的Parameters集合中OleDbCommand.