我正在铁路预订系统上制作一个项目,我希望用户可以访问他的预订历史记录。以下代码访问数据库中两个表的记录。当我只为一个表运行此代码(从一个表访问记录)时,它工作正常,但是当我为两个表运行此代码时,它给出了一个错误,说OleDbexception未处理(没有给出更多必需参数的值)< / p>
da.Fill(ds,&#34; Table2&#34;)
我知道这一行是错误的,因为它只适用于一张桌子,但我不知道如何为两张桌子做这件事。请帮忙 !谢谢 !
Imports System.Data.OleDb
Public Class Form12
Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\AMEN\Documents\Railway.accdb"
Dim MyConn As OleDbConnection
Dim da As OleDbDataAdapter
Dim ds As DataSet
Dim tables As DataTableCollection
Dim source1 As New BindingSource
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MyConn = New OleDbConnection
MyConn.ConnectionString = connString
ds = New DataSet
tables = ds.Tables
da = New OleDbDataAdapter("Select P.Tnumber, P.Name , P.Age ,T.PNR_Number, P.Train_Name , P.SeatNo , P.Berth , P.Coach_Number , T.Starting_Point , T.Destination , T.Departure , T.Arrival , T.Fare From Table1,Table2 Where P.Train_Name = T.Train_Name and P.Phone= TextBox1.Text ", MyConn)
da.Fill(ds, "Table2")
Dim view As New DataView(tables(0))
source1.DataSource = view
DataGridView1.DataSource = view
End Sub
结束班
答案 0 :(得分:0)
您的查询中看起来有两个表要加入。我将继续前提,Table1是T,Table2在您的查询中是P.如果它被逆转,只需改变它。
话虽如此,试试这个:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Using cn = New OleDbConnection(connString)
cn.Open()
Using da = New OleDbDataAdapter("SELECT P.Tnumber, P.Name , P.Age ,T.PNR_Number, P.Train_Name , P.SeatNo , P.Berth , P.Coach_Number , T.Starting_Point , T.Destination , T.Departure , T.Arrival , T.Fare FROM Table1 T INNER JOIN Table2 P ON P.Train_Name = T.Train_Name WHERE P.Phone='" & TextBox1.Text & "'", cn)
Dim dt = New DataTable
da.Fill(dt)
DataGridView1.DataSource = dt
End Using
End Using
End Sub
将块用于连接和数据适配器等一次性资源也是一个好主意。