使用参数时出现SQL语法错误

时间:2014-03-04 19:51:11

标签: mysql vb.net

这是一个类的代码:

 Private Sub LoadTable()
    dt.Dispose()
    command.CommandText = "SELECT * FROM @TableName"
    command.Parameters.Add(New MySqlParameter("TableName", TableName))
    dt = SQL.ExecuteCommand(command)
    command.Dispose()
End Sub

这是来自另一个类的代码,上面的代码调用:

Public Function ExecuteCommand(ByVal Command As MySqlCommand)
    Dim dt As New DataTable
    Dim da As New MySqlDataAdapter
    Dim con As New MySqlConnection

    con.ConnectionString = GetConnectionString
    Command.Connection = con

    con.Open()
    da.SelectCommand = Command
    da.Fill(dt)
    con.Close()

    con.Dispose()
    da.Dispose()
    Return dt
End Function

变量TableName等于字符串 Client

语法是有效的,因为我已经在MySQL Workbench中尝试了它,如果我尝试非参数化它就可以工作。

我得到的错误是语法无效:“您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以便在''Client''附近使用正确的语法第1行“。

任何线索如何解决这个问题,同时仍然使用参数化的MySqlCommand?

1 个答案:

答案 0 :(得分:3)

参数不能用于表示表名或字段名。它们只能用于表示WHERE条件中的值或在INSERT或UPDATE查询中插入/更新值。

在这种情况下,除了恢复字符串连接之外别无选择 请确保您不允许用户键入表名,但只能从预定义的名称列表中选择

Private Sub LoadTable(table as String)
    dt.Dispose()
    dt = SQL.ExecuteCommand("SELECT * FROM " & table)
    command.Dispose()
End Sub

我还更改了你的ExecuteCommand以接收字符串而不是命令。在我看来,这会将所有一次性对象集中在ExecuteCommand方法中,通过使用语句可以轻松初始化和处理它们

Public Function ExecuteCommand(cmdText as String)
    Dim dt As New DataTable
    Using con = New MySqlConnection(GetConnectionString())
    Using command = new MySqlCommand(cmdText, con)
       con.Open()
       Using da = new MySqlDataAdapter(command)
          da.Fill(dt)
       End Using
    End Using
    End Using
    Return dt
End Function