Aufrufen von SQL Server-gespeicherten Prozeduren in ASP.NET mit Visual Basic.

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 306574 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde zuvor veröffentlicht unter D306574
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

In diesem Artikel wird beschrieben, wie Sie ASP.NET und ADO.NET mit Visual Basic .NET einsetzen können, um eine gespeicherte Microsoft SQL Server-Prozedur mit einem Eingabeparameter und einem Ausgabeparameter zu erstellen und aufzurufen.

Das Codebeispiel in diesem Artikel prüft zunächst, ob die gespeicherte Prozedur, die Sie erstellen werden, in der Datenbank bereits existiert. Ist dies nicht der Fall, erstellt dieser Code eine gespeicherte Prozedur, die einen Parameter verwendet, um die Tabelle Authors (Autoren) auf der Basis der Nachnamen zu durchsuchen, und dann die passenden Zeilen und die Anzahl der ermittelten Zeilen in einem Ausgabeparameter zurückmeldet.

Außerdem erfahren Sie in diesem Artikel, wie Sie ein Webformular erstellen können, das Ihnen eine einfache Benutzeroberfläche bietet. Das Webformular enthält die folgenden Elemente:
  • Ein Textfeld, in dem der Benutzer die Suchbedingung eingibt.
  • Ein Steuerelement DataGrid, das die Suchergebnisse anzeigt.
  • Ein Steuerelement Label, das die Anzahl der zurückgegebenen Datensätze angezeigt.
  • Ein Steuerelement Button, das die gespeicherte Prozedur aufruft, wenn auf die Schaltfläche geklickt wird.

Anforderungen

Die folgende Liste führt die empfohlene Hardware, Software und Netzwerkinfrastruktur sowie die benötigten Service Packs auf:
  • Microsoft SQL Server Version 7.0 oder höher
  • Microsoft Visual Studio .NET
  • Microsoft Visual Basic .NET
  • Die Berechtigungen zum Erstellen der gespeicherten Prozedur in der Datenbank
In diesem Artikel wird vorausgesetzt, dass Sie über Erfahrungen in den folgenden Bereichen verfügen:
  • Gespeicherte SQL Server-Prozeduren

ASP.NET-Projekt erstellen und Steuerelemente hinzufügen

In diesem Abschnitt erstellen Sie ein ASP.NET-Projekt und bauen die grundlegende Benutzeroberfläche dafür auf. Beachten Sie , dass bei diesen Schritten Microsoft Visual Basic .NET-Code verwendet wird. Gehen Sie folgendermaßen vor, um das Projekt zu erstellen:
  1. Klicken Sie auf Start, zeigen Sie auf Programme, dann auf Microsoft Visual Studio .NET, und klicken Sie dann auf Microsoft Visual Studio .NET.
  2. Klicken Sie auf der Startseite von Visual Studio .NET auf Neues Projekt.
  3. Klicken Sie im Dialogfeld Neues Projekt unter Projekttypen auf Visual Basic-Projekte, und klicken Sie dann unter Vorlagen auf ASP.NET-Webanwendung.
  4. Geben Sie in das Feld Name einen Namen für Ihre Webanwendung ein, und klicken Sie dann auf OK.
  5. Fügen Sie dem Webformular die folgenden Serversteuerelemente hinzu, und legen Sie die Eigenschaften so fest, wie sie in der Tabelle aufgeführt sind.
    Tabelle minimierenTabelle vergrößern
    SteuerelementID-EigenschaftTexteigenschaft
    BezeichnunglblLastNameGeben Sie den Nachnamen des Autors ein:
    TextfeldtxtLastName%
    SchaltflächebtnGetAuthorsAutoren abrufen
    BezeichnunglblRowCount(Zeilenanzahl)

  6. Ziehen Sie aus der Toolbox das Steuerelement DataGrid in das Webformular, und setzen Sie seine Eigenschaft Name auf GrdAuthors.
  7. Klicken Sie mit der rechten Maustaste auf das Raster, und klicken Sie danach auf AutoFormat.
  8. Für das Schema wählen Sie die Option Professional 1. Klicken Sie auf OK.

Erstellen der gespeicherten Prozedur "GetAuthorsByLastName"

Verwenden Sie den folgenden Transact-SQL-Code (T-SQL-Code), um die gespeicherte Prozedur "GetAuthorsByLastName" zu erstellen:
Create Procedure GetAuthorsByLastName1 (@au_lname varchar(40), @RowCount int output)  
as 

select * from authors where au_lname like @au_lname; 

/ * @@ROWCOUNT gibt die Anzahl der Zeilen zurück, die von der letzten Anweisung betroffen sind. */ 
select @RowCount=@@ROWCOUNT
				
Dieser Code enthält zwei Parameter: @au_lname und @RowCount. @au_lname ist ein Eingabeparameter, der die Suchzeichenfolge für eine Suche des Typs "like" in der Tabelle Authors ermittelt. @RowCount ist ein Ausgabeparameter, der die Variable @@ROWCOUNT verwendet, um die betreffenden Zeilen zu ermitteln.

Erstellen und Ausführen der gespeicherten Prozedur

Um auf SQL Server-Datenbanken zugreifen zu können, müssen Sie den Namespace System.Data.SqlClient importieren, der neue Objekte verfügbar macht. Zum Beispiel die Objekte SqlDataReader und SqlDataAdapter. Sie können SqlDataReader verwenden, um eine Folge von Vorwärtszeilen aus einer SQL Server-Datenbank auszulesen. DataAdapter repräsentiert einen Satz von Datenbefehlen und eine Datenbankverbindung, die Sie verwenden können, um das Objekt DataSet zu füllen und die SQL Server-Datenbank zu aktualisieren.

ADO.NET führt zudem das Objekt DataSet ein, bei dem es sich um eine speicherresidente Darstellung von Daten handelt, durch die ein konsistentes, relationales Programmierungsmodell zur Verfügung steht, das von der Datenquelle unabhängig ist. In dem Code aus diesem Abschnitt werden alle genannten Objekte verwendet.
  1. Doppelklicken Sie auf das Webformular.
  2. Fügen Sie den folgenden Code in den Deklarationsbereich Ihres Webformulars ein, den Sie ganz am Anfang des Codefensters finden:
    Imports System.Data
    Imports System.Data.SqlClient
    					
  3. Um sicherzustellen, dass die gespeicherte Prozedur bereits existiert, und eine neue gespeicherte Prozedur zu erstellen, verwenden Sie ein SqlCommand-Objekt in Verbindung mit einem SqlDataReader-Objekt. Mit SqlCommand können Sie alle SQL-Befehle für die Datenbank ausführen. Rufen Sie dann die Methode ExecuteReader des Objekts SqlCommand auf, um das Objekt SqlDataReader zurückgeben zu lassen, das die passenden Zeilen für Ihre Abfrage enthält.

    Fügen Sie den folgenden Code in das Ereignis Page_Load Ihres Webformulars ein:
    'Only run this code the first time the page is loaded.
    'The code inside the IF statement is skipped when you resubmit the page.
    If Not IsPostBack Then
        Dim MyConnection As SqlConnection
        Dim MyCommand As SqlCommand
        Dim MyDataReader As SqlDataReader
    
        'Create a Connection object.
        MyConnection = New SqlConnection("server=(local);database=pubs;Trusted_Connection=yes")
    
        'Create a Command object, and then set the connection.
        ' Die folgende SQL-Anweisung überprüft, ob eine gespeicherte GetAuthorsByLastName-Prozedur 
        ' bereits vorhanden ist.
        MyCommand = New SqlCommand("if object_id('pubs..GetAuthorsByLastName') is not null " + "begin" + " if objectproperty(object_id('pubs..GetAuthorsByLastName'), 'IsProcedure')= 1" + " select object_id('pubs..GetAuthorsByLastName')" + " else" + " return " + "end" + " else" + " return", MyConnection)
    
        Legen Sie mit "MyCommand"
            den auszuführenden Befehlstyp fest.
            .CommandType = CommandType.Text
    
            'Öffnen Sie die Verbindung.
            .Connection.Open()
    
            'Führen Sie die SQL-Anweisung aus, um die zurückgegebenen Zeilen im DataReader anzuzeigen.
            MyDataReader = .ExecuteReader()
    
            'Wenn Zeilen zurückgegeben werden, ist die gespeicherte Prozedur, die Sie versuchen, 
            'zu erstellen, bereits vorhanden. Versuchen Sie daher, die gespeicherte Prozedur nur zu erstellen,
            'wenn sie nicht vorhanden ist.
            If Not MyDataReader.Read() Then
                .CommandText = "create procedure GetAuthorsByLastName (@au_lname varchar(40), " & _ 
    
                                "@RowCount int output) " & _ 
    
                                " as select * from authors where au_lname like @au_lname; select @RowCount=@@ROWCOUNT"
                MyDataReader.Close()
                .ExecuteNonQuery()
            Else
                MyDataReader.Close()
            End If
    
            .Dispose()  'Dispose of the Command object.
            MyConnection.Close() 'Close the connection.
        End With
    End If
    					
  4. Rufen Sie die gespeicherte Prozedur im Ereignis Click der Schaltfläche btnGetAuthors auf, und verwenden Sie dann das Objekt SqlDataAdapter, um Ihre gespeicherte Prozedur ausführen zu lassen. Sie müssen Parameter für die gespeicherte Prozedur erstellen und der Auflistung Parameter des Objekts SqlDataAdapter hinzufügen.

    Fügen Sie den folgenden Code nach dem Ereignis Page_Load ein:
    Private Sub btnGetAuthors_Click(ByVal sender As System.Object, _
     ByVal e As System.EventArgs) Handles btnGetAuthors.Click
        Dim DS As DataSet
        Dim MyConnection As SqlConnection
        Dim MyDataAdapter As SqlDataAdapter
    
        'Erstellen Sie eine Verbindung zum SQL Server.
        MyConnection = New SqlConnection("server=(local);database=pubs;Trusted_Connection=yes")
    
        'Erstellen Sie einen DataAdapter, und geben Sie dann den Namen der gespeicherten Prozedur an.
        MyDataAdapter = New SqlDataAdapter("GetAuthorsByLastName", MyConnection)
    
        'Legen Sie den Befehltyp als gespeicherte Prozedur fest.
        MyDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure
    
        'Erstellen und und fügen Sie einen Parameter zur Parameterauflistung für die gespeicherte Prozedur hinzu.
        MyDataAdapter.SelectCommand.Parameters.Add(New SqlParameter("@au_lname", _
       SqlDbType.VarChar, 40))
    
        "Weisen Sie dem Parameter den Suchwert zu.
        MyDataAdapter.SelectCommand.Parameters("@au_lname").Value = Trim(txtLastName.Text)
    
        'Erstellen und fügen Sie der Parameterauflistung einen Ausgabeparameter hinzu. 
        MyDataAdapter.SelectCommand.Parameters.Add(New SqlParameter("@RowCount", _
        SqlDbType.Int, 4))
    
        'Legen Sie die Richtung für den Parameter fest. Dieser Parameter gibt die curückgegebenen Zeilen zurück.
        MyDataAdapter.SelectCommand.Parameters("@RowCount").Direction = ParameterDirection.Output
    
        DS = New DataSet() 'Erstellen Sie ein neues DataSet-Objekt für die Datensätze.
        MyDataAdapter.Fill (DS, "AuthorsByLastName") 'Füllen das DataSet mit den zurückgegebenen Zeilen.
    
        'Rufen Sie die Anzahl der zurückgegebenen Zeilen ab, und weisen Sie sei dem Steuerelement "Label" zu.
        'lblRowCount.Text = DS.Tables(0).Rows.Count().ToString() & " Zeilen gefunden!"
        lblRowCount.Text = MyDataAdapter.SelectCommand.Parameters(1).Wert & " Zeilen gefunden!"
    
        'Legen Sie die Datenquelle für das DataGrid-Steuerelement als DataSet fest, das die Zeilen enthält.
        Grdauthors.DataSource = DS.Tables("AuthorsByLastName").DefaultView
    
        'Binden Sie das DataSet an das DataGrid. 
        'HINWEIS: Wenn Sie diese Methode nicht aufrufen, wird das DataGrid-Steuerelement nicht angezeigt!
        Grdauthors.DataBind()
    
        MyDataAdapter.Dispose() 'Löschen des DataAdapter-Steuerelements.
        MyConnection.Close() 'Verbindung schließen.
    End Sub
    					
  5. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die ASPX-Seite, und klicken Sie danach auf Als Startseite festlegen.
  6. Speichern Sie das Projekt, und klicken Sie dann in Visual Studio .NET auf Start. Beachten Sie, dass das Projekt kompiliert und die Standardseite ausgeführt wird.
  7. Geben Sie den Nachnamen des Autors in das Textfeld ein. Klicken Sie dann auf Get Author. Beachten Sie, dass die gespeicherte Prozedur aufgerufen wird und die zurückgemeldeten Zeilen in das Objekt DataGrid eingetragen werden.

    Sie können beispielsweise eine SQL Server-Suchzeichenfolge wie G% verwenden, durch die alle Autoren zurückgegeben werden, deren Nachnamen mit dem Buchstaben "G" beginnen.

Problembehandlung

  • Falls Sie keine Verbindung zu der Datenbank herstellen können, stellen Sie sicher, dass die Verbindungszeichenfolge ConnectionString ordnungsgemäß auf den Server verweist, auf dem SQL Server ausgeführt wird.
  • Falls Sie zwar eine Verbindung zur Datenbank herstellen können, jedoch Probleme auftreten, wenn Sie versuchen, die gespeicherte Prozedur zu erstellen, stellen Sie sicher, dass Sie über die erforderlichen Berechtigungen zum Erstellen von gespeicherten Prozeduren in der Datenbank verfügen, zu der Sie eine Verbindung herstellen möchten.

Informationsquellen

Weitere Informationen finden Sie unter folgenden Themen in der Dokumentation des .NET Framework Software Development Kit (SDK):
Überblick über "ADO.NET"
http://msdn.microsoft.com/de-de/library/h43ks021.aspx

ADO.NET DataSet
http://msdn.microsoft.com/de-de/library/zb0sdh0b(VS.71).aspx

Verwenden von .NET-Datenanbietern für den Datenzugriff
http://msdn.microsoft.com/de-de/library/s7ee2dwt(vs.71).aspx
Weitere allgemeine Informationen zu ADO.NET und Visual Basic .NET finden Sie in den folgenden MSDN-Newsgroups:
microsoft.public.dotnet.framework.adonet

microsoft.public.dotnet.languages.vb
Weitere Informationen finden Sie in folgendem Buch:
Wyke, R. Allen, and Sultan Rehman and Brad Leupen. XML Programming (Core Reference). Microsoft Press, 2001.
Weitere Informationen finden Sie in folgenden Microsoft Trainings- & -Zertifizierungskursen:
2389 Programmieren mit ADO.NET
Weitere Informationen zur Vorgehensweise bei Verwendung von ASP (Microsoft Active Server Pages) finden Sie im folgenden Artikel der Microsoft Knowledge Base:
300488 Ausführen von gespeicherten SQL-Prozeduren von einer ASP-Seite aus

Eigenschaften

Artikel-ID: 306574 - Geändert am: Mittwoch, 24. Oktober 2012 - Version: 2.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 1.1
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
Keywords: 
kbhowtomaster kbsqlclient kbsystemdata KB306574
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com