我用VB应用程序创建了一个SQL数据库。我有一个允许用户插入新记录的表单。每条新记录都有一个唯一的ID号。我希望用户能够使用ID号搜索记录。
我有一个带有文本框的页面,允许他们插入ID号。然后他们点击提交。所以查询数据库;如果ID号不存在,则会出现一个错误消息框。如果ID号确实存在,则显示新页面并显示记录。
我假设当用户输入他们的ID号时,数据库连接将在第一页开始。 我有两个订单表,所以我需要查询两个表。这是我第一页的代码。
Try
Dim dbconnection As SqlConnection = New SqlConnection("Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Cara\Documents\Visual Studio 2012\Projects\Online Portal Solutions\Online Portal Solutions\Online Portal Solutions Database.mdf;Integrated Security=True")
dbconnection.Open()
Dim statement As String = "SELECT * FROM [JKPOrders] WHERE OrderNoID='" & txt_jkpfind.Text & "';"
Dim com As SqlCommand = New SqlCommand(statement, dbconnection)
Dim read As SqlDataReader = com.ExecuteReader
Dim dbconnection2 As SqlConnection = New SqlConnection("Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Cara\Documents\Visual Studio 2012\Projects\Online Portal Solutions\Online Portal Solutions\Online Portal Solutions Database.mdf;Integrated Security=True")
dbconnection2.Open()
Dim statement2 As String = "SELECT * FROM [ClarkeOrders] WHERE OrderNoID='" & txt_jkpfind.Text & "';"
Dim com2 As SqlCommand = New SqlCommand(statement2, dbconnection2)
Dim read2 As SqlDataReader = com2.ExecuteReader
If read.Read Then
If txt_jkpfind.Text.ToString <> read("OrderNoID") Then
jkpfindorderno = Val(txt_jkpfind.Text)
Me.Hide()
frm_Ecustjkpbookingsummary.Show()
End If
ElseIf read2.Read Then
If txt_jkpfind.Text.ToString <> read("OrderNoID") Then
jkpfindorderno = Val(txt_jkpfind.Text)
Me.Hide()
frm_Ecustjkpbookingsummary.Show()
End If
Else
MessageBox.Show("no.", "No Entry",
MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
Catch ex As Exception
End Try
它识别记录何时不存在并显示消息框但是当输入正确的ID号时它没有做任何事情,我做错了什么?
另外,我在下一页上有一个显示记录的数据适配器,数据绑定器等。这是我显示记录的方式,我该怎么做?
答案 0 :(得分:1)
不需要两个连接。您正在使用mdf数据库文件。哪个是访问数据库文件。我非常肯定Access一次只允许一个连接。所以你是第一个查询可能会阻止第二个查询。通过创建一个连接来查看它是否有效。
此外,所有数据库连接都是此函数的本地连接,与数据绑定无关。您必须向我们展示有关如何设置绑定的详细信息,以指出它可能出现的问题。
此外,您应该使用参数化查询来防止sql注入和其他事情。要参数化第一个查询,请执行此操作。
Dim statement As String = "SELECT * FROM [JKPOrders] WHERE OrderNoID=@OrderId;"
Dim com As SqlCommand = New SqlCommand(statement, dbconnection)
com.Parameters.Add(new SqlParameter("@OrderId", txt_jkpfind.Text))
答案 1 :(得分:0)
试试这个
If read.Read Then
If txt_jkpfind.Text.ToString <> read("OrderNoID").ToString() Then
jkpfindorderno = Val(txt_jkpfind.Text)
Me.Hide()
frm_Ecustjkpbookingsummary.Show()
End If
ElseIf read2.Read Then
If txt_jkpfind.Text.ToString <> read("OrderNoID").ToString() Then
jkpfindorderno = Val(txt_jkpfind.Text)
Me.Hide()
frm_Ecustjkpbookingsummary.Show()
End If
Else
MessageBox.Show("no.", "No Entry",
MessageBoxButtons.OK, MessageBoxIcon.Error)
End If