web-dev-qa-db-ja.com

.rdlcレポート-データセット 'DataSet1'のデータリーダーを作成できません

レポートウィザードを使用してVS 2012で.rdlc-Reportを作成し、データソースとデータセットを追加しました。以下のコードを使用してレポートを表示しようとすると、次のエラーメッセージが表示されます。

「データセット 'DataSet1'のデータリーダーを作成できません。」

bytes = localReport.Render("PDF", sdeviceinfo, out smimetype, out sencoding, out sfilenameextension, out streamids, out myWarnings);

提案を事前にありがとう!

30
Thomas

1)管理者モードで実行しており、SSRSサーバーにアクセスできることを確認してください。

2)正しいデータセット名を設定したか、それを正しくロードして割り当てているかを確認します。

MSDNの this サンプルを確認してください。

幸運を!

0
PM_ME_YOUR_CODE

私は問題を解決しました-コーディングエラー-次のようにSqlServerDataSourceのaspxコードから「適切な」パラメーター値を省略しました...

Parameter-name = "p_CSV_VEHICLES"にはDefaultValueがないことに注意してください。

AND(判明しました)2つのパラメーター(= "p_CSV_VGROUPS"および= "p_CSV_VEHICLES")は、空の文字列 ""をデフォルト値として渡すことができませんでした-空の文字列は、これら2つのパラメーターの選択コンテ​​キストでは無効です。

DefaultValueを追加し、DefaultValue(s)を各パラメータの有効な文字列値に設定した後、レポートはWebページのReportViewerコントロールに完全に表示されました。

これが元の(動作しない)aspx-codeです。

     <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:FCI_WebMainConnectionString %>" 
        SelectCommand="uspRPT_CostDetailFleet" SelectCommandType="StoredProcedure">
        <SelectParameters>
           <asp:Parameter DefaultValue="5" Name="p_UID_DIVISION" Type="Int32" />
           <asp:Parameter DefaultValue="85" Name="p_UID_CUSTOMER" Type="Int32" />
           <asp:Parameter DefaultValue="FCIFLEETGRP" Name="p_SORT_ORDER" Type="String" />
           <asp:Parameter DefaultValue="" Name="p_CSV_VGROUPS" Type="String" />
           <asp:Parameter Name="p_CSV_VEHICLES" Type="String" />
           <asp:Parameter DbType="Date" DefaultValue="#01/01/2013#" Name="p_dtStart0" />
           <asp:Parameter DbType="Date" DefaultValue="#12/31/2013#" Name="p_dtEnd0" />
        </SelectParameters>
     </asp:SqlDataSource>
0
John D

エラーを表示すると、dataset1のデータセットのデータリーダーを作成できません:

private void frm_report_Load(object sender, EventArgs e)
{

    this.reportViewer1.RefreshReport();
    reportViewer1.LocalReport.Refresh();
    reportViewer1.LocalReport.DataSources.Clear();
    reportViewer1.LocalReport.ReportEmbeddedResource = "cruds_reports.Report1.rdlc";

    SqlCommand cmd = new SqlCommand("select * from tbl_info",con);
    SqlDataAdapter da = new SqlDataAdapter();
    DataSet ds = new DataSet();
    da.Fill(ds);
    DataTable dt = new DataTable();
    dt = ds.Tables[0];
    if (dt.Rows.Count>0)
    {
        rds = new ReportDataSource("DataSet1", dt);
        reportViewer1.LocalReport.DataSources.Add(rds);
        rds.Value = dt;
        reportViewer1.LocalReport.Refresh();
        reportViewer1.RefreshReport();
    }
    else
    {
        return;
    }

}
0
niraj

次の2つが問題ないことを確認してください。

1)Report1.rdlc [Design]で(Alt + Ctrl + Dを押す):

データセットを右クリックしてデータセットを追加し、

データセットプロパティフォームで、名前:DataSet1を選択します。

dataSource combocoxの横にあるNew ...ボタンをクリックします。

オブジェクトをクリックします

プロジェクトで。 yourList1または...

そして仕上げ。

次に、コンボボックスでデータソースと使用可能なデータセットを選択します。

これらの手順を繰り返し、DataSet2を作成します...

[OK]をクリックしてフォームを閉じます。

2)yourFormPrintコード:

    private void frmPrint_Load(object sender, EventArgs e)
    {
        CreateReport1();
        System.Drawing.Printing.PageSettings ps = new 
               System.Drawing.Printing.PageSettings();
        ps.Margins.Top = CentimeterToPixel(0.9);
        ps.Margins.Left = CentimeterToPixel(0.9);
        ps.Margins.Right = CentimeterToPixel(0.9);
        ps.Margins.Bottom = CentimeterToPixel(0.9);
        ps.Landscape = false;
        ps.PaperSize =new PaperSize ("A4", 827, 1169);
        ps.PaperSize.RawKind = (Int32)(System.Drawing.Printing.PaperKind.A4);
        //psize.RawKind = (int)PaperKind.A4;
        //ps.PaperSize = psize;
        reportViewer1.SetPageSettings(ps);
        this.reportViewer1.RefreshReport();
        this.reportViewer1.SetDisplayMode(DisplayMode.PrintLayout);
        WindowState = FormWindowState.Maximized;
    }
    private int CentimeterToPixel(double Centimeter)
    {
        int  pixel = -1;
        using (Graphics g = this.CreateGraphics())
        {
            pixel =Convert.ToInt32 ( Centimeter * (g.DpiY / 2.54));
        }
        return pixel;
    }
    private void CreateReport1()
    {
        reportViewer1.LocalReport.DataSources.Clear();
        reportViewer1.ProcessingMode = 
                     Microsoft.Reporting.WinForms.ProcessingMode.Local;


        reportViewer1.LocalReport.ReportEmbeddedResource = 
                        "yourProjectName.Report1.rdlc";
        ReportDataSource RDS = new ReportDataSource();
        RDS.Name = "DataSet1";
        RDS.Value = yourPublicList1;
        reportViewer1.LocalReport.DataSources.Add(RDS);

        ReportDataSource RDS2 = new ReportDataSource();
        RDS2.Name = "DataSet2";
        RDS2.Value = yourPublicList2;
        reportViewer1.LocalReport.DataSources.Add(RDS2);
    }
0
Sharif Lotfi

私も同じ問題を抱えていました。私が観察したところ、RDLCレポートにはデータセットが必要です。これには、レコードが含まれている必要があります。または、空のオブジェクト(空のオブジェクトにはメタデータが含まれます)

したがって、ベストプラクティスは常に、空のオブジェクト(Nullまたはnothingではない)またはいくつかのレコードを含むデータセットを返すことです。

0
Ramesh
reportviewer1.LocalReport.DataSources.Add(New ReportDataSource("DataSet1", ObjectDataSource1))

データソースをレポートに設定する方法をコードに投稿することをお勧めします。

0
Harry.wong