为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕勒3428872 2023-07-22 18:24:33
我正在尝试将代码中的 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条经验 获得超2个赞

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


 //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();

 }


查看完整回答
反对 回复 2023-07-22
  • 1 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信