1

ユーザー入力パラメーターを受け取り、ODBC データソースに対して実行するレポートを Visual Studio で作成しています。クエリを手動で記述し、データベースに送信する前にレポート サービスで where 句の一部をパラメータ値に置き換えたいと考えています。起こっているように見えるのは、@parmName置き換えられると想定しているが、実際には SQL ステートメントの一部として送信されているということです。どこかに構成設定がありませんか、それとも単に不可能ですか?

ツールでフィルター オプションを使用していません。これは、データベースから完全なデータセットを取得し、SQL Server でフィルター処理を行うように見えるためです。

4

4 に答える 4

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 式では改行を使用しないでください。実行すると、エラーが発生します。

さらにサポートが必要な場合は、戻ってください。

于 2008-08-12T23:43:15.183 に答える
1

ODBC は古い "?" を使用しませんか? パラメータの構文?これを試して:

select col1, col2 from table1 where col3 = ?

その場合、パラメーターの順序が重要になりますが、単にパラメーター値を追加するよりも、SQL インジェクションに対して脆弱ではありません。

于 2008-08-21T10:44:08.020 に答える
1

ODBC 経由でアクセス データベースにクエリを実行しようとすると、同じ問題が発生しました。

元のクエリ:SELECT A.1 FROM A WHERE A.1 = @parameterエラーが発生しました。に変更: SELECT A.1 FROM A WHERE A.1 = ?.

次に、クエリ パラメータをレポート パラメータにマップする必要があります。

于 2012-05-11T12:49:18.140 に答える
0

この質問については少し混乱しています。単純なパラメーターの使用法を探している場合、表記は :*paramName*ですが、句を構造的に変更したい場合WHERE(sql+ using ? のように)、実際にはカスタムコードを使用する必要がありますレポートを使用して、クエリに必要な sql を返す関数を定義します。

残念ながら、カスタム コードを使用する場合、生成されたクエリでパラメーターを直接参照することはできませんが、結果の文字列に値を連結する必要があるため、SQLインジェクションの可能性が生じます。

于 2008-08-26T16:46:47.437 に答える