Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-FROM子句(JOIN)中的语法错误_Sql_Vb.net_Syntax_Oledb_Ms Access 2013 - Fatal编程技术网

SQL-FROM子句(JOIN)中的语法错误

SQL-FROM子句(JOIN)中的语法错误,sql,vb.net,syntax,oledb,ms-access-2013,Sql,Vb.net,Syntax,Oledb,Ms Access 2013,刚刚开始试验JOIN子句,以便在gridview中跨多个表显示数据。然而,我一辈子都不能弄清楚我的错误是什么。我尝试过切换表、列等的顺序,但没有成功。我认为,这是我能得到的最接近工作状态的声明。它基本上是一份假定有效的声明的直接副本,但仍然不起作用 感谢您的帮助。 (我使用VB.Net编写代码,访问'13'作为数据库(这可能是问题的一部分;我读过它对语法非常挑剔),并使用VS2013进行开发。) @蒂姆:按要求,这是完整的潜艇 Private Sub btnSearch_Click(sender

刚刚开始试验JOIN子句,以便在gridview中跨多个表显示数据。然而,我一辈子都不能弄清楚我的错误是什么。我尝试过切换表、列等的顺序,但没有成功。我认为,这是我能得到的最接近工作状态的声明。它基本上是一份假定有效的声明的直接副本,但仍然不起作用

感谢您的帮助。 (我使用VB.Net编写代码,访问'13'作为数据库(这可能是问题的一部分;我读过它对语法非常挑剔),并使用VS2013进行开发。)

@蒂姆:按要求,这是完整的潜艇

Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
    If cbSearchType.Text = "Guest Surname" Then

        Dim searchSQL As String = "SELECT bookings.bookingStartDate, bookings.bookingEndDate, guests.guestFirstName, guests.guestSurname, locations.locationName FROM bookings JOIN guests ON guests.guestID = bookings.guestID JOIN locations ON locations.locationID = bookings.locationID WHERE guests.guestSurname = @guestSurname"

        Dim searchCommand = New OleDbCommand(searchSQL, globalVariables.objConnection)
        Dim searchAdapter As New OleDbDataAdapter(searchSQL, globalVariables.objConnection)
        Dim searchDataTable As New DataTable

        searchCommand.Parameters.AddWithValue("guestSurname", tbSearchTextBox.Text)
        searchAdapter.SelectCommand = searchCommand
        searchAdapter.Fill(searchDataTable)

        globalVariables.objConnection.Open()
        searchAdapter.Fill(searchDataTable)
        gvSearchResults.DataSource = searchDataTable
        globalVariables.objConnection.Close()

    ElseIf cbSearchType.Text = "Location" Then

    ElseIf cbSearchType.Text = "Booking Start Date" Then

    ElseIf cbSearchType.Text = "Booking End Date" Then

    End If
End Sub

端类

在Access中,您需要指定
内部联接
。当存在多个联接时,还需要括号。我将这样写:

SELECT b.bookingStartDate, b.bookingEndDate, g.guestFirstName, g.guestSurname, l.locationName
FROM (bookings as b INNER JOIN
      guests as g
      ON g.guestID = b.guestID) INNER JOIN
     locations as l
     ON l.locationID = b.locationID
WHERE g.guestSurname = @guestSurname;

FROM子句中的“语法错误”可能是
“…其中guests.guestSurnmae=”+@guestSurname+“”-即,如果
guestSurname`是char或varchar字段,则需要使用单引号将其引用
。要检查的另一件事是关键字之间是否有空格(
FROM
WHERE
,等等)。您可以发布您正在使用的实际VB.NET代码吗?不再使用Access,但您可能希望在
参数中使用
“@guestSurname”
而不是
“guestSurname”
。AddWithValue
。也不是100%确定Access支持命名参数。尝试单步通过调试器,查看添加参数后的
OleDbCommand
文本是什么-这应该会显示它是否正确。我刚刚读到Access不接受非限定联接,因此我改为内部联接并收到…@Tvelallot-将错误添加到原始问题中。注释不太支持代码和格式。这非常有效,只是我的gridview由于某种原因显示了重复的结果。呃,有两次searchAdapter.Fill(searchDataTable)。