如何使用 Visual Basic 在 Visual Studio 2013 中创建查询

How to create a query in Visual Studio 2013 using Visual Basic

我有以下代码,通过调试,问题开始于 While 循环。我正在尝试从 2 table 中检索信息并将其插入到创建的 table 中。信息没有被插入到 table 中,我得到的是空白行。

Imports System.Data.OleDb
Public Class RouteToCruise

    Private Sub RouteToCruise_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub

    Private Sub Route_Btn_Click(sender As Object, e As EventArgs) Handles Route_Btn.Click
        Dim row As String
        Dim connectString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                            "Data Source=M:\ICT-Group-Project\DeepBlueProject\DeepBlueProject\DeepBlueTables.mdb"
        Dim cn As OleDbConnection = New OleDbConnection(connectString)
        cn.Open()
        Dim CruiseQuery As String = "SELECT CruiseID, RouteID FROM Cruise WHERE CruiseID =?"
        Dim RouteQuery As String = "SELECT  RouteName FROM Route WHERE RouteID =?"
        Dim cmd As OleDbCommand = New OleDbCommand(CruiseQuery, cn)
        Dim cmd2 As OleDbCommand = New OleDbCommand(RouteQuery, cn)
        cmd.Parameters.AddWithValue("?", Route_Txt.Text)


        Dim reader As OleDbDataReader
        reader = cmd.ExecuteReader

        'RCTable.Width = Unit.Percentage(90.0)
        RCTable.ColumnCount = 2
        RCTable.Rows.Add()
        RCTable.Columns(0).Name = "CruiseID"
        RCTable.Columns(1).Name = "Route"



        While reader.Read()
            Dim rID As String = reader("RouteID").ToString()
            cmd2.Parameters.AddWithValue("?", rID)

            Dim reader2 As OleDbDataReader = cmd2.ExecuteReader()


            'MsgBox(reader.GetValue(0) & "," & reader.GetValue(1))

            row = reader("CruiseID") & "," & reader2("RouteName")

            RCTable.Rows.Add(row)

            cmd.ExecuteNonQuery()


            reader2.Close()
        End While
        reader.Close()
        cn.Close()
    End Sub
End Class

如果我很好地理解你的 table 结构,那么你可以 运行 一个查询从两个 table 中提取数据并将它们加入一个新的 table查询返回

Dim sql = "SELECT c.CruiseID c.CruiseID & ',' & r.RouteName as Route " & _
          "FROM Cruise c INNER JOIN Route r ON c.RouteID = c.RouteID " & _
          " WHERE c.CruiseID = @cruiseID"
Dim cmd As OleDbCommand = New OleDbCommand(sql, cn)
cmd.Parameters.Add("@cruiseID", OleDbType.Int).Value = Convert.ToInt32(Route_Txt.Text)
Dim RCTable = new DataTable()
Dim reader = cmd.ExecuteReader()
reader.Load(RCTable)

此时 RCTable 填充了来自两个 table 的数据,并使用转换为整数的 Route_Txt 文本框进行选择。如果 CruiseID 字段不是数字字段,那么您应该创建类型为 OleDbType.VarWChar 的参数并删除对整数

的转换

尝试简化您的查询。

Dim CruiseRouteQuery As String = "SELECT C.CruiseID, C.RoutID, R.Routename FROM Cruise C LEFT JOIN Route R ON C.RouteID = R.RoutID WHERE CruiseID =?"

另外,请让我们知道您遇到了什么错误。