2014-06-30 40 views
1

我使用的驅動程序Npgsql的傳遞SQL查詢的參數Npgsql的:語句使用參數

SqlCommand = new NpgsqlCommand(); 
.... 
SqlCommand.CommandText = "SELECT id,name FROM table1 WHERE field1=:param2 ORDER BY name;"; 
SqlCommand.Parameters.AddWithValue("param2", 1); 

該查詢正確執行並簽發了必要的數據,但只要我在添加參數到SQL部分「選擇」

SqlCommand.CommandText = "SELECT id,name :param1 FROM table1 WHERE field1=:param2 ORDER BY name;"; 
SqlCommand.Parameters.AddWithValue("param1", ",field1"); 
SqlCommand.Parameters.AddWithValue("param2", 1); 

它給了我一些廢話。理論上這個對服務器的請求被視爲

SELECT id,name,field1 FROM table1 WHERE field1=1 ORDER BY name; 

但它沒有發生。 這引發了一個問題:有沒有一種方法來動態插入使用類似參數的字段列表?

+0

這不是如何參數化查詢在所有的工作中,*支持它們(的方法僞造代替)任何*數據庫。它們表示*值*,而不是字符串替換。如果你在'SELECT'中放入一個參數,你應該返回參數的值 –

回答

1

不幸的是,Npgsql不支持你正在嘗試做的事情。 NpgsqlParameter值應該只用作where子句中的參數值。 爲了動態添加字段名稱,您必須使用字符串連接來手動創建查詢。

我希望它有幫助。

+0

推薦添加動態值而不冒SQL注入風險的方式是什麼?例如,我將如何在沒有WHERE子句的函數調用中添加動態值? –

+1

@SteveGlick使用LINQ和ORM或者microORM來生成語句,或者在構建查詢時非常非常小心,例如,在驗證所提供的值實際上是表的字段之後生成* SELECT *語句。 –

-1

重寫你的CommandText和補充一點:

foreach (NpgsqlParameter item in _Command.Parameters) 
{ 
    comm.Parameters.AddWithValue(item.ParameterName, item.Value); 
} 

,解決你的問題..