2016-04-22 71 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/ –