Exemplarische Vorgehensweise: Ausschließliches Verwenden von gespeicherten Prozeduren (C#)

Diese exemplarische Vorgehensweise enthält grundlegendes und umfassendes LINQ to SQL-Szenario für den Datenzugriff ausschließlich mithilfe von gespeicherten Prozeduren. Dieser Ansatz wird oft von Datenbankadministratoren verwendet, um den Zugriff auf den Datenspeicher einzuschränken.

Hinweis

Sie können gespeicherte Prozeduren außerdem in LINQ to SQL-Anwendungen verwenden, um das Standardverhalten zu überschreiben. Dies gilt vor allem für die Prozesse Create, Update und Delete. Weitere Informationen finden Sie unter Anpassen von Insert-, Update- und Delete-Vorgängen.

Im Rahmen dieser exemplarischen Vorgehensweise verwenden Sie zwei Methoden, die in der Beispieldatenbank Northwind gespeicherten Prozeduren zugeordnet wurden: CustOrdersDetail und CustOrderHist. Die Zuordnung tritt auf, wenn Sie das SQLMetal-Befehlszeilentool ausführen, um eine C#-Datei zu generieren. Weitere Informationen finden Sie im Abschnitt zu Voraussetzungen weiter unten in dieser exemplarischen Vorgehensweise.

Diese exemplarische Vorgehensweise basiert nicht auf dem Objektrelationaler Designer. Entwickler*innen, die mit Visual Studio arbeiten, können auch O/R-Designer verwenden, um die Funktionalität einer gespeicherten Prozedur zu implementieren. Weitere Informationen finden Sie unter LINQ to SQL-Tools in Visual Studio.

Hinweis

Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio angezeigt als die in den folgenden Anweisungen aufgeführten. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Personalisieren der IDE.

Diese exemplarische Vorgehensweise wurde mithilfe von Visual C#-Entwicklungseinstellungen geschrieben.

Voraussetzungen

Für diese exemplarische Vorgehensweise wird Folgendes vorausgesetzt:

  • Diese exemplarische Vorgehensweise verwendet einen dedizierten Ordner ("c:\linqtest7") als Speicherort für Dateien. Erstellen Sie diesen Ordner, bevor Sie die exemplarische Vorgehensweise starten.

  • Die Beispieldatenbank Northwind.

    Befindet sich diese Datenbank nicht auf Ihrem Entwicklungscomputer, können Sie diese von der Microsoft Downloadsite herunterladen. Anweisungen hierzu finden Sie unter Herunterladen von Beispieldatenbanken. Nachdem Sie die Datenbank heruntergeladen haben, kopieren Sie die Datei northwnd.mdf in den Ordner c:\linqtest7.

  • Eine von der Datenbank Northwind generierte C#-Codedatei.

    Diese exemplarische Vorgehensweise wurde mithilfe des SQLMetal-Tools mit der folgenden Befehlszeile geschrieben:

    sqlmetal /code:"c:\linqtest7\northwind.cs" /language:csharp "c:\linqtest7\northwnd.mdf" /sprocs /functions /pluralize

    Weitere Informationen finden Sie unter SqlMetal.exe (Tool zur Codegenerierung).

Übersicht

Diese exemplarische Vorgehensweise umfasst sechs Hauptaufgaben:

  • Einrichten der LINQ to SQL-Projektmappe in Visual Studio

  • Hinzufügen der System.Data.Linq-Assembly zum Projekt

  • Hinzufügen der Datenbank-Codedatei zum Projekt.

  • Erstellen einer Verbindung mit der Datenbank

  • Einrichten der Benutzeroberfläche.

  • Ausführen und Testen der Anwendung.

Erstellen einer LINQ to SQL-Lösung

In dieser ersten Aufgabe erstellen Sie eine Visual Studio-Projektmappe, die die erforderlichen Verweise zur Erstellung und Ausführung eines LINQ to SQL-Projekts enthält.

So erstellen Sie eine LINQ to SQL-Lösung

  1. Zeigen Sie in Visual Studio im Menü Datei auf Neu, und klicken Sie auf Projekt.

  2. Klicken Sie im Bereich Projekttypen des Dialogfelds Neues Projekt auf Visual C#.

  3. Klicken Sie im Bereich Vorlagen auf Windows Forms-Anwendung.

  4. Geben Sie im Feld NameSprocOnlyApp ein.

  5. Geben Sie im Feld Speicherort an, wo die Projektdateien gespeichert werden sollen.

  6. Klicke auf OK.

    Der Windows Forms Designer wird geöffnet.

Hinzufügen des LINQ to SQL-Assemblyverweises

Die LINQ to SQL-Assembly ist nicht in der Standardvorlage für Windows Forms-Anwendungen enthalten. Sie müssen die Assembly selbst hinzufügen. Siehe hierzu die folgenden Schritte:

So fügen Sie die Datei System.Data.Linq.dll hinzu

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Verweise, und klicken Sie dann auf Verweis hinzufügen.

  2. Klicken Sie im Dialogfeld Verweis hinzufügen auf .NET, auf die System.Data.Linq-Assembly und dann auf OK.

    Dem Projekt wird die Assembly hinzugefügt.

Hinzufügen der Northwind-Codedatei zum Projekt.

Bei diesem Schritt wird davon ausgegangen, dass Sie das SQLMetal-Tool zum Erzeugen einer Codedatei aus der Beispieldatenbank Northwind verwendet haben. Weitere Informationen finden Sie im Abschnitt zu Voraussetzungen weiter oben in dieser exemplarischen Vorgehensweise.

So fügen Sie die Northwind-Codedatei dem Projekt hinzu.

  1. Klicken Sie im Menü Projekt auf Vorhandenes Element hinzufügen.

  2. Navigieren Sie im Dialogfeld Vorhandenes Element hinzufügen zu c:\linqtest7\northwind.cs, und klicken Sie dann auf Hinzufügen.

    Die Datei northwind.cs wird dem Projekt hinzugefügt.

Erstellen von Datenbankverbindungen

In diesem Schritt definieren Sie die Verbindung zur Beispieldatenbank Northwind. Diese exemplarische Vorgehensweise verwendet "c:\linqtest7\northwnd.mdf" als Pfad.

So erstellen Sie die Datenbankverbindung

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Form1.cs, und klicken Sie dann auf Code anzeigen.

  2. Geben Sie den folgenden Code in die Form1-Klasse ein:

    Northwnd db = new Northwnd(@"c:\linqtest7\northwnd.mdf");
    

Einrichten der Benutzeroberfläche

In dieser Aufgabe richten Sie eine Benutzeroberfläche ein, sodass Benutzer durch Ausführen gespeicherter Prozeduren auf die Daten in der Datenbank zugreifen können. In den von Ihnen hier entwickelten Anwendungen können Benutzer nur mithilfe der in der Anwendung eingebetteten gespeicherten Prozeduren auf die Daten zugreifen.

So richten Sie die Benutzeroberfläche ein

  1. Kehren Sie zum Windows Forms Designer (Form1.cs[Design]) zurück.

  2. Klicken Sie im Menü Ansicht auf Toolbox.

    Die Toolbox wird geöffnet.

    Hinweis

    Klicken Sie auf die Ortsmarke AutoAusblenden, damit die Toolbox während der folgenden Schritte geöffnet bleibt.

  3. Ziehen Sie zwei Schaltflächen, zwei Textfelder und zwei Bezeichnungen von der Toolbox auf Form1.

    Ordnen Sie die Steuerelemente wie in der Abbildung an. Erweitern Sie Form1, damit die Steuerelemente platziert werden können.

  4. Klicken Sie mit der rechten Maustaste auf label1, und klicken Sie dann auf Eigenschaften.

  5. Ändern Sie die Text-Eigenschaft von label1 in Enter OrderID:.

  6. Ändern Sie auf die gleiche Weise bei label2 die Text-Eigenschaft von label2 in Enter CustomerID:.

  7. Ändern Sie auf die gleiche Weise die Text-Eigenschaft für button1 in Auftragsdetails.

  8. Ändern Sie die Text-Eigenschaft für button2 in Auftragsverlauf.

    Erweitern Sie die Schaltflächen-Steuerelemente, damit der gesamte Text sichtbar ist.

Verarbeitung von Mausklicks auf die Schaltflächen

  1. Doppelklicken Sie auf Order Details in Form1, um den button1-Ereignishandler im Code-Editor zu öffnen.

  2. Geben Sie den folgenden Code in den button1-Ereignishandler ein.

    // Declare a variable to hold the contents of
    // textBox1 as an argument for the stored
    // procedure.
    string param = textBox1.Text;
    
    // Declare a variable to hold the results
    // returned by the stored procedure.
    var custquery = db.CustOrdersDetail(Convert.ToInt32(param));
    
    // Execute the stored procedure and display the results.
    string msg = "";
    foreach (CustOrdersDetailResult custOrdersDetail in custquery)
    {
        msg = msg + custOrdersDetail.ProductName + "\n";
    }
    if (msg == "")
        msg = "No results.";
    MessageBox.Show(msg);
    
    // Clear the variables before continuing.
    param = "";
    textBox1.Text = "";
    
  3. Doppelklicken Sie nun auf button2 in Form1, um den button2-Handler zu öffnen.

  4. Geben Sie den folgenden Code in den button2-Ereignishandler ein.

    // Comments in the code for button2 are the same
    // as for button1.
    string param = textBox2.Text;
    
    var custquery = db.CustOrderHist(param);
    
    string msg = "";
    foreach (CustOrderHistResult custOrdHist in custquery)
    {
        msg = msg + custOrdHist.ProductName + "\n";
    }
    MessageBox.Show(msg);
    
    param = "";
    textBox2.Text = "";
    

Testen der Anwendung

Nun können Sie die Anwendung testen. Beachten Sie, dass die Verbindung zum Datastore auf die Aktionen der beiden gespeicherten Prozeduren beschränkt ist. Diese Aktionen geben die Produkte zu der von Ihnen eingegebenen OrderID und die Produkthistorie zu der von Ihnen eingegebenen CustomerID zurück.

So testen Sie die Anwendung

  1. Drücken Sie die Taste F5, um mit dem Debuggen zu beginnen.

    Form1 wird angezeigt.

  2. Geben Sie im Feld Enter OrderID10249 ein, und klicken Sie auf Auftragsdetails.

    Ein Meldungsfeld listet die in Bestellung 10249 enthaltenen Produkte auf.

    Klicken Sie auf OK , um das Meldungsfeld zu schließen.

  3. Geben Sie im Feld Enter CustomerIDALFKI ein, und klicken Sie dann auf Auftragsverlauf.

    Ein Meldungsfeld mit der Bestellhistorie für den Kunden ALFKI wird angezeigt.

    Klicken Sie auf OK , um das Meldungsfeld zu schließen.

  4. Geben Sie im Feld Enter OrderID123 ein, und klicken Sie auf Auftragsdetails.

    Die Meldung "Keine Ergebnisse" erscheint.

    Klicken Sie auf OK , um das Meldungsfeld zu schließen.

  5. Klicken Sie im Menü Debuggen auf Debuggen beenden.

    Die Debugsitzung schließt.

  6. Wenn Sie Ihre Versuche abgeschlossen haben, können Sie auf Projekt schließen im Menü Datei klicken und Ihr Projekt ggf. speichern.

Nächste Schritte

Sie können dieses Projekt mit einigen Änderungen erweitern. Sie können beispielsweise die verfügbaren gespeicherten Prozeduren in einem Listenfeld aufführen, sodass der Benutzer diese auswählen kann. Sie könnten auch die Ausgabe von Berichten in eine Textdatei umleiten.

Siehe auch