0

这是我的代码:

    'Set up connection string
    Dim cnString As String

    cnString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=..\data\testingDB.mdb"

    Dim sqlQRY As String = "SELECT * " & _
        "FROM   users " & _
        "WHERE  firstName = '" & TextBox1.Text & "' " & _
        "  AND  lastName  = '" & TextBox2.Text & "'"

    'Create connection
    Dim conn As OleDbConnection = New OleDbConnection(cnString)

    Try
        ' Open connection
        conn.Open()

        'create data adapter
        Dim da As OleDbDataAdapter = New OleDbDataAdapter(sqlQRY, conn)

        'create dataset
        Dim ds As DataSet = New DataSet

        'fill dataset
        da.Fill(ds, "user")

        'get data table
        Dim dt As DataTable = ds.Tables("user")

        'display data
        Dim row As DataRow

        If TextBox1.Text = dt.Rows(0).Item(1) And TextBox2.Text = dt.Rows(0).Item(2) And dt.Rows(0).Item(5) = 10 Then
            MsgBox("10")
        ElseIf TextBox1.Text = dt.Rows(0).Item(1) And TextBox2.Text = dt.Rows(0).Item(2) And dt.Rows(0).Item(5) = 9 Then
            MsgBox("9")
        ElseIf TextBox1.Text = dt.Rows(0).Item(1) And TextBox2.Text = dt.Rows(0).Item(2) Then
            MsgBox("SUCCESS")
        Else
            MsgBox("fail")
        End If




    Catch ex As OleDbException
        MsgBox("Error: " & ex.ToString & vbCrLf)
    Finally
        ' Close connection
        conn.Close()
    End Try

我正在尝试使它变得简单并获得相同的结果。如您所见,if-else 语句很混乱,但它 100% 有效。我确实希望 if-else 语句简单并且与上面的工作方式相同。

4

4 回答 4

1

编辑为检查 DbNull 值的 row(5) 的值,试试这个 if-else 语句:

        Dim row As DataRow = dt.Rows(0)
        Dim r5 as Object = row(5)
        If IsDbNull(r5) then r5 = 0

        If TextBox1.Text = row(1) And TextBox2.Text = row(2) Then
            Select Case r5
                Case 10, 9 : MsgBox(r5)
                Case Else : MsgBox("SUCCESS")
            End Select
        Else
            MsgBox("fail")
        End If
于 2013-09-28T07:13:13.910 回答
0
Dim cmd as New OledbCommand
Dim sqlQRY As String = "SELECT  count(*) " & _
        "FROM   users " & _
        "WHERE  firstName = @fname " & _
        "  AND  lastName  = @lname"

cmd.parameters.add("@fname",TextBox1.Text)
cmd.parameters.add("@lname",TextBox2.Text)

Dim Cnt as Integer
cmd = new oledbcommand(sqlQRy,con)
Cnt = Convert.ToInt32( cmd.ExecuteScalar())
if  Cnt>=1 then
msgbox("Success")

else if 

msgbox("Failure")

end if 
于 2013-09-28T06:52:31.813 回答
0
  1. 您必须知道您的 SQL 在逻辑上可能返回多于 1 行。您需要确保当您读取打算以这种方式测试的数据时,您的 SQL 使用主键并仅返回 1 行,否则添加更多数据时可能会出现问题。我建议您首先确保在执行 if 测试之前准确返回 1 行(请参阅我对 @SenthilKumar 的评论)。当没有找到行并且不执行测试时,您需要向用户发送适当的消息。

  2. 如果您恰好返回 1 行,则必须确保数据不为空(如果适用,这取决于您的列的定义方式)。

  3. 请记住,来自 UI 的数据可以用空格填充或混合大小写。您可能需要注意这一点。

  4. 您的 IF 语句并不太复杂。我不确定您到底在测试什么,但可以观察到您正在使用以下条件:

TextBox1.Text = dt.Rows(0).Item(1) 和 TextBox2.Text = dt.Rows(0).Item(2) 和 dt.Rows(0).Item(5) TextBox1.Text = dt.Rows (0).Item(1) 和 TextBox2.Text = dt.Rows(0).Item(2) 和 dt.Rows(0).Item(5) TextBox1.Text = dt.Rows(0).Item(1 ) 和 TextBox2.Text = dt.Rows(0).Item(2)

可以看到表达式 dt.Rows(0).Item(1) And TextBox2.Text = dt.Rows(0).Item(2) 很常见。您可以将该值分配给布尔表达式并在测试中使用它。

您也不应该在尝试的范围内包括非数据库处理。

于 2013-09-28T07:05:22.063 回答
0

只是更简单一点..

If TextBox1.Text = dt.Rows(0).Item(1) And TextBox2.Text = dt.Rows(0).Item(2)
    MsgBox("SUCCESS - " & format(dt.Rows(0).Item(5))) 
Else
    MsgBox("fail")
End If
于 2013-09-28T09:42:25.633 回答