1

我在Visual Studio中編寫了一個報表,該報表接受用戶輸入參數並針對ODBC數據源運行。我想手動編寫查詢,並在將報表服務發送到數據庫之前使用參數值替換部分where子句。似乎發生的事情是,我假設將被替換的@parmName實際上是作爲SQL語句的一部分發送的。我是否在某處丟失配置設置,或者這僅僅是不可能的?針對ODBC數據源在MS Reporting Services(SQL Server 2008)中使用參數

我沒有在工具中使用過濾器選項,因爲這似乎是從數據庫中取回完整的數據集並在SQL Server上執行過濾。

回答

5

聽起來您需要將SQL語句當作表達式來處理。例如:

="Select col1, col2 from table 1 Where col3 = " & Parameters!Param1.Value 

如果WHERE子句是你需要做以下的字符串:

="Select col1, col2 from table 1 Where col3 = '" & Parameters!Param1.Value & "'" 

重要提示:不要在SQL表達式中使用換行符。如果你這樣做,你會得到一個錯誤。

霍拉回來,如果你需要任何更多的援助。

1

ODBC不使用舊的「?」語法的參數?試試這個:

select col1, col2 from table1 where col3 = ? 

順序的參數變得不重要了,但它不是簡單的附加參數值更不容易受到SQL注入。

0

我有點困惑這個問題,如果你正在尋找簡單的參數使用,則記法是:*paramName*,但是如果你想在結構上改變WHERE條款(如您在SQL +使用可能?),那麼你應該真正在報告中使用自定義代碼來定義一個函數,該函數返回查詢所需的sql。

不幸的是,使用自定義代碼時,參數不能在生成的查詢中直接引用,但必須將其中的值鏈接到結果字符串中,因此引入了SQL注入的可能性。

1

遇到同樣的問題,試圖通過ODBC查詢訪問數據庫。

我的原始查詢:SELECT A.1 FROM A WHERE A.1 = @parameter導致錯誤。改爲:SELECT A.1 FROM A WHERE A.1 = ?

然後您必須將查詢參數與您的報告參數進行映射。

相關問題