我正在尝试从使用两个不同表的变量中分配表名的表中进行选择。但是它会出现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() + "'";
是否可以为表名参数化/使用变量?
答案 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 = "
等。
表名不应该在引号中。鉴于您不使用参数,这甚至不是参数系统的错误;引号就在你自己的查询构造代码中。只需删除它们。