我只是想在我的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/

10-10 18:32
查看更多