如何将表名和选定字段作为参数传递

Posted

技术标签:

【中文标题】如何将表名和选定字段作为参数传递【英文标题】: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那样使用? 【参考方案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语句在发送到数据库之前包含列和表 您只能将占位符用于值,而不能用于查询的结构元素,例如表名或列名。

以上是关于如何将表名和选定字段作为参数传递的主要内容,如果未能解决你的问题,请参考以下文章

在sql语句中,怎样将参数做为表名传递到查询语句中

[mysql-connector-python在将表作为参数传递时,在表名周围添加单引号。表名来自Flask会话变量

pl/sql 过程不允许将表名/视图名作为参数传递

如何在存储过程中动态传递表名 - ORACLE [重复]

将表名和列名定义为 plpgsql 函数中的参数?

Rails - 如何将 id 数组作为隐藏字段的参数传递?