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