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

标签 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 服务器版本对应的手册,了解在“客户端”附近使用的正确语法,位于第 1 行”。

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

最佳答案

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

在这种情况下,您别无选择,只能恢复到字符串连接。
请确保您不允许您的用户键入表名,而只能从预定义的众所周知的名称列表中选择它

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

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

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

关于mysql - 使用参数时出现 SQL 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22181579/

相关文章:

mysql - mysql社区版如何增加连接数?

php - SQL 查询出了什么问题?

php - 特定数据未插入列中

vb.net - 我的摘要信息不会使用VB '''语法显示在SandcaSTLe中

php - Vb.Net 中是否有等效的 PHP crypt($string,$salt) ?无法使用 $salt 找到/创建任何内容

MySQL:我在网站中的哪里存储每个用户的个人资料信息?

MySQL 8.0 Reference 说 MOD() + 1 返回与 1 + MOD() 不同的结果

c# - 用作参数时无法推断 Action 委托(delegate)的返回类型

vb.net - 对字母数字数据 View 列进行排序

vb.net - Vb Net检查arrayList是否包含子字符串