2017-09-20 2 views
0

Nun habe ich hier ein paar Antworten hier für die gleiche Frage gesucht, aber keine wirklich das Problem gelöst oder genug Informationen enthalten, um ein paar Informationen zu klären.Probleme beim Herstellen einer Verbindung zum lokalen RDL-Bericht.

Als Erstes habe ich einen RDL-Bericht erstellt, der eine Verbindung zu einer Access-Datenbank herstellt. Alles gut bis jetzt. Jetzt möchte ich es mit meiner Software die Codes ohne einen Server (lokal) nachgeschlagen verbinden und die am nächsten kam ich etwas zu arbeiten, ist dies:

Private Sub GenerateLocalReport() 

    ReportViewer1.ProcessingMode = ProcessingMode.Local 
    ReportViewer1.LocalReport.ReportPath = "D:\work\OrdersInvoice\ReportInvoice\ReportInvoice\OrdersReport.rdl" 

    reportViewer.RefreshReport() 
    ReportViewer1.RefreshReport() 
End Sub 

nun das Problem ist, dass der obige Code funktioniert nicht. Ich erhalte die folgende Nachricht: Eine Datenquelleninstanz wurde für die Datenquelle nicht bereitgestellt.

Durch die Suche, was ich gefunden habe, musste ich etwas als Databinding hinzufügen. Hier beginnt die Verwirrung.

Dim ds = New ReportDataSource("DataSet1",???) 
    reportViewer1.LocalReport.DataSources.Add(ds) 

Dies ist der direkteste Code, den ich bekommen konnte. Aber ich habe keine Ahnung, was sie mit verbindlichen Datenquellen meinen. Ich habe versucht, eine Datenquelle im Programm zu erstellen, aber es ist nicht die richtige Antwort. Ich bin hier etwas verloren.

Ein anderer Code, den ich gefunden, die das gleiche tun sollten, ist:

ReportViewer1.LocalReport.DataSources.Add(TempDBDataSet.OrderTableDataTable 

wieder gleiche Problem

Antworten entweder in C# oder VB.net sind in Ordnung.

Antwort

1

Es gibt zwei Arten von Reporting Services-Dateien: RDL & RDLC.

Beide funktionieren sehr ähnlich.

RDL-Dateien sind für die Ausführung auf einem Berichtsserver konzipiert, auf dem der Server die Datenquelle basierend auf den im Bericht bereitgestellten Verbindungsinformationen erstellt und füllt.

RDLC-Dateien können mithilfe eines Report Viewer-Steuerelements in Ihre Clientanwendungen eingebettet werden, ohne dass ein Server erforderlich ist. Sie müssen Ihre Datenquellen auch manuell in Ihrer Clientanwendung verbinden und füllen (wie Sie es in Ihrer Antwort tun).

+0

Also, für Offline-Anwendungen ein RDLC ist eine bessere Option? –

+1

Nun, um RDL-Dateien zu verwenden, benötigen Sie eine Instanz von SQL Server Reporting Services, die vollständig von einer Offlineanwendung getrennt ausgeführt wird –

0

Ich glaube, ich löste dieses Problem nach einigem Versuch und Irrtum. Vor allem hier ist der Code, den ich verwendet:

Dim dataset As New DataSet("DataSet1") 
Dim Conn As OleDb.OleDbConnection = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\TempDB.mdb;User Id=admin; 
    Password=;") 
Dim Adb As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter("Select * from OrderTable", Conn) 
Adb.Fill(dataset) 
Dim rds As New ReportDataSource() 
rds.Name = "DataSet1" 
rds.Value = dataset.Tables(0) 
ReportViewer1.LocalReport.DataSources.Add(rds) 

Also, was ich tat, war, dass ich eine Verbindung mit der Datenbank vorgenommen, die dem Bericht verbunden war und dann gefüllt Daten aus der Datenbank zu meinem Datensatz verwendet, die Auf eine Tabelle zugreifen, die ich für die ReportDataSource referenziert habe.

Danach hat es ziemlich gut funktioniert.

Verwandte Themen