我正在使用数据集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)
答案 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。