Comment : Appeler une procédure stockée paramétrable à l'aide de ADO.NET et Visual c#.NET

Traductions disponibles Traductions disponibles
Numéro d'article: 310070 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Résumé

Il existe plusieurs manières d'utiliser ADO.NET pour appeler une procédure stockée et pour obtenir les valeurs de retour arrière et retourner des paramètres, y compris :
  • Utilisez un objet DataSet pour rassembler les lignes renvoyées et travailler avec ces lignes en plus des valeurs de retour et les paramètres de retour.
  • Utiliser un objet DataReader pour rassembler les lignes renvoyées, pour passer à travers ces lignes, puis collecte les valeurs de retour et des paramètres de retour.
  • Utilisez la méthode ExecuteScalar pour renvoyer la valeur de la première colonne de la première ligne de résultats avec les valeurs de retour et les paramètres de retour. Ceci est particulièrement utile avec les fonctions d'agrégation.
  • Utilisez la méthode ExecuteNonQuery pour renvoyer uniquement les paramètres de retour et les valeurs de retour. Toutes les lignes retournés sont ignorés. Ceci est particulièrement utile pour l'exécution de requêtes action.
Cet article illustre les trois dernières méthodes et utilise des objets OleDbCommand et SqlCommand . Assurez-vous que vous copiez uniquement le code pour le fournisseur managé que vous utilisez. Si vous n'êtes pas sûr de savoir quel fournisseur managé, vous devez utiliser, visitez le site Web Microsoft Developer Network suivant :
.NET Framework
Dans chacun des exemples dans cet article, les paramètres sont ajoutés à la collection Parameters de l'objet Command . Lorsque vous utilisez l'objet SqlCommand , ne pas avoir ajouter les paramètres dans un ordre particulier, mais les paramètres doivent avoir le nom correct. Lorsque vous utilisez l'objet OleDbCommand , vous devez ajouter les paramètres dans l'ordre correct, et vous ne pouvez pas utiliser les paramètres par nom.

Utiliser l'objet DataReader pour renvoyer les lignes et les paramètres

Vous pouvez utiliser l'objet DataReader pour renvoyer un flux de données en lecture seule et avant uniquement. Les informations qui contient l' objet DataReader peuvent provenir d'une procédure stockée. Cet exemple utilise l'objet DataReader pour exécuter une procédure stockée qui possède une entrée et un paramètre de sortie et puis parcourt les enregistrements renvoyés pour afficher les paramètres de retour.
  1. Créez la procédure stockée suivante sur le serveur qui exécute Microsoft SQL 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 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. Créer un nouveau projet Visual c#.Projet d'Application de Windows NET.
  3. Utilisez l'instruction using sur les espaces de noms System.Data et le système de sorte que vous n'avez pas à qualifier des déclarations sur ces espaces ultérieurement dans votre code. Ajoutez ce code en haut du module de code de formulaire. Veillez à copier uniquement le code pour le fournisseur que vous avez choisi.SQL Client
    using System.Data.SqlClient;
    					
    Fournisseur de données DB OLE
    using System.Data.OleDb;
    					
  4. Remplacez le code dans l'événement Form_Load privé par le code suivant :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);
    					
    Fournisseur de données DB OLE
    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. Modifiez la chaîne de connexion pour l'objet de connexion pointer vers l'ordinateur qui exécute SQL Server.
  6. Exécutez le code. Notez que le DataReader récupère les enregistrements et ensuite renvoie les valeurs de paramètre. Vous pouvez utiliser la méthode Read de l'objet DataReader pour faire défiler les enregistrements renvoyés.

    La fenêtre Sortie affiche les titres de deux livres, la valeur de retour de 5 et le paramètre de sortie, qui contient le nombre d'enregistrements (2). Notez que vous devez fermer le DataReader dans le code pour afficher les valeurs de paramètre. En outre, notez que vous n'avez pas pour vous déplacer dans tous les enregistrements pour afficher les paramètres de retour si l' objet DataReader est fermé.

Utilisez la méthode ExecuteScalar de l'objet Command

Vous pouvez utiliser la méthode ExecuteScalar de l'objet Command pour récupérer des valeurs de paramètre. En outre, ExecuteScalar retourne la première colonne de la première ligne de la procédure stockée. Ceci est particulièrement utile pour les fonctions de regroupement comme dans l'exemple suivant.
  1. Créez la procédure stockée suivante sur le serveur qui exécute SQL Server :
    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. Créer un nouveau projet Visual c#.Projet d'Application de Windows NET.
  3. Utilisez l'instruction using sur les espaces de noms System.Data et le système de sorte que vous n'avez pas à qualifier des déclarations sur ces espaces ultérieurement dans votre code. Ajoutez ce code en haut du module de code de formulaire. Assurez-vous que vous copiez uniquement le code pour le fournisseur que vous avez choisi.SQL Client
    using System.Data.SqlClient;
    					
    Fournisseur de données DB OLE
    using System.Data.OleDb;
    					
  4. Ajoutez le code suivant à l'événement Form_Load :Client SQL
    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);
    					
    Fournisseur de données DB OLE
    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. Modifiez la chaîne de connexion pour l'objet de connexion pointer vers l'ordinateur qui exécute SQL Server.
  6. Exécutez le code. Notez que la méthode ExecuteScalar de l'objet Command renvoie les paramètres. ExecuteScalar renvoie également la valeur de la colonne 1, ligne 1 de l'ensemble de lignes renvoyé. Par conséquent, la valeur de intCount est le résultat de la fonction count de la procédure stockée.

Utilisez la méthode ExecuteNonQuery de l'objet Command

Cet exemple utilise la méthode ExecuteNonQuery pour exécuter la requête et renvoyer les valeurs de paramètre. ExecuteNonQuery renvoie également le nombre d'enregistrements qui sont affectées par la requête s'exécute. Toutefois, ExecuteNonQuery ne renvoie pas les lignes ou colonnes à partir de la procédure stockée.

La méthode ExecuteNonQuery est particulièrement utile lorsque vous utilisez des instructions INSERT, UPDATE ou DELETE si vous disposez uniquement de savoir combien de lignes est modifiés. Dans une procédure stockée dans laquelle vous utilisez uniquement une instruction SELECT, vous recevez -1, car aucune ligne n'est affectés par la requête.
  1. Créez la procédure stockée suivante sur l'ordinateur qui exécute SQL Server :
    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. Créer un nouveau projet Visual c#.Projet d'Application de Windows NET.
  3. Utilisez l'instruction using sur les espaces de noms System.Data et le système de sorte que vous n'avez pas à qualifier des déclarations sur ces espaces ultérieurement dans votre code. Ajoutez ce code en haut du module de code de formulaire. Assurez-vous que vous copiez uniquement le code pour le fournisseur que vous avez choisi.SQL Client
    using System.Data.SqlClient;
    					
    Fournisseur de données DB OLE
    using System.Data.OleDb;
    					
  4. Remplacez le code ci-dessous l'événement Form1_Load privée dans le module de code de Form1 par le code suivant :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);
    					
    Fournisseur de données DB OLE
    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. Modifiez la chaîne de connexion pour l'objet de connexion pointer vers l'ordinateur qui exécute SQL Server.
  6. Exécutez le code. La fenêtre Sortie affiche le nombre de lignes affectées (intRowAffect) et la valeur du paramètre de retour.

Références

Pour plus d'informations, reportez-vous aux sites Web MSDN suivants :
Introduction à la.NET Framework Class Library

Récupération de données à l'aide de DataReader

Propriétés

Numéro d'article: 310070 - Dernière mise à jour: mardi 12 juin 2012 - Version: 1.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft ADO.NET 1.1
  • Microsoft Visual C# .NET 2002 Initiation
  • Microsoft Visual C# .NET 2003 Initiation
Mots-clés : 
kbhowtomaster kbsqlclient kbstoredproc kbsystemdata kbmt KB310070 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 310070
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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