如何在vb.net中使用内部连接填充vb windows窗体应用程序的文本框

如何在vb.net中使用内部连接填充vb windows窗体应用程序的文本框,vb.net,ms-access-2007,Vb.net,Ms Access 2007,我是vb.net新手,我正在制作一个项目航空公司预订系统,因此我必须从两个表中获取数据,并在我的vb表单文本框中显示我正在使用内部连接从两个不同的表中获取数据,但我总是遇到错误,请各位查看我的代码并建议我。这里是机票号,机票预订表中的客户ID和航班ID以及机票预订表和航班详情表中的航班费用和航班ID栏请帮助我 我得到一个或多个必需参数的错误值 Try If Not con.State = ConnectionState.Open Then con.Open() E

我是vb.net新手,我正在制作一个项目航空公司预订系统,因此我必须从两个表中获取数据,并在我的vb表单文本框中显示我正在使用内部连接从两个不同的表中获取数据,但我总是遇到错误,请各位查看我的代码并建议我。这里是机票号,机票预订表中的客户ID和航班ID以及机票预订表和航班详情表中的航班费用和航班ID栏请帮助我

我得到一个或多个必需参数的错误值

Try
    If Not con.State = ConnectionState.Open Then
        con.Open()
    End If
    Dim da As New OleDb.OleDbDataAdapter("SELECT TICKET.TICKET_NO,CUSTOMER.CUSTOMER_ID,FLIGHT.FLIGHT_ID,FLIGHT.FLIGHT_CHARGES FROM TICKET_RESERVATION INNER JOIN FLIGHT_DETAILS ON TICKET_RESERVATION.FLIGHT_ID = FLIGHT_DETAILS.FLIGHT_ID WHERE [TICKET_NO]= '" & txtTicketNo.Text & "'", con)
    Dim ds As New DataSet
    da.Fill(ds, "TICKET_RESERVATION")
    If ds.Tables("TICKET_RESERVATION").Rows.Count > 0 Then
        txtTicketNo.Text = ds.Tables("TICKET_RESERVATION").Rows(0).Item(0).ToString()
        txtCustomerId.Text = ds.Tables("TICKET_RESERVATION").Rows(0).Item(1).ToString()
        txtFlightId.Text = ds.Tables("TICKET_RESERVATION").Rows(0).Item(2).ToString()
        txtAmount.Text = ds.Tables("FLIGHT_DETAILS").Rows(0).Item(3).ToString()

    End If
    con.Close()
Catch ex As Exception
    MsgBox(ex.Message.ToString)
End Try
现在我的问题已经解决了,但是现在我得到的错误对象引用没有设置为对象的实例,我想现在我的代码中有问题了

 Dim ds As New DataSet
        da.Fill(ds)
        If ds.Tables("TICKET_RESERVATION").Rows.Count > 0 Then
            txtTicketNo.Text = ds.Tables("TICKET_RESERVATION").Rows(0).Item(0).ToString()
            txtCustomerId.Text = ds.Tables("TICKET_RESERVATION").Rows(0).Item(1).ToString()
            txtFlightId.Text = ds.Tables("TICKET_RESERVATION").Rows(0).Item(2).ToString()
            txtAmount.Text = ds.Tables("FLIGHT_DETAILS").Rows(0).Item(3).ToString()

        End If

Select查询的投影部分引用了查询中其他地方不存在的表别名,如机票、客户和航班

请尝试此查询(您可以自己修复SQL注入…):

它仍然会崩溃,因为我在您的查询中根本看不到客户别名,但我已修复了其他两个。。。也许你可以把顾客从订票台带走-我想它会在那里

事实上,我会帮你处理的。。。试试这个:

 SELECT TICKET.TICKET_NO,TICKET.CUSTOMER_ID,FLIGHT.FLIGHT_ID,FLIGHT.FLIGHT_CHARGES FROM TICKET_RESERVATION AS TICKET INNER JOIN FLIGHT_DETAILS AS FLIGHT ON TICKET.FLIGHT_ID = FLIGHT.FLIGHT_ID WHERE [TICKET.TICKET_NO]= '" & txtTicketNo.Text & "'", con) 

为什么
内部连接
而不是
左侧外部连接
?如果查询返回空值,则在尝试强制转换
.ToString()
时会导致错误。您需要了解的第一件事是避免SQL注入攻击,这是常规做法,而不仅仅是VB。了解有关命令对象的信息。问问自己,如果我来了,在你的txtTicketNo文本框中输入“A”;Drop table Ticket Reservation;,会发生什么情况……不要回复你的问题。当我使用你的代码时,我得到(加入操作中的语法错误)选择Ticket。Ticket_NO,CUSTOMER。CUSTOMER_ID,FLIGHT.FLIGHT_ID,FLIGHT.FLIGHT\从机票中收费\u预订作为机票内部加入航班\u详细信息作为机票上的航班\u预订。FLIGHT\u ID=航班\u详细信息。FLIGHT\u ID其中[TICKET\u NO]='“&txtTicketNo.Text&”“,con)您仍然在查询的select部分引用Customer表,但在查询的From部分没有指定它…我在myanswermy中添加了更多内容我的问题现在解决了,它正在从表中获取数据,但现在显示错误“object reference not set to a instance of object”(对象引用未设置为对象实例)…请划掉我的最后一条注释。。。你的问题是你不能真正理解数据集——这就是你现在需要集中精力的地方。如果您只是查询(而不是更新)信息,您可能会发现使用DataReader更容易。。。
 SELECT TICKET.TICKET_NO,TICKET.CUSTOMER_ID,FLIGHT.FLIGHT_ID,FLIGHT.FLIGHT_CHARGES FROM TICKET_RESERVATION AS TICKET INNER JOIN FLIGHT_DETAILS AS FLIGHT ON TICKET.FLIGHT_ID = FLIGHT.FLIGHT_ID WHERE [TICKET.TICKET_NO]= '" & txtTicketNo.Text & "'", con)