我正在尝试将代码中的 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”附近的语法不正确。`关于如何让这些查询工作的任何建议都会有很大的帮助!
1 回答
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
您不能提供表、字段名称作为参数;但您可以使用格式化或字符串插值:
//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();
}
- 1 回答
- 0 关注
- 137 浏览
添加回答
举报
0/150
提交
取消