这是我的代码:
'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语句简单,并且与上面相同。
答案 0 :(得分:1)
编辑以检查行(5)的值以获取DbNull值 尝试使用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
答案 1 :(得分: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
答案 2 :(得分:0)
您必须知道您的SQL可以在逻辑上返回超过1行。您需要确保在读取要以此方式测试的数据时,SQL使用主键并仅返回1行,否则在添加更多数据时可能会出现问题。我建议您首先确保在执行if测试之前返回完整的1行(请参阅我对@SenthilKumar的评论)。当没有找到任何行并且不执行测试时,您需要向用户发送适当的消息。
如果您只有1行,则必须确保数据不为空(如果适用,这取决于列的定义方式)。
请记住,来自UI的数据可以用空格填充或者是大小写混合。您可能需要注意这一点。
您的IF语句不是太复杂。我不确定您要测试的是什么,但可以观察到您使用的是以下条件:
TextBox1.Text = dt.Rows(0).Item(1)And TextBox2.Text = dt.Rows(0).Item(2)and dt.Rows(0).Item(5) TextBox1.Text = dt.Rows(0).Item(1)And TextBox2.Text = dt.Rows(0).Item(2)and dt.Rows(0).Item(5) TextBox1.Text = dt.Rows(0).Item(1)And TextBox2.Text = dt.Rows(0).Item(2)
你可以看到表达式 dt.Rows(0).Item(1)和TextBox2.Text = dt.Rows(0).Item(2)很常见。您可以将值赋给布尔表达式并在测试中使用它。
您也不应该在尝试范围内包含非数据库处理。
答案 3 :(得分: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