Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

Gewusst wie: Aufrufen eine parametrisierte gespeicherte Prozedur mit ADO.NET und Visual c#.NET

Dieser Artikel wurde zuvor veröffentlicht unter D310070
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 310070
Für eine Microsoft Visual Basic.NET-Version dieses Artikels, finden Sie unter 308049.
Für Microsoft Visual C++.NET-Version dieses Artikels, finden Sie unter 310071.
Für Microsoft Visual j#.NET-Version dieses Artikels, finden Sie unter 320627.

Dieser Artikel bezieht sich auf der folgenden Microsoft.NET Framework-Klassenbibliothek:
  • System.Data.SqlClient
  • System.Data.OleDb

IN DIESER AUFGABE

Zusammenfassung
Es gibt mehrere Möglichkeiten zum Verwenden von ADO.NET eine gespeicherte Prozedur aufgerufen und wieder Rückgabewerte und-Parameter, einschließlich:
  • Verwenden Sie ein DataSet -Objekt, um die zurückgegebenen Zeilen zu sammeln und diese Zeilen zusätzlich zu den Rückgabewerten und-Parametern arbeiten.
  • Verwenden Sie ein DataReader -Objekt, um die zurückgegebenen Zeilen durch diese Zeilen und Gather Rückgabewerten und-Parametern verschieben zu sammeln.
  • Verwenden Sie die ExecuteScalar -Methode, um den Wert aus der ersten Spalte der ersten Zeile der Ergebnisse, mit den Rückgabewerten und-Parametern zurückzugeben. Dies eignet sich am besten mit Aggregatfunktionen.
  • Verwenden Sie die ExecuteNonQuery -Methode, um nur die Rückgabeparameter und Rückgabewerte zurückzugeben. Alle zurückgegebenen Zeilen werden verworfen. Dies ist besonders hilfreich für die Ausführung von Aktionsabfragen.
Dieser Artikel beschreibt die letzten drei Methoden und SqlCommand und OleDbCommand -Objekte verwendet. Stellen Sie sicher, dass Sie nur den Code für den verwalteten Provider kopieren, den Sie verwenden. Wenn Sie nicht sicher welchen verwalteten Provider Sie verwenden sollten, finden Sie auf der folgenden Website von Microsoft Developer Network:In allen Beispielen in diesem Artikel werden die Parameter der Parameterauflistung des Befehlsobjekts hinzugefügt. Wenn Sie das SqlCommand -Objekt verwenden, Sie haben nicht die Parameter in einer bestimmten Reihenfolge hinzufügen, aber die Parameter müssen den korrekten Namen aufweisen. Wenn Sie das OleDbCommand -Objekt verwenden, können nicht müssen Sie die Parameter in der richtigen Reihenfolge, und Sie die Parameter nach Namen.

back to the top

Verwenden von DataReader zum Zurückgeben von Zeilen und Parametern

Das DataReader -Objekt können Sie einen schreibgeschützten, vorwärtsgerichteten Datenstrom zurückgeben. Die DataReader enthaltenen Informationen kann von einer gespeicherten Prozedur stammen. Dieses Beispiel verwendet das DataReader -Objekt, um eine gespeicherte Prozedur auszuführen, die einen Eingabe- und einen Ausgabeparameter aufweist und durchläuft dann die zurückgegebenen Datensätze, um die Rückgabeparameter anzuzeigen.
  1. Erstellen Sie die folgende gespeicherte Prozedur auf dem Microsoft SQL Server-Server:
    Create Procedure TestProcedure(  @au_idIN varchar (11),  @numTitlesOUT Integer OUTPUT)AS select A.au_fname, A.au_lname, T.title from authors as A join titleauthor as TA onA.au_id=TA.au_idjoin titles as Ton T.title_id=TA.title_idwhere A.au_id=@au_idINset @numTitlesOUT = @@Rowcountreturn (5) 					
  2. Erstellen Sie ein neues Visual c#.NET Windows-Anwendungsprojekt.
  3. Verwenden Sie die using -Anweisung auf dem System und den Namespaces System.Data , so dass Sie keine Deklarationen in diesen Namespaces später im Code vornehmen müssen. Fügen Sie diesen Code am Anfang des Code-Modul des Formulars. Stellen Sie sicher, dass nur den Code für den Anbieter zu kopieren, die Sie ausgewählt haben.SQL-Client
    using System.Data.SqlClient;					
    OLE DB-Datenprovider
    using System.Data.OleDb;					
  4. Ersetzen Sie den Code im privaten Form_Load -Ereignis, mit dem folgenden Code:SQL-Client
    SqlConnection PubsConn = new SqlConnection ("Data Source=server;integrated " + "Security=sspi;initial catalog=pubs;");SqlCommand testCMD = new SqlCommand ("TestProcedure", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;SqlParameter RetVal = testCMD.Parameters.Add    ("RetVal", SqlDbType.Int);RetVal.Direction = ParameterDirection.ReturnValue;SqlParameter IdIn = testCMD.Parameters.Add   ("@au_idIN", SqlDbType.VarChar, 11);IdIn.Direction = ParameterDirection.Input;SqlParameter NumTitles = testCMD.Parameters.Add    ("@numtitlesout", SqlDbType.VarChar, 11);NumTitles.Direction = ParameterDirection.Output ;        IdIn.Value = "213-46-8915";PubsConn.Open();SqlDataReader myReader = testCMD.ExecuteReader();Console.WriteLine ("Book Titles for this Author:");while (myReader.Read())    {     Console.WriteLine ("{0}", myReader.GetString (2));   };myReader.Close() ;Console.WriteLine("Number of Rows: " + NumTitles.Value );Console.WriteLine("Return Value: " + RetVal.Value);					
    OLE DB-Datenprovider
    OleDbConnection PubsConn = new OleDbConnection    ("Provider=SQLOLEDB;Data Source=server;" +    "integrated Security=sspi;initial catalog=pubs;");OleDbCommand testCMD = new OleDbCommand    ("TestProcedure", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;OleDbParameter RetVal = testCMD.Parameters.Add    ("RetVal", OleDbType.Integer);RetVal.Direction = ParameterDirection.ReturnValue;OleDbParameter IdIn = testCMD.Parameters.Add    ("@au_idIN", OleDbType.VarChar, 11);IdIn.Direction = ParameterDirection.Input;OleDbParameter NumTitles = testCMD.Parameters.Add    ("@numtitlesout", OleDbType.VarChar, 11);NumTitles.Direction = ParameterDirection.Output;        IdIn.Value = "213-46-8915";PubsConn.Open();OleDbDataReader myReader = testCMD.ExecuteReader();Console.WriteLine ("Book Titles for this Author:");while (myReader.Read())    {     Console.WriteLine ("{0}", myReader.GetString (2));   };myReader.Close() ;Console.WriteLine("Number of Rows: " + NumTitles.Value );Console.WriteLine("Return Value: " + RetVal.Value);					
  5. Ändern Sie die Verbindungszeichenfolge für das Connection -Objekt auf dem Computer auf dem SQL Server ausgeführt wird.
  6. Führen Sie den Code. Beachten Sie, dass der DataReader die Datensätze abruft und dann die Parameterwerte zurückgibt. Die Read -Methode des DataReader -Objekts können die zurückgegebenen Datensätze durchlaufen.

    Das Ausgabefenster zeigt die Titel von zwei Büchern, den Rückgabewert 5 und den Output-Parameter enthält die Anzahl der Datensätze (2). Beachten Sie, dass Sie den DataReader im Code die Parameterwerte sehen schließen müssen. Beachten Sie außerdem, dass Sie nicht durch alle Datensätze zu verschieben, um die Rückgabeparameter zu sehen, wenn der DataReader geschlossen ist.
back to the top

Verwenden Sie die ExecuteScalar-Methode des Befehlsobjekts

Die ExecuteScalar -Methode des Command -Objekts können Sie Parameterwerte abzurufen. Außerdem gibt ExecuteScalar die erste Spalte der ersten Zeile der gespeicherten Prozedur zurück. Dies ist besonders hilfreich für die Aggregatfunktionen wie im folgenden Beispiel.
  1. Erstellen Sie die folgende gespeicherte Prozedur auf dem SQL Server-Server:
    Create Procedure TestProcedure2(  @au_idIN varchar (11))As/* set nocount on */ select count (T.title) from authors as A join titleauthor as TA onA.au_id=TA.au_idjoin titles as Ton T.title_id=TA.title_idwhere A.au_id=@au_idINReturn(5)					
  2. Erstellen Sie ein neues Visual c#.NET Windows-Anwendungsprojekt.
  3. Verwenden Sie die using -Anweisung auf dem System und den Namespaces System.Data , so dass Sie keine Deklarationen in diesen Namespaces später im Code vornehmen müssen. Fügen Sie diesen Code am Anfang des Code-Modul des Formulars. Stellen Sie sicher, dass Sie nur den Code für den Provider kopieren, den Sie ausgewählt haben.SQL-Client
    using System.Data.SqlClient;					
    OLE DB-Datenprovider
    using System.Data.OleDb;					
  4. Fügen Sie dem Form_Load -Ereignis den folgenden Code:SQL-Client
    string strCount;SqlConnection PubsConn = new SqlConnection    ("Data Source=server;integrated " +    "Security=sspi;initial catalog=pubs;");SqlCommand testCMD = new SqlCommand    ("TestProcedure2", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;SqlParameter RetVal = testCMD.Parameters.Add    ("RetVal", SqlDbType.Int);RetVal.Direction = ParameterDirection.ReturnValue;SqlParameter IdIn = testCMD.Parameters.Add    ("@au_idIN", SqlDbType.VarChar, 11);IdIn.Direction = ParameterDirection.Input;        IdIn.Value = "213-46-8915";PubsConn.Open();strCount =testCMD.ExecuteScalar ().ToString() ;Console.WriteLine("Number of Rows: " + strCount );Console.WriteLine("Return Value: " + RetVal.Value);					
    OLE DB-Datenprovider
    string strCount;OleDbConnection PubsConn = new OleDbConnection    ("Provider=SQLOLEDB;Data Source=server;" +    "integrated Security=sspi;initial catalog=pubs;");OleDbCommand testCMD = new OleDbCommand    ("TestProcedure2", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;OleDbParameter RetVal = testCMD.Parameters.Add    ("RetVal", OleDbType.Integer);RetVal.Direction = ParameterDirection.ReturnValue;OleDbParameter IdIn = testCMD.Parameters.Add    ("@au_idIN", OleDbType.VarChar, 11);IdIn.Direction = ParameterDirection.Input;IdIn.Value = "213-46-8915";PubsConn.Open();strCount = testCMD.ExecuteScalar().ToString() ;Console.WriteLine("Number of Rows: " + strCount);Console.WriteLine("Return Value: " + RetVal.Value);					
  5. Ändern Sie die Verbindungszeichenfolge für das Connection -Objekt auf dem Computer auf dem SQL Server ausgeführt wird.
  6. Führen Sie den Code. Beachten Sie, dass die ExecuteScalar -Methode des Command -Objekts die Parameter zurückgibt. ExecuteScalar gibt außerdem den Wert der Spalte 1, Zeile 1 des zurückgegebenen Rowsets zurück. Daher ist der Wert von IntCount das Ergebnis der Zählfunktion aus der gespeicherten Prozedur.
back to the top

Verwenden Sie die ExecuteNonQuery-Methode des Befehlsobjekts

Dieses Beispiel verwendet die ExecuteNonQuery -Methode, um die Abfrage auszuführen und die Parameterwerte zurückzugeben. ExecuteNonQuery gibt außerdem die Anzahl der Datensätze, die nach der Ausführung der Abfrage betroffen sind. ExecuteNonQuery jedoch gibt zurück keine Zeilen oder Spalten von der gespeicherten Prozedur.

Die ExecuteNonQuery -Methode ist am nützlichsten, wenn Sie INSERT-, Update- oder DELETE-Anweisungen verwenden, wenn Sie nur wissen, wie viele Zeilen geändert werden. In einer gespeicherten Prozedur, in der Sie nur eine SELECT-Anweisung verwenden, erhalten Sie-1, weil keine Zeilen von der Abfrage betroffen sind.
  1. Erstellen Sie die folgende gespeicherte Prozedur auf dem Computer, auf der SQL Server ausgeführt wird:
    Create Procedure TestProcedure3(  @au_idIN varchar (11),  @au_fnam varchar (30))As/* set nocount on */ Update authors set au_fname = @au_fnamwhere au_id = @au_idin	return (5)					
  2. Erstellen Sie ein neues Visual c#.NET Windows-Anwendungsprojekt.
  3. Verwenden Sie die using -Anweisung auf dem System und den Namespaces System.Data , so dass Sie keine Deklarationen in diesen Namespaces später im Code vornehmen müssen. Fügen Sie diesen Code am Anfang des Code-Modul des Formulars. Stellen Sie sicher, dass Sie nur den Code für den Provider kopieren, den Sie ausgewählt haben.SQL-Client
    using System.Data.SqlClient;					
    OLE DB-Datenprovider
    using System.Data.OleDb;					
  4. Ersetzen Sie den Code unter dem privaten Form1_Load -Ereignis im Form1-Codemodul durch den folgenden Code:SQL-Client
    string strRowAffect;SqlConnection PubsConn = new SqlConnection    ("Data Source=server;integrated Security=sspi;" +    "initial catalog=pubs;");SqlCommand testCMD = new SqlCommand    ("TestProcedure3", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;SqlParameter RetVal = testCMD.Parameters.Add    ("RetVal", SqlDbType.Int);RetVal.Direction = ParameterDirection.ReturnValue;SqlParameter IdIn = testCMD.Parameters.Add    ("@au_idIN", SqlDbType.VarChar, 11);IdIn.Direction = ParameterDirection.Input;SqlParameter FnameIn = testCMD.Parameters.Add    ("@au_fnam", SqlDbType.VarChar, 30);FnameIn.Direction = ParameterDirection.Input;IdIn.Value = "213-46-8915";FnameIn.Value = "Marjorie";PubsConn.Open();strRowAffect =testCMD.ExecuteNonQuery ().ToString() ;Console.WriteLine("Number of Rows: " + strRowAffect );Console.WriteLine("Return Value: " + RetVal.Value);					
    OLE DB-Datenprovider
    int intRowAffected;OleDbConnection PubsConn = new OleDbConnection    ("Provider=SQLOLEDB;Data Source=server;" +    "integrated Security=sspi;initial catalog=pubs;");OleDbCommand testCMD = new OleDbCommand    ("TestProcedure3", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;OleDbParameter RetVal = testCMD.Parameters.Add    ("RetVal", OleDbType.Integer);RetVal.Direction = ParameterDirection.ReturnValue;OleDbParameter IdIn = testCMD.Parameters.Add    ("@au_idIN", OleDbType.VarChar, 11);IdIn.Direction = ParameterDirection.Input;OleDbParameter FnameIn = testCMD.Parameters.Add   ("@au_fname", OleDbType.VarChar, 30);FnameIn.Direction = ParameterDirection.Input;IdIn.Value = "213-46-8915";FnameIn.Value = "Marjorie";PubsConn.Open();intRowAffected = testCMD.ExecuteNonQuery();Console.WriteLine("Number of Rows affected: " + intRowAffected);Console.WriteLine(RetVal.Value);					
  5. Ändern Sie die Verbindungszeichenfolge für das Connection -Objekt auf dem Computer auf dem SQL Server ausgeführt wird.
  6. Führen Sie den Code. Das Ausgabefenster zeigt die Anzahl der betroffenen Zeilen (IntRowAffect) und der Wert des Rückgabeparameters.
back to the top
Informationsquellen
Weitere Informationen finden Sie auf der folgenden MSDN-Websites:back to the top

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 310070 – Letzte Überarbeitung: 06/12/2012 03:50:00 – Revision: 1.0

Microsoft ADO.NET 1.1, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# .NET 2003 Standard Edition

  • kbhowtomaster kbsqlclient kbstoredproc kbsystemdata kbmt KB310070 KbMtde
Feedback