C# 如何将表名和选定字段作为参数传递
我得到以下错误: 错误:-201 消息:[Informix.NET provider][Informix]发生语法错误 当我尝试执行此代码时:C# 如何将表名和选定字段作为参数传递,c#,asp.net,informix,parameterized-query,C#,Asp.net,Informix,Parameterized Query,我得到以下错误: 错误:-201 消息:[Informix.NET provider][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("@tablena
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;
你不能
使用String.Replace代替
st.Append(" SELECT @pdf_column FROM @tablename");
st.Replace("@tablename", table_name);
st.Replace("@pdf_column", pdf_column);
如果table_name和pdf_列以任何方式来自用户输入,则应使用QuoteName函数(即
QuoteName(table_name)
)来防止sql注入。不知道Informix,但它是SqlServer的一种。为什么不使用类似于“选择”+pdf\u column+”的“+table\u name”
?它适用于任何数据库。sql语句在发送到数据库之前包含列和表您只能对值使用占位符,而不能对查询的结构元素(如表名或列名)使用占位符。