C# 在C中参数化ALTER/DROP TABLE ODBCC命令#
我正在尝试将代码中的SQL语句从串联字符串转换为参数化查询,但无法将其用于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 });
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();
}