查询表达式中的语法错误(缺少运算符)'Runner Name'

Syntax error (missing operator) in query expression 'Runner Name'

每次我 运行 我的程序都会不断弹出 - 查询表达式 'Runner Name' 中的语法错误(缺少运算符)。 'Runner name' 是我数据库中的一个字段名。带有 da.Fill(dt) 的行被突出显示。有人可以帮忙吗?我很绝望

Public Class AddNewRace
Dim cnn As New OleDb.OleDbConnection
Private Sub RefreshData()
    If Not cnn.State = ConnectionState.Open Then
        ' open connection '
        cnn.Open()
    End If 
    Dim da As New OleDb.OleDbDataAdapter("SELECT ID as [ID]," & _
                                        "Runner Name as [Name], Running Average Speed, Cyclying Average Speed, Swimming style, Calories Burned FROM Training log ORDER BY ID", cnn)
    Dim dt As New DataTable

    'fill datatable'
    da.Fill(dt)

    Me.dgvData.DataSource = dt
    ' close connection'

    cnn.Close()
End Sub

Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click

    Dim cmd As New OleDb.OleDbCommand
    ' add data to table '
    If Not cnn.State = ConnectionState.Open Then
        ' open connection '
        cnn.Open()
    End If

    cmd.Connection = cnn
    If Me.txtID.Tag & "" = "" Then


        cmd.CommandText = "INSERT INTO Members (ID, Runner Name, Running Average Spee d, Cyclying Average Speed, Swimming style , Calories Burned) VALUES ('" & Me.txtID.Text & "' , '" & Me.txtRunnerName.Text & "' , '" & Me.txtRunSpeed.Text & "' , '" & Me.txtCycleSpeed.Text & "', '" & Me.txtSwimStyle.Text & "', '" & Me.txtCaloriesBurned.Text & "')"
        cmd.ExecuteNonQuery()

    Else
        cmd.CommandText = "UPDATE Training log SET ID=" & Me.txtID.Text & ", Runner Name='" & Me.txtRunnerName.Text & "', Running Average Speed='" & txtRunSpeed.Text & "', Cyclyin Average Speed='" & txtCycleSpeed.Text & "', Swimming style='" & txtSwimStyle.Text & "', Calories Burned='" & txtCaloriesBurned.Text & "' WHERE ID='" & txtRunnerName.Tag & "' "
        cmd.ExecuteNonQuery()
    End If
    ' Refresh Data in list'
    RefreshData()

    Me.btnEdit.PerformClick()

    ' close connection'

    cnn.Close()
End Sub

如果您的专栏名称中有 space,您需要将其括在方括号中。

Runner Name 应该是 [Runner Name]

当然,您的许多列都有 space,您需要这样调整它们。对于您的插入、更新和删除语句也是如此。

您可以考虑避免在您的列名中使用 space,并使用驼峰式大小写设计您的数据库列,例如 RunnerName

您可能会发现语法 select runner name 被视为 select runner as name 的 shorthand 形式,这会使以下 as 相当有问题。即使它们没有被这样解释,标准 SQL 也会将 RunnerName 视为两个不同的标记,除非您另有说明。

如果您的列名中有空格,您已经知道如何修复它(用方括号分隔它),您可能没有意识到:

select [Runner Name] as [Name]

您可能还必须对其他包含空格的列执行此操作。