Procedure: Een opgeslagen Procedure met parameters aanroept met behulp van ADO.NET en Visual C# .NET

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 310070 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Op deze pagina

Samenvatting

Er zijn verschillende manieren met ADO.NET naar een opgeslagen procedure aanroepen en retourwaarden terughalen en parameters, met inbegrip van terug:
  • Een DataSet -object gebruiken voor het verzamelen van de geretourneerde rijen en werken met deze rijen naast de retourwaarden en de parameters terug.
  • Een object DataReader gebruiken voor het verzamelen van de geretourneerde rijen, door middel van deze rijen en retourwaarden verzamelen en retourparameters te verplaatsen.
  • Gebruik de methode ExecuteScalar als resultaat de waarde van de eerste kolom van de eerste rij met de geretourneerde waarden en de retourparameters de resultaten. Dit is vooral handig met statistische functies.
  • Gebruik de methode ExecuteNonQuery als resultaat alleen de parameters van de afzender en de retourwaarden. Alle geretourneerde rijen worden verwijderd. Dit is vooral handig voor het uitvoeren van actiequery's.
In dit artikel wordt de laatste drie methoden getoond en zowel de SqlCommand als de OleDbCommand -objecten gebruikt. Zorg ervoor dat u alleen de code kopiëren voor de managed provider die u gebruikt. Als u niet zeker weet welke beheerde provider die u moet gebruiken, gaat u naar de volgende website van Microsoft Developer Network:
.NET-gegevensproviders
In elk van de voorbeelden in dit artikel worden de parameters worden toegevoegd aan de collectie Parameters van het Command -object. Wanneer u het object SqlCommand , u hebt de parameters niet toevoegt in een bepaalde volgorde, maar de parameters moeten de juiste naam hebben. Wanneer u het OleDbCommand -object gebruikt, moet u de parameters in de juiste volgorde toevoegen en u kunt de parameters met de naam niet gebruiken.

DataReader gebruiken om rijen en Parameters te retourneren

U kunt het object DataReader om terug te keren een alleen-lezen, alleen-voorwaarts gegevensstroom. De informatie in de DataReader kan afkomstig zijn uit een opgeslagen procedure. In dit voorbeeld wordt het object DataReader voor het uitvoeren van een opgeslagen procedure die een invoer- en uitvoerparameter is, en vervolgens de geretourneerde records doorloopt de return-parameters weergeven.
  1. De volgende opgeslagen procedure maken op de server waarop Microsoft SQL Server wordt uitgevoerd:
    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 on
    A.au_id=TA.au_id
    join titles as T
    on T.title_id=TA.title_id
    where A.au_id=@au_idIN
    set @numTitlesOUT = @@Rowcount
    return (5) 
    					
  2. Maak een nieuw Visual C# .NET Windows-toepassing-project.
  3. Gebruik de instructie met behulp van het systeem en de naamruimten System.Data zodat er geen declaraties in deze naamruimten verderop in uw code te kwalificeren. Deze code toevoegen aan de bovenkant van de codemodule voor het formulier. Zorg ervoor dat u kopieert u alleen de code voor de provider die u hebt gekozen.SQL Client
    using System.Data.SqlClient;
    					
    OLE DB-gegevensbron
    using System.Data.OleDb;
    					
  4. De code in de persoonlijke gebeurtenis Form_Load vervangen door de volgende 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-gegevensbron
    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. Wijzig de verbindingsreeks voor het Connection -object om te verwijzen naar de computer waarop SQL Server wordt uitgevoerd.
  6. De code wordt uitgevoerd. Merk op dat DataReader de records haalt en geeft als de parameterwaarden worden doorgegeven resultaat. U kunt de Read -methode van het object DataReader om de geretourneerde records te doorlopen.

    Het venster uitvoer wordt de titels van twee boeken, de geretourneerde waarde van 5 en de uitvoerparameter waarin het aantal records (2). U ziet dat u de DataReader in de code de waarden voor de parameter moet sluiten. Bovendien Houd er rekening mee dat u niet hoeft te bladeren door alle records voor een overzicht van de return-parameters als DataReader is gesloten.

Gebruik de methode ExecuteScalar van het Command-Object

De methode ExecuteScalar van het Command -object kunt u parameterwaarden ophalen. ExecuteScalar resulteert ook in de eerste kolom van de eerste rij van de opgeslagen procedure. Dit is vooral handig voor de statistische functies zoals in het volgende voorbeeld.
  1. De volgende opgeslagen procedure maken op de server waarop SQL Server wordt uitgevoerd:
    Create Procedure TestProcedure2
    (
      @au_idIN varchar (11)
    )
    As
    /* set nocount on */ 
    select count (T.title) 
    from authors as A join titleauthor as TA on
    A.au_id=TA.au_id
    join titles as T
    on T.title_id=TA.title_id
    where A.au_id=@au_idIN
    Return(5)
    					
  2. Maak een nieuw Visual C# .NET Windows-toepassing-project.
  3. Gebruik de instructie met behulp van het systeem en de naamruimten System.Data zodat er geen declaraties in deze naamruimten verderop in uw code te kwalificeren. Deze code toevoegen aan de bovenkant van de codemodule voor het formulier. Zorg ervoor dat u alleen de code voor de provider die u hebt gekozen.SQL Client
    using System.Data.SqlClient;
    					
    OLE DB-gegevensbron
    using System.Data.OleDb;
    					
  4. De volgende code toevoegen aan de gebeurtenis Form_Load :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-gegevensbron
    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. Wijzig de verbindingsreeks voor het Connection -object om te verwijzen naar de computer waarop SQL Server wordt uitgevoerd.
  6. De code wordt uitgevoerd. U ziet dat de methode ExecuteScalar van het Command -object geeft als de parameters resultaat. ExecuteScalar retourneert ook de waarde van kolom 1, rij 1 van de geretourneerde rijenset. De waarde van intCount is dus het resultaat van de functie count van de opgeslagen procedure.

Gebruik de methode ExecuteNonQuery van het Command-Object

In dit voorbeeld wordt de methode ExecuteNonQuery gebruikt de query uit te voeren en terug te keren de parameterwaarden worden doorgegeven. ExecuteNonQuery geeft ook het aantal records dat wordt beïnvloed als de query wordt uitgevoerd. Echter retourneert ExecuteNonQuery rijen of kolommen van de opgeslagen procedure.

De methode ExecuteNonQuery is vooral handig wanneer u INSERT, UPDATE of DELETE-instructies gebruiken als u alleen maar te weten hoeveel rijen zijn gewijzigd. In een opgeslagen procedure, waarbij u alleen een SELECT-instructie gebruikt, ontvangt u -1 omdat geen rijen worden beïnvloed door de query.
  1. De volgende opgeslagen procedure maken op de computer waarop SQL Server wordt uitgevoerd:
    Create Procedure TestProcedure3
    (
      @au_idIN varchar (11),
      @au_fnam varchar (30)
    )
    
    As
    /* set nocount on */ 
    Update authors set au_fname = @au_fnam
    where au_id = @au_idin	
    return (5)
    					
  2. Maak een nieuw Visual C# .NET Windows-toepassing-project.
  3. Gebruik de instructie met behulp van het systeem en de naamruimten System.Data zodat er geen declaraties in deze naamruimten verderop in uw code te kwalificeren. Deze code toevoegen aan de bovenkant van de codemodule voor het formulier. Zorg ervoor dat u alleen de code voor de provider die u hebt gekozen.SQL Client
    using System.Data.SqlClient;
    					
    OLE DB-gegevensbron
    using System.Data.OleDb;
    					
  4. De code hieronder de particuliere Form1_Load gebeurtenis in de codemodule voor Form1 vervangen door de volgende 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-gegevensbron
    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. Wijzig de verbindingsreeks voor het Connection -object om te verwijzen naar de computer waarop SQL Server wordt uitgevoerd.
  6. De code wordt uitgevoerd. Het venster uitvoer geeft het aantal rijen (intRowAffect) en de waarde van de geretourneerde parameter.

Referenties

Voor meer informatie gaat u naar de volgende MSDN-websites:
Inleiding tot de .NET Framework-klassenbibliotheek

Gegevens op te halen met behulp van de DataReader

Eigenschappen

Artikel ID: 310070 - Laatste beoordeling: dinsdag 29 oktober 2013 - Wijziging: 3.0
De informatie in dit artikel is van toepassing op:
  • Microsoft ADO.NET 1.1
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
Trefwoorden: 
kbhowtomaster kbsqlclient kbstoredproc kbsystemdata kbmt KB310070 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door middel van automatische vertalingssoftware van Microsoft en is mogelijk nabewerkt door de Microsoft Community via CTF-technologie (Community Translation Framework) of door een menselijke vertaler. Microsoft biedt zowel automatisch vertaalde, door mensen vertaalde en door de community nabewerkte artikelen aan, zodat er in meerdere talen toegang is tot alle artikelen in onze Knowledge Base. Een vertaald of bewerkt artikel kan fouten bevatten in vocabulaire, syntaxis of grammatica.. Microsoft is niet verantwoordelijk voor eventuele onjuistheden, fouten of schade ten gevolge van een foute vertaling van de inhoud van een bericht of het gebruik van deze vertaalde berichten door onze klanten.
De Engelstalige versie van dit artikel is de volgende: 310070

Geef ons feedback

 

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