結論
不要在 ADO.NET CommandText 任一行放以兩個減號開頭的註解 (--),而且後頭有參數宣告 (@p1)。
可以用 /* */ 取代,但建議不要放任何註解在內最安全。
緣由
我用自訂的工具利用 ADO.NET 執行命令,連接的是 Informix 12。
語法類似
@"
select
*
from
table1
where
string_column1 = @p1
and
date_column1 between @p2 and @p3
"
也加入參數 @p1、@p2、@p3,執行正常。
後將語法改成以下進行測試。
@"
select
*
from
table1
where
-- string_column1 = @p1
-- and
date_column1 between @p2 and @p3
"
參數仍有 @p1 沒移除,結果執行錯誤。
IBM.Data.DB2.DB2Exception: ERROR [IX000] [IBM][IDS/UNIX64] Invalid year in date
這啥?
語法沒變,移掉參數 @p1 ,結果執行錯誤。
System.IndexOutOfRangeException: 此 DB2ParameterCollection 未包含具有 ParameterName '@p1' 的 DB2Parameter。
看來 ADO.NET 沒把註解當註解,還是解析到 @p1。
所以只要那行有參數宣告,註解是沒有用的。
後經測試,以下語法是可行的。
@"
select
*
from
table1
where
/*
string_column1 = @p1
and
*/
date_column1 between @p2 and @p3
"
但我之前踩過另一個坑,所以也不太想用啊。
留言
張貼留言
歡迎留言給我們