【问题标题】:How to pass the table name and the selected fields as parameters如何将表名和选定字段作为参数传递
【发布时间】:2013-02-07 09:57:09
【问题描述】:

我收到以下错误:

错误:-201 消息:[Informix .NET 提供程序][Informix]出现语法错误。

当我尝试执行这段代码时:

string table_name = resultDt.Rows[0][1].ToString();
string pdf_column = resultDt.Rows[0][0].ToString();
st.Append(" SELECT  ? FROM ?");
paramList.Clear();
paramList.Add("@tablename", table_name);
paramList.Add("@pdf_column", pdf_column);
resultDt =dalHelper.Return_DataTable(st.ToString(), CommandType.Text, paramList);
return resultDt;

【问题讨论】:

  • 为什么不像"SELECT " + pdf_column + " FROM " + table_name那样使用?

标签: c# asp.net informix parameterized-query


【解决方案1】:

你不能。

使用 String.Replace 代替。

st.Append(" SELECT @pdf_column FROM @tablename");
st.Replace("@tablename", table_name);
st.Replace("@pdf_column", pdf_column);

如果 table_name 和 pdf_column 无论如何来自用户输入,您应该使用 QuoteName 函数(即QuoteName(table_name))来防止 sql 注入。不了解 Informix,但 here 是 SqlServer 的一种。

【讨论】:

  • 适用于任何数据库。 sql语句在发送到数据库之前包含列和表
  • 您只能将占位符用于值,而不能用于查询的结构元素,例如表名或列名。
猜你喜欢
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
相关资源
最近更新 更多