2016-04-22 79 views
-1

我想从表中选择一个表,从一个变量中指定表名,如同使用两个不同的表一样。但是它出现了一个DB2Exception错误。C#SQL选择查询表参数

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() + "'"; 

是否有可能parametrise /使用变量表名?

+3

检测到SQL注入的高风险! – dotctor

+0

你调试了你的代码并检查了'tablename'的值吗? 向我们展示分配给strUpdate的sql查询字符串。你的表名是表? –

+0

是的,我知道我的SQL注入漏洞,但需要先解决这个问题。是的,表格名称在调试时是正确的表格名称 – user6097989

回答

1

SQL注入风险不谈,显示了两个查询是根本就不是同

您显示的查询是

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

然而,代码你表现产生以下查询:

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

表名应该简单地不在引号中。考虑到你不使用参数,这甚至不是参数系统的错;引号就在你自己的查询构造代码中。只要删除它们。

+1

嗨,我删除了从任何一方的报价,它工作正常。我也考虑过所有的SQL注入评论,所以也非常感谢。 – user6097989

1

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

select sysdate 
from dual; 

还可以使用SqlCommand类在你selectstatement添加参数如下。

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

这是否仍然会在表名附近引用引号,因为它已添加为字符串参数? – Nyerguds

+0

http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/ –