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

我正在尝试将代码中的 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();

}

我尝试将[]or添加''到查询字符串或参数中,但从未使其正常工作。


我收到运行时错误:


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


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


慕勒3428872
浏览 98回答 1
1回答

一只名叫tom的猫

您不能提供表、字段名称作为参数;但您可以使用格式化或字符串插值: //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(); }
打开App,查看更多内容
随时随地看视频慕课网APP