ユーザーから2つの値を受け取り、それらをクエリに入力して、それらのエントリに関連付けられているデータを検索するレポートを作成しています。
たとえば、従業員、業績指標、およびそれらに関連付けられた値のリストがある場合、次に、ユーザーは従業員名/パフォーマンス測定を選択し、その測定に対するその従業員のスコアリング情報を取得します。
2つのパラメーターがあり、それぞれがSQLクエリから入力され、従業員の名前とメジャーの個別のリストを取得します。下の表は、「 'WHERE name = @Name AND measure = @Measure」に基づいて情報を取得するだけですが、「レポートをローカルで実行するプレビュー 'エラーが表示される:「レポートの実行に必要な1つ以上のパラメーターが指定されていません」
テキストボックスに直接値を入力でき、値が正しく入力されるため、パラメーターが適切に機能していることがわかります。また、1つのパラメーターのみを受け入れるようにクエリを変更した場合(つまり、WHEREメジャー= @Measure)、クエリは機能します。
パラメータが機能し、適切に入力されていることがわかっているため、このエラーが発生する理由について混乱しています。
パラメータの値の1つに空の文字列が含まれていた場合、ローカルレポート(.rdlcファイル内)を使用して.NET 4.0でこの動作を経験しました。パラメータの設定は正しかったが:
report.SetParameters(
new List<ReportParameter> {
new ReportParameter("Title", Messages.Title),
new ReportParameter("SubTitle", Messages.Subtitle))
}
);
両方のパラメーターに実際にいくつかの文字が含まれている場合にのみ機能します。それ以外の場合は、前述の例外がスローされました。
これは私に何時間もの痛みを引き起こしました。共有データセットを使用することに関係していることがわかりました。代わりにレポートにデータセットを埋め込むと、正常に機能します。
このエラーは、次のいずれかが原因で発生します
[〜#〜] a [〜#〜])実際のレポートでは、パラメータのスペルが間違っています。クエリは@Nameを期待していますが、レポートは@Names(またはその他のスペル)を渡していることを意味します。
または
[〜#〜] b [〜#〜])@NameのパラメータにNULLのデフォルト値を使用してレポートを実行しようとしている可能性がありますが、ストアドプロシージャには実際の値が必要ですか?
これは、Visual Studioでレポートを作成し、@ Nameパラメーターにデフォルト値(null)を指定した場合に発生する可能性があります。
デフォルト値を削除するか、単に ''であっても、@ Nameパラメーターに実際の値が含まれていることを確認してください。
レポートサーバーでDataSetを確認して、同様の問題が発生しました。VisualStudioで共有データセットを編集していましたが、機能しませんでした。1時間の不満の後、レポートサーバーでデータセットを確認しましたが、行った変更で更新されていません。 Visual Studioでは、それを削除してVisual Studioからデータセットを再展開します。できます 。
私は同じ問題を抱えていましたが、今ではSQL Server 2008 R2でソートされています。
私はこれが古い質問であることを知っていますが、他の人を助けるためだけです:
大文字と小文字を含めたスペルが同じで、@を使用していることを確認するだけで、とてもシンプルでした。
次のコードを含むcurrentSpaceByDriveという共有データセットがあります。
SELECT
[DRIVE]
,[Volume_Size_GB]
,[VolumeSpaceAvailable_GB]
,[VolumePercentAvailable]
FROM monitoring.dbo.currentSpaceByDrive(@ServerID)
共有データセットcurrentSpaceByDriveをレポートに追加し、同じ名前を付けました。レポートを右クリックすると、データセットのプロパティの1つであるパラメーターが@ServerIDになります。
@ServerID値は、the_servers(ユーザーがserverIDを選択する)と呼ばれる別のデータセットから取得されます
The_serversから値を取得し、currentSpaceByDriveの@ServerIDパラメータにフィードするために使用される@ServerIDとも呼ばれるレポートパラメータがあります。
@ServerIDが多すぎると思いますが、これに基づいて独自のテストを行うと、それを実行できます。添付の画像をご覧ください。
これがマルセロに役立つことを願っています
実際に私はしなければなりませんでした:
それから私のための作品です。
複数のレポートに共有データセットを使用していますが、この問題の根本的な原因は、レポート自体からの入力パラメーターを共有データセットのパラメーターにマッピングしていなかったことです。
修正するには、[レポートデータ]パネルに移動し、データセット(実際には共有データセットにリンクしています)を開き、[パラメーター]タブをクリックして、レポートパラメーターを共有データセットのパラメーターにマッピングしました。
「すべて選択」を選択するとパラメータースーパーバイザーが空白になり、「サブレポートに1つ以上のパラメーターが指定されていません」というエラーが発生するのと同じ問題があると思いますが、いくつかのスーパーバイザー名を選択すると、サブレポートが表示されます。 [すべて選択]をオンにするとマネージャーパラメーター値がすべての値を表示しますが、スーパーバイザーパラメーターでは機能しないため、困惑しています。スーパーバイザパラメータはマネージャパラメータに依存することに注意してください。
私にとって、パラメータの値を設定すると問題が発生します。理由はわかりませんが、パラメーター値がstring.Emptyまたはnullを受け入れることができませんでした。したがって、値がエラーを解決するときに「」を指定しただけです。
ReportParameter[] parameters = new ReportParameter[4];
parameters[0] = new ReportParameter("Name", EName);
parameters[1] = new ReportParameter("ShiftName", CurrentShift);
parameters[2] = new ReportParameter("Date", LoginDate);
if(ValidateReportData())//some condition
{
parameters[3] = new ReportParameter("Date1", LoginDate);
}
else
{
//parameters[3] = new ReportParameter("Date1", string.Empty);//this makes exception while calling Render function.
parameters[3] = new ReportParameter("Date1", " ");//Solves the issue.
}