Wie man gespeicherte Prozeduren mit mehreren Datensätzen als Ergebnis verwendet

2020-05-08

Beim Erstellen von Berichten haben wir es oft mit Datenbanken zu tun, die alles andere als ideal sind. Die verschiedenen "Features" lassen uns manchmal nicht weiterkommen. Wie kann man zum Beispiel einen Bericht erstellen, der auf mehreren Datensätzen basiert, die in den MS SQL gespeicherten Prozeduren resultieren? Wenn Sie eine Datenquelle im Bericht erstellen, können wir eine gespeicherte Prozedur in der SQL-Abfrage verwenden, aber nur für eine bestimmte Tabelle. Das heißt, es wird nur ein erster Satz von Daten genommen, die von der gespeicherten Prozedur zurückgegeben werden. Um mehrere Tabellen der Ergebnisse einer gespeicherten Prozedur zu generieren, müssen wir eine Datenquellen-Software im Code einer benutzerdefinierten Anwendung erstellen.

Sie müssen eine Datenbankverbindung erstellen, die die gespeicherte Prozedur ausführen und ihre Ergebnisse in das Dataset eintragen kann. Dann übertragen wir das Dataset in den Bericht und tragen die Datenquelle in den Bericht ein. Auf diese Weise erhalten wir im Designer die vorbereitete Datenquelle, wenn wir den Bericht erstellen. Wir können noch weiter gehen und uns programmatisch mit der Datenquelle des Berichts verbinden, so dass sie bereits im Datenbaum ist. Aber zunächst betrachten wir die erste Option mit dem einfachen Hinzufügen einer Datenquelle zum Bericht.

Nehmen wir an, Sie haben einige WinForms-Anwendungen, in denen Sie Berichte generieren. Fügen Sie eine Schaltfläche hinzu, um den Berichtseditor aufzurufen:

1
2
3
4
5
6
7
8
private void button1_Click(object sender, EventArgs e)
 {
 Report FReport = new Report();
 SqlConnection conn = new SqlConnection("Data Source=localhost;AttachDbFilename=;Initial Catalog=salesdb;Integrated Security=True;Persist Security Info=False;User ID=;Password=");
 DataSet data = GetDataSet(conn, "Test");
 FReport.RegisterData(data, "NorthWind");
 FReport.Design();
 }

Hier haben wir ein Report-Objekt erstellt, die MS SQL-Datenbank-Verbindungszeile bekannt gegeben, eine Report-Datenquelle erstellt und diese im Report registriert. Rufen Sie die Datenquelle "GetDataSet" wie folgt auf: 

1
2
3
4
5
6
7
8
9
10
11
public DataSet GetDataSet(SqlConnection connection, string storedProcName, params SqlParameter[] params)
 {
 var command = new SqlCommand(storedProcName, connection) { CommandType = CommandType.StoredProcedure };
 command.Parameters.AddRange(params);
 
 var result = new DataSet();
 var dataAdapter = new SqlDataAdapter(command);
 dataAdapter.Fill(result);
 
 return result;
 }

Diese Methode akzeptiert eine Verbindungszeichenfolge, den Namen der gespeicherten Prozedur und die möglichen Parameter für die gespeicherte Prozedur. In unserem Fall haben wir nichts übergeben. Nachdem Sie eine Verbindung zur Datenbank hergestellt haben, wird die gespeicherte Prozedur ausgeführt. Die Ergebnisse ihrer Arbeit werden im dataAdapter abgelegt.

An dieser Stelle hätten wir den Artikel beenden können. Der obige Code reicht aus, um eine Datenquelle in einem Bericht zu erstellen und zu registrieren, die Ihnen im Designer zur Verfügung steht, wenn Sie am Anfang des Berichtsobjekts erstellt bearbeiten.

Wenn der Berichtsdesigner geöffnet ist, sehen Sie eine leere Berichtsvorlage. Die Datenquellen müssen Sie in den Einstellungen wählen:

 

Wir können jedoch den Code verbessern und weitere Designaktionen bei der Auswahl der Datenquellen vermeiden. Das heißt, der Bericht wird eine zusätzliche Datenquelle erstellen. Für diesen Zweck werden wir den Drucktasten- Handler vervollständigen: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void button1_Click(object sender, EventArgs e)
 {
 Report FReport = new Report();
 Config.DesignerSettings.DesignerLoaded += DesignerSettings_DesignerLoaded;
 SqlConnection conn = new SqlConnection("Data Source=localhost;AttachDbFilename=;Initial Catalog=salesdb;Integrated Security=True;Persist Security Info=False;User ID=;Password=");
 DataSet data = GetDataSet(conn, "Test");
 
 FReport.RegisterData(data, "NorthWind");
 // activate all data sources by default
 foreach (DataSourceBase source in FReport.Dictionary.DataSources)
 {
 source.Enabled = true;
 }
 FReport.Design();
 }

Wie Sie bemerkt haben, haben wir den Handler an das Download-Ereignis des Designers gebunden. Als nächstes binden wir alle Datenquellen des Berichts in die Schleife ein. Wir implementieren den Handler für das Download-Ereignis des Designers: 

1
2
3
4
 private void DesignerSettings_DesignerLoaded(object sender, EventArgs e)
 {
 (sender as Designer).cmdNew.CustomAction += new EventHandler(cmdNew_CustomAction);
 }

Wir leiten den Zeiger auf ein Ereignis des Berichtsdesigners weiter. Den Ereignishandler: 

1
2
3
4
5
6
7
8
9
10
 void cmdNew_CustomAction(object sender, EventArgs e)
 {
 Designer designer = sender as Designer;
 
 //StandardReportWizard wizard = new StandardReportWizard(); // you can use any wizard form package
 BlankReportWizard wizard = new BlankReportWizard();
 wizard.Run(designer);
 
 designer.SetModified(this, "EditData");
 }

Wir erstellen einen Assistenten zum Erstellen eines leeren Berichts.

Als Ergebnis erhalten wir beim Bearbeiten eines leeren Berichts die hinzugefügten Daten:

 

26. November 2024

Installing FastReport on .NET 8.0 and Creating a Simple Report

The purpose of this article is to explain step by step how to install FastReport on .NET 8.0 and how to create a simple report. Taking the reporting process from the beginning, it will show how to connect, design and view reports.
20. November 2024

Lokalisierung und Ändern von Sprachen in FastReport VCL

FastReport VCL unterstützt 40 Sprachen für die Schnittstellenlokalisierung und ermöglicht es Ihnen, die Sprache im laufenden Betrieb über Menüs oder Code ohne Neukompilierung zu ändern.
1. November 2024

Neue Funktionen des FastReport VCL Berichtseditors

Wir betrachten die neuen Funktionen des Berichtseditors: Hilfslinien, Hervorhebung von sich schneidenden Objekten, aktualisierte Berichts- und Datenbäume.
Fast Reports
  • 800-985-8986 (Englisch, die USA)
  • +4930568373928 (Deutsch)
  • +55 19 98147-8148 (Portugiesisch)
  • info@fast-report.com
  • 66 Canal Center Plaza, Ste 505, Alexandria, VA 22314

© 1998-2024 Fast Reports Inc.