如果其他条件不起作用

时间:2013-01-31 03:41:47

标签: vb.net ms-access

我不知道这个代码,因为如果条件为真,msgbox会出现,但如果条件为false,则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

5 个答案:

答案 0 :(得分:1)

如果WheatType不在数据库中,您将永远不会看到“错误”消息,因为在这种情况下,对dr.Read()的第一次调用将返回False ...将没有记录,并且您的{{ 1}}条件永远不会被评估。

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

请改为尝试:

If ddlType.Text = dr("WheatType")

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

您是否经过测试以确保

  

ddlType.Text = dr(“WheatType”)

对于表格中的每一行都不是真的吗?

答案 3 :(得分: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

答案 4 :(得分:0)

尝试使用String.Compare和Trim:

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

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

祝你好运。