Jet Access查询不起作用通配符未选择

时间:2018-11-04 17:16:50

标签: sql vb.net dataset jet

我正在使用数据集sql查询并尝试填充reportviewer字段,但是运气不佳。它不断填充现场中的所有内容。所有这些东西对我来说都是新手,所以我什至不认为我正在以正确的方式来对待。

我正在尝试从通配符中选择数据,该通配符由vb.net中的字符串变量表示。如果我在where列中使用Class_Schedule。(blah)在查询构建器中运行它,它将起作用。但是,如果我使用查询生成器并运行它,无论我在参数中输入什么内容,它都会填充整个字段。

SELECT        MemberBase.ID, MemberBase.EntireName, Class_Schedule.MemberID
FROM            (MemberBase INNER JOIN
                         Class_Schedule ON MemberBase.ID = Class_Schedule.MemberID)
WHERE        (true = ?)

我们将不胜感激,感谢您的解释不力。我用Google搜索并尝试了2个小时的各种尝试,但是却无处可寻。

编辑:

理想情况下,这是我想要的,但它不起作用:

SELECT        MemberBase.ID, MemberBase.EntireName, Class_Schedule.MemberID
FROM            (MemberBase INNER JOIN
                     Class_Schedule ON MemberBase.ID = 
Class_Schedule.MemberID)
WHERE        (Class_Schedule.? = true)

1 个答案:

答案 0 :(得分:1)

查询参数占位符?仅接受要比较的值。如果不能包含列名。如果要比较不同的列,则必须使用字符串串联来构建查询。

sql = "SELECT ... WHERE [" & column_name & "] = true"

或使用新的字符串插值(其中column_name是VB字符串变量):

sql = $"SELECT ... WHERE [{column_name}] = true"

如果与true以外的值进行比较,出于安全考虑,仍应使用参数。参见:SQL injection

您不能将列名作为参数传递,但是可以使用技巧:

SELECT ... WHERE (col1 = true OR 0 = ?) AND (col2 = true OR 0 = ?) AND (col3 = true OR 0 = ?)

然后为要测试的列传递参数1,为其他列传递参数0。