繁体   English   中英

VB.Net根据用户输入文本框从sql数据库检索数据

[英]VB.Net retrieve data from sql database according to user input textbox

我已经用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号时它什么也没做,我在做什么错?

另外,我在显示记录的下一页上有一个数据适配器,数据绑定器等。 这是我显示记录的方式,我该怎么做?

不需要两个连接。 您正在使用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))

这样尝试

 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM