0

条件が true の場合、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
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

String.Compare と Trim を使用してみてください。

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

これが機能しない場合、これらの値は等しくないと思います。

幸運を。

于 2013-01-31T04:05:58.030 に答える
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

これを試して :

   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

それを確認するためにテストしましたか

ddlType.Text = dr("小麦の種類")

テーブルのすべての行に当てはまりませんか?

于 2013-01-31T03:50:47.147 に答える