0

我不知道这段代码,因为如果条件为真,msgbox 会出现,但如果条件为假,msgbox 不会出现。任何人都可以给出一些想法。这是代码

 Dim cnnOLEDB As New OleDbConnection(strConnectionString)
        sql = "SELECT * FROM Spec WHERE  Category='1BK' IN ( Silo = '" & txtBin.Text & "' AND WheatType = '" & ddlType.Text & "')"
        cmd = New OleDbCommand(sql, cnnOLEDB)
        cnnOLEDB.Open()
        Dim dr As OleDbDataReader
        dr = cmd.ExecuteReader()
        'If dt.Rows.Count > 0 Then

        While dr.Read()
            If ddlType.Text = dr("WheatType") Then
                MsgBox("OK")
            Else
                MsgBox("Wrong")
            End If
        End While
4

5 回答 5

1

如果 WheatType 不在数据库中,您将永远不会看到“错误”消息,因为在这种情况下,对 dr.Read() 的第一次调用将返回 False... 将没有记录,If ddlType.Text = dr("WheatType")甚至永远不会评估您的条件.

不过,不仅如此,我们这里还有一个严重的安全问题。您不能像这样使用字符串连接将用户输入的数据放入您的 sql 命令中。

试试这个:

'Your WHERE clause looks wrong, too, but I don't know enough about what you're doing to correct it
Dim sql As String = "SELECT * FROM Spec WHERE Category='1BK' IN (Silo= ? AND WheatType= ? )"

Using cnnOLEDB As New OleDbConnection(strConnectionString), _
      cmd As New OleDbCommand(sql, cnnOLEDB)

    'Have to guess at parameter types and lengths here
    cmd.Parameters.Add("Bin", OleDbType.Char, 10).Value = txtBin.Text
    cmd.Parameters.Add("Type", OleDbType.Char, 3).Value = ddlType.Text

    cnnOLEDB.Open()
    Using dr As OleDbDataReader = cmd.ExecuteReader()

        Dim Found As Boolean = False
        While dr.Read()
            If ddlType.Text = dr("WheatType") Then
                MsgBox("OK")
                Found = True
            End If
        End While
        If Not Found Then MsgBox("Wrong")
    End Using
End Using
于 2013-01-31T04:12:17.340 回答
0

您是否进行了测试以确保

ddlType.Text = dr("WheatType")

表中的每一行都不正确?

于 2013-01-31T03:50:47.147 回答
0

尝试这个 :

   While dr.Read()
        If ddlType.Text = dr("WheatType").ToString() Then
            MsgBox("OK")
        Else
            MsgBox("Wrong")
        End If
    End While
于 2013-01-31T03:44:55.913 回答
0

如果您的数据库中不存在搜索字符串,则 dr.Read() 中的代码不起作用,因为 dr 为空。所以你必须像这样改变你的代码

Dim Found As Boolean = False
        While dr.Read()
            If ddlType.Text = dr("WheatType") Then
                MsgBox("OK")
                Found = True
            End If
        End While
        If Found = False Then
                MsgBox("Wrong")
            End If
于 2013-01-31T04:03:56.037 回答
0

尝试使用 String.Compare 和 Trim:

String.Compare(ddlType.Text.Trim(), dr("WheatType").ToString().Trim(), True)

如果这不起作用,我想这些值不相等。

祝你好运。

于 2013-01-31T04:05:58.030 回答