如何将表名和选定字段作为参数传递
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语句在发送到数据库之前包含列和表 您只能将占位符用于值,而不能用于查询的结构元素,例如表名或列名。以上是关于如何将表名和选定字段作为参数传递的主要内容,如果未能解决你的问题,请参考以下文章