vb.net sql select语句以查找所有非空值,是否需要使用参数?

问题描述 投票:0回答:1

我只是试图在我的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使用参数?任何帮助都将非常有用,因为我不了解为什么一种方法有效而另一种无效。

mysql vb.net parameter-passing
1个回答
0
投票

参数化将不起作用,因为这将使用相等运算符进行检查,而该运算符不适用于IS NOT NULL之类的文字。您的想法不起作用(它不只是用您的参数重写字符串)。

但是,使用null合并,例如,这仍然很容易实现:

 SELECT * FROM MyTable WHERE ISNULL([Comments].'Empty') != @Comments

如果你想得到我的意思,当你想找到空的时,@Comments'Empty'。您显然可以使用所需的任何字符串变量代替'Empty'

© www.soinside.com 2019 - 2024. All rights reserved.