C#SQL选择查询表参数

时间:2016-04-22 08:55:53

标签: c# sql db2

我正在尝试从使用两个不同表的变量中分配表名的表中进行选择。但是它会出现DB2Exception错误。

db2Error = {"ERROR [42601] [IBM][AS] SQL0104N  An unexpected token \"'TABLENAME'\" was found following \"\". 

此查询是导致错误的查询 - 表名是一个包含表名的字符串。

string strUpdate = "SELECT COMMENT FROM '" + tableName + "' WHERE NUMBER = '" + strNumber + "' AND CODE = '" + c.Trim() + "' ";

这个查询工作正常 -

 //  string strUpdate = "SELECT COMMENT FROM TABLE WHERE NUMBER = '" + strNumber + "' AND CODE = '" + c.Trim() + "'";

是否可以为表名参数化/使用变量?

2 个答案:

答案 0 :(得分:1)

为什么在你的声明中使用qoutes?它应该只是

select sysdate 
from dual;

还可以使用SqlCommand类在select语句中添加参数,如下所示。

string strUpdate = "SELECT COMMENT FROM @tablename WHERE NUMBER = @strnumber AND CODE = @c";
SqlCommand insertCommand = new SqlCommand(strUpdate , connection);
insertCommand.Parameters.AddWithValue("@tableName ", tableName );
insertCommand.Parameters.AddWithValue("@strNumber ", strNumber );
insertCommand.Parameters.AddWithValue("@c", c.trim());

答案 1 :(得分:1)

除了SQL注入风险之外,显示的两个查询根本不相同

您展示的查询是

string strUpdate = "SELECT COMMENT FROM TABLE WHERE NUMBER = "等。

但是,您显示的代码会产生以下查询:

string strUpdate = "SELECT COMMENT FROM 'TABLE' WHERE NUMBER = "等。

表名不应该在引号中。鉴于您不使用参数,这甚至不是参数系统的错误;引号就在你自己的查询构造代码中。只需删除它们。