我在对 C# 中的 odbc 驱动程序的 OdbcConnection 执行参数化 sql 查询时遇到问题。列名和表名可以从 web gui 配置,所以我希望它免受注入
using (OdbcCommand command = connection.CreateCommand())
{
command.CommandText = "SELECT ? FROM ?";
command.CommandTimeout = SynchTimeout;
command.CommandType = CommandType.Text;
command.Parameters.Add(new OdbcParameter(string.Empty, "User"));
command.Parameters.Add(new OdbcParameter(string.Empty, "TableName"));
OdbcDataReader reader = command.ExecuteReader();
while (reader.Read())
{
// TODO: Do something clever..
}
}
对列名“用户”使用 odcparameters 似乎没问题。但是如果我将表名添加为带有占位符的参数“?” 我收到以下错误:错误 [HY000] [Microsoft][ODBC Excel 驱动程序] 参数“Pa_RaM002”指定了需要表名的位置。
如果表名不能是 OdbcParameter,有谁知道如何在这种情况下安全地传递表名?