2013-03-12 23 views
21

Ho creato un .rdlc-Report in VS 2012 utilizzando la procedura guidata di report e aggiunto l'origine dati e il set di dati. Quando provo a rendere il report usando il codice seguente ottengo seguente messaggio di errore: "Non è possibile creare un lettore di dati per set di dati 'DataSet1'".rdlc Report - Impossibile creare un lettore di dati per set di dati 'DataSet1'

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

Grazie in anticipo per qualsiasi suggerimento!

risposta

1

1) Assicurarsi di eseguire la modalità amministratore e accedere al server SSRS.

2) Verificare se è stato impostato il nome del set di dati corretto o se è stato caricato e assegnato correttamente.

Controllare l'esempio this su MSDN.

Buona fortuna!

51

Ho lo stesso problema che "Impossibile creare un lettore di dati per il set di dati 'zzz'"

la risposta è ReportDataSource (xxx stringa, yyy DataTable)

Si consiglia di utilizzare il nome giusto. xxx dovrebbe essere zzz

+2

di ringraziamento, questo mi ha salvato un sacco di debugging. – Sharbel

+1

E non dimenticare di 'localReport.DataSources.Add()' the 'ReportDataSource' - questo era il mio problema. –

+0

ha funzionato perfettamente! –

3

Non è possibile creare ReportViewer e fornire un set di dati vero. È possibile che si verifichino errori dovuti alla tecnica di parametrizzazione. Puoi provare in questo modo. Ho risolto in questo modo.

protected void btnPdf_Click(object sender, EventArgs e) 
    { 
    ReportViewer viwer = new ReportViewer(); 
    ObjectDataSource ob = new ObjectDataSource("dataset.YourTableAdapter", "GetData"); 
    dataset.YourTableAdapter ds = new dataset.YourTableAdapter(); 

    string PDF = "PDF"; 
    string ReportType = "ReportType"; 
    Warning[] warnings = null; 
    string[] streamIds = null; 
    string mimeType = string.Empty; 
    string encoding = string.Empty; 
    string extension = string.Empty; 
    string filetype = string.Empty; 



    viwer.SizeToReportContent = true; 
    viwer.LocalReport.ReportPath = "reports/report/report.rdlc"; 
    viwer.ProcessingMode = ProcessingMode.Local; 
    ob.SelectParameters.Clear(); 
    ob.SelectParameters.Add(QueryStringEnum.CompanyID, CurrentCompanyID.ToString()); 

    ReportDataSource rds = new ReportDataSource("datasetname", (object) ds.GetData((long?)CurrentCompanyID.ToInt64()); 

    viwer.LocalReport.DataSources.Add(rds); 
    viwer.LocalReport.Refresh(); 

    byte[] bytes = viwer.LocalReport.Render("PDF", null, 
    out mimeType, out encoding, out extension, out streamIds, out warnings); 




} 
8

Il mio "gotcha" era la scoperta che DataSet non era la stessa di Dataset.

(Sì, mi rendo conto che sto in realtà ammette di questo in un forum pubblico come spero che chiunque altro può evitare questo stupido errore)

1

ho risolto il problema - il mio errore di codifica - avevo omesso 'corretto' i valori dei parametri del codice aspx per la SQLServerDataSource come segue ...

Avviso c'è nessuna DefaultValue per il parametro-name = "p_CSV_VEHICLES"

E (si è scoperto) che i due parametri (= "p_CSV_VGROUPS" e = "p_CSV_VEHICLES") non possono passare una stringa vuota "" come valore predefinito - stringa vuota non valida nel co selezionato ntext per questi due parametri.

Dopo aver aggiunto DefaultValue e impostato DefaultValue (s) su valori stringa validi per ogni parametro, il report ha mostrato perfettamente il controllo ReportViewer sulla mia pagina Web.

Ecco il codice aspx originale (non funzionante).

 <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

Ho anche avuto lo stesso problema.Dopo le mie osservazioni ho identificato che i report RDLC hanno bisogno del dataset o dovrebbe avere alcuni record o oggetti vuoti (l'oggetto vuoto avrà i metadati)

Quindi la best practice è sempre restituire un set di dati con oggetto vuoto (non Null o nothing) o con alcuni record in esso.

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

è meglio pubblicare il codice come si imposta l'origine dati nel report.

0

Visualizzazione errore non può creare lettore di dati per i dati di set di 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; 
    } 

} 
Problemi correlati