在 C# 中参数化 ALTER/DROP TABLE OdbcCommand

Parameterize ALTER/DROP TABLE OdbcCommand in C#

我正在尝试将代码中的 SQL 语句从连接字符串转换为参数化查询,但我无法像这样将其用于 DROP TABLEALTER TABLE

using (OdbcCommand delCmd = new OdbcCommand($"DROP TABLE IF EXISTS ?", dbConnection))
{
    delCmd.Parameters.Add(new OdbcParameter("?", OdbcType.NVarChar) { Value = tableName });
    delCmd.ExecuteNonQuery();
}


using (OdbcCommand delCmd = new OdbcCommand($"ALTER TABLE ? DROP COLUMN ?", dbConnection))
{
    delCmd.Parameters.Add(new OdbcParameter("?", OdbcType.NVarChar) { Value = tableName });
    delCmd.Parameters.Add(new OdbcParameter("?", OdbcType.NVarChar) { Value = columnName });
    delCmd.ExecuteNonQuery();
}

我曾尝试将 []'' 添加到查询字符串或参数中,但我从未成功。

我得到运行时间错误:

ERROR [42000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Incorrect syntax near '@P1'. `

任何关于如何让这些查询起作用的建议都会帮上大忙!

您不能提供table,字段名称作为参数;但是你可以使用格式化字符串插值:

 //TODO: validate tableName and columnName here 
 //since formatting / string interpolation prone to SQL injection
 // e.g. 
 // if (!Regex.IsMatch(tableName, "^[A-Za-z][A-Za-z0-9_]*$")) {/* wrong table */}

 using (OdbcCommand delCmd = new OdbcCommand(
   $"ALTER TABLE {tableName} DROP COLUMN {columnName}", 
     dbConnection)) 
 { 
     delCmd.ExecuteNonQuery();
 }