C# 在C中参数化ALTER/DROP TABLE ODBCC命令#

C# 在C中参数化ALTER/DROP TABLE ODBCC命令#,c#,sql,odbc,parameterized-query,C#,Sql,Odbc,Parameterized Query,我正在尝试将代码中的SQL语句从串联字符串转换为参数化查询,但无法将其用于DROP TABLE和ALTER TABLE,如下所示: using (OdbcCommand delCmd = new OdbcCommand($"DROP TABLE IF EXISTS ?", dbConnection)) { delCmd.Parameters.Add(new OdbcParameter("?", OdbcType.NVarChar) { Value = tableName });

我正在尝试将代码中的SQL语句从串联字符串转换为参数化查询,但无法将其用于
DROP TABLE
ALTER 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();
}
我曾尝试将
[]
'
添加到查询字符串或参数中,但从未使其起作用

我得到运行时错误:

错误[42000][Microsoft][SQL Server的ODBC驱动程序13][SQL Server]不正确 “@P1”附近的语法`

任何关于如何让这些查询正常工作的建议都会大有帮助

不能提供表、字段名称作为参数;但您可以使用格式或字符串插值:


您不能对表和列名使用参数。谢谢:)这几乎是我得出的结论,只是没有找到任何来源告诉我我不能这样做。
 //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();
 }