locked
『ReportViewer を使用してパラメーターを含む詳細 (RDLC) レポートを作成する (SSRS チュートリアル)』通りに作成してみたが上手くいかない RRS feed

  • 質問

  • 環境 = VS2013Pro
    OS = Win7
    言語 = ASP.NET(VB)

    その他情報
    DataSet1 = 親レポート
    DataSet2 = 子レポート
    参考サイトはC#で記載されておりますが、VBに修正
    また、VS2013ProだとWebサイトは複数表示されますのでASP.NETレポートWebサイトプロジェクトより作成

    いつもお世話になっております。

    https://msdn.microsoft.com/ja-jp/library/dn154771(v=sql.120).aspx
    上記を参考に実施してみましたが、
    Webサイト表示後、フィルター操作を実施すると
    「データ ソース インスタンスがデータ ソース 'DataSet2' に指定されていません。 」と表示されます。

    下記がソースですが、ソースが悪いのかそれともデータセットの作り方が悪いのか判らず
    投稿させて頂きます。

    以上、何卒宜しくお願い申し上げます。

    Imports System.Data.SqlClient
    Imports Microsoft.Reporting.WebForms

    Partial Class _Default
        Inherits System.Web.UI.Page

        Private Function GetPurchaseOrderDetail(target As String) As DataSet2

            Try

                Dim conString As String = ConfigurationManager.ConnectionStrings("mydb").ConnectionString
                Dim cmd As New SqlCommand("select * from RESULT where TARGET = " + "'" + target + "'")
                Using con As New SqlConnection(conString)
                    Using sda As New SqlDataAdapter()
                        cmd.Connection = con

                        sda.SelectCommand = cmd
                        Using dsCustomers As New DataSet2()
                            sda.Fill(dsCustomers, "DataTable2")
                            Return dsCustomers
                        End Using
                    End Using
                End Using

            Catch ex As Exception

                Throw

            End Try

        End Function

        Protected Sub ReportViewer1_Drillthrough(sender As Object, e As DrillthroughEventArgs) Handles ReportViewer1.Drillthrough

            Try
                ReportViewer1.ProcessingMode = ProcessingMode.Local
                Dim report As Report = e.Report
                Dim target As String = ""
                Dim list = report.GetParameters

                For Each tmp In list
                    target = tmp.Values(0)
                Next

                Dim dsCustomers As DataSet2 = GetPurchaseOrderDetail(target)
                Dim datasource As New ReportDataSource("Dataset1", dsCustomers.Tables(0))
                ReportViewer1.LocalReport.DataSources.Clear()
                ReportViewer1.LocalReport.DataSources.Add(datasource)

            Catch ex As Exception

                Throw

            End Try

        End Sub

    End Class

    2015年8月4日 10:17

すべての返信

  • 先のスレッドの話(URL 下記)の続きですよね?

    ASP.NETのランタイムエラーについて
    https://social.msdn.microsoft.com/Forums/ja-JP/ad2afb35-2027-4fba-825c-4b72b15198ca/aspnet?forum=vbgeneralja

    そうだとすると、前のスレッドを放置してこのようなスレッドを立てるというのは自分的にはかなり失礼な話だと思うのですが、質問者さんにはそういう認識はないのですか?

    ネットのマナー・・・と言うより、普通に考えれば分かる社会的なマナーの問題だと思います。

    わかりませんか?

    2015年8月4日 12:06
  • 「データ ソース インスタンスがデータ ソース 'DataSet2' に指定されていません。 」と表示されます。

    コードを見る限り、「データソース 'DataSet2'」にデータを指定していないように見受けられます。
    「データソース 'DataSet1'」に System.Data.DataTable を割り当てている箇所ならありますが…。

    Dim dsCustomers As DataSet2 = GetPurchaseOrderDetail(target)

    Dim datasource As New ReportDataSource("Dataset1", dsCustomers.Tables(0))
    ReportViewer1.LocalReport.DataSources.Clear()
    ReportViewer1.LocalReport.DataSources.Add(datasource)

    エラーメッセージで示される 'DataSet2' というのは、As DataSet2 な「データ型」の事ではありません。
    .rdlc のデザイン時に表示される、「レポート データ」ペインの『データソース』の下に登録された 'DataSet2' のことです。

    さしあたっては、『New ReportDataSource("DataSet2", データ)』 を .DataSources.Add に渡してみてください。(引き渡すデータは、.rdlc で設定した内容に合わせる必要があります)

    「データソース 'DataSet1'」 と 「データソース 'DataSet2'」の両方が .rdlc に登録されているなら、実行時はどちらのデータソースにも、データを指定してやる必要があります。もし、実際には使っていないデータソースがあるのなら、不要なものとして削除しておいてください。

    2015年8月4日 15:10
  • いつもお世話になっております。

    申し訳ございません。
    私は放置したのはなく、終了したのだと認識しておりました。
    自分のやりたい事と技術力に乖離がある為、SurferOnWww様のご指摘通り、
    チュートリアルを参考に一度作る事に致しました。

    その場合、表題と投稿内容が違ったものになってしまうので
    このような別スレッドで投稿させて頂きましたが、
    常識と違うとご指摘を受けるのであれば、本当に申し訳ございません。

    2015年8月4日 23:32
  • わかっていただけないようなので、とにかくお願いしたいことを書きます。

    (1) 問題が解決 or ギブアップ or その他の理由で終了したいのであれば、その旨書いて終了宣言してください。

    (2) 前のスレッドと何らかの関係があることを新たに別のスレッドを立てて質問する際は、前のスレッドの URL を書いて関連のある旨書いてください。

    特に、前のスレッドでは、私が「回答済みチェックマークは外して質問を続けることをお勧めします」と提案したのに対し、質問者さんはチェックマークを外して質問を続けたという経緯があるのですから、(1) がなければ少なくとも私は終わったとは思いません。放置と同じことです。

    今からでも前のスレッドに「そこでの Q&A は終了することとその理由」を書いていただくようお願いします。

    2015年8月5日 1:22
  • 上のレスでお願いしたことに対応いただき有難うございました。

    本題の、

    > 『ReportViewer を使用してパラメーターを含む詳細 (RDLC) レポートを作成する (SSRS チュー
    > トリアル)』通りに作成してみたが上手くいかない

    の件ですが、アップされたコードを見ると「通り」ではないですよね。DB もチュートリアルのものとは異なるようですし。

    前のスレッドでも同じようなことを書いたと思いますが、チュートリアルと違うことをされると、違いを知っているのは質問者さんだけなので、こちらとしては何ともなりません。

    "データ ソース インスタンスがデータ ソース 'DataSet2' に指定されていません。" というエラーメッセージから推測すると、rdlc をウィザードで作る時に、[データセットのプロパティ] ダイアログで [名称(M):] に DataSet2 と指定し、一方コードでは DataSet1 と指定していることが原因のように思いますが(魔界の仮面弁士さんが指摘されたことと同じ?)、推測の域を出ません。

    これも前のスレッドで書きましたが、同じものがベースにないと話が通じ難いので、まずはチュートリアルと全く同じに作っていただき、それをベースに話をしませんか。



    • 編集済み SurferOnWww 2015年8月6日 0:37 一部追加
    2015年8月5日 12:39
  • いつもお世話になっております。
    質問に対してご回答頂いたのに対し返信が遅くなりまして大変申し訳ございません。

    ご指摘の通り、完全なチュートリアル通りではなく、
    データベースに関しましては既存の環境にあるものを使用しておりました。
    データセットの名前を変えたり、魔界の仮面弁士様のソースを記載してみましたが、
    根本からの理解が足らず、上手くいきませんでした。

    結果的にはローカルDBを使用せず、サーバにデータセットを作成し、呼出すことで
    目的を達成する事が出来ました。

    ソースは下記の通りです。

    Me.ReportViewer1.ServerReport.ReportServerUrl = New Uri(My.Settings.AppReportServerUrl)
    Me.ReportViewer1.ServerReport.ReportPath = "/XXXXX/XXXXXXX/XXXXXXXX"
    Me.ReportViewer1.ServerReport.DisplayName = "XXXXXXX"
    ReportViewer1.ServerReport.SetParameters(New ReportParameter("param1", param, False))

    サーバ側でレポートビルダーより表を作成(rdlファイル)し、データセットに作成したSQL(rsdファイル)を当てはめました
    あとは作成したファイルのフルパスとパラメータを表作成時に設定したパラメータに値をセットする事で
    レポートビューアより表示させることが出来ました。

    SurferOnWww様には相談に何度ものって頂きまして感謝しております。
    結果的にアドバイスを頂いたのにそれ通りにやり通すことが出来ず、誠に申し訳ございません。

    また、これにて当質問を終了させて頂きます。

    2015年8月25日 11:20