我只是想在我的SQL数据库表中查找所有不等于null的记录。因此,当我编写select语句时,我会像对待其他一切以避免SQL注入问题一样对待它。
这是一个例子:
Command = New SqlCommand
connection.Open()
Command.Connection = connection
Command.CommandType = CommandType.Text
Command.CommandText = "SELECT * FROM MyTable WHERE [Comments] IS NOT NULL" 'Have tried [Comments]=@Comments
'Command.Parameters.AddWithValue("@Comments", "IS NOT NULL")
da = New SqlDataAdapter(Command)
da.Fill(ds, "MyTable")
For Each roww As DataRow In ds.Tables("MyTable").Rows
If (Not IsDBNull(roww("Comments"))) Then
IDLIST.Add(roww("TempID"))
Comments_RichText.AppendText("Date of Service: " & roww("FromDate") & " | " & roww("Name") & vbNewLine & roww("Comments") & vbNewLine & vbNewLine)
End If
Next
connection.close
如您所见,我尝试过使用参数来避免SQL注入(但什么也不返回),也没有尝试使用参数来返回正确的行。为什么参数方式不起作用?由于我没有在语句中串联任何内容,例如TextBox.Text或字符串,因此是否必须对
IS NOT NULL
使用参数?任何帮助都是很好的,因为我不明白为什么一种方法有效而另一种无效。 最佳答案
参数化将不起作用,因为它将使用相等运算符进行检查,而该运算符不适用于IS NOT NULL
这样的文字。您的想法不起作用(它不仅会用您的参数重写字符串)。
但是,使用null合并(例如:
SELECT * FROM MyTable WHERE ISNULL([Comments].'Empty') != @Comments
如果您要理解我的意思,则在
@Comments
为'Empty'的情况下要查找空的。显然,您可以使用所需的任何字符串变量代替'Empty'
。关于mysql - vb.net sql select语句查找所有非空值,我是否需要使用参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59667863/