Numéro d'article: 320916 - Dernière mise à jour: vendredi 5 décembre 2003 - Version: 3.3

Comment faire : appel SQL Server procédures stockées dans ASP.NET à l'aide de Visual C# .NET

Sommaire

Agrandir tout | Réduire tout

Résumé

Cet article explique comment utiliser ASP.NET et ADO.NET avec Visual C# .NET pour créer et d'appeler une base de données Microsoft SQL Server ou MSDE stockées procédure avec un paramètre d'entrée et un paramètre de sortie.

L'exemple de code dans cet article vérifie tout d'abord si la procédure stockée que vous allez créer existe dans la base de données Pubs , qui est inclu dans une installation de Microsoft SQL Server standard. Si la procédure stockée n'existe pas, le code crée une procédure stockée qui prend un paramètre pour rechercher la table authors en se basant sur le dernier nom et renvoie les lignes correspondantes et nombre de lignes qui sont renvoyés dans un paramètre de sortie.

Cet article explique également comment créer un formulaire Web qui fournit une interface utilisateur simple. Le formulaire Web contient les éléments suivants :
  • Zone de texte dans laquelle l'utilisateur tape la condition de recherche.
  • Un contrôle de grille de données qui affiche les résultats de recherche.
  • Un contrôle Label qui affiche le nombre d'a renvoyé d'enregistrements.
  • Contrôle bouton qui appelle la procédure stockée lorsque l'utilisateur clique sur le bouton.

Configuration requise

La liste suivante met en évidence le matériel recommandé, logiciel infrastructure réseau et service packs sont requis :
  • Microsoft SQL Server version 7.0 ou version ultérieure
  • Microsoft Visual Studio .NET
  • Microsoft Visual C# .NET
  • Autorisations pour créer la procédure stockée dans la base de données
Cet article suppose que vous êtes familiarisé avec les sujets suivants :
  • ASP.NET
  • Procédures stockée SQL Server

Créer un projet ASP.NET et ajouter des contrôles

Dans cette section, vous créez un projet ASP.NET et créer l'interface utilisateur de base. Notez que ces étapes utilisent le code Visual C# .NET. Pour créer le projet, procédez comme suit :
  1. Cliquez sur Démarrer , pointez sur programmes , pointez sur Visual Studio .NET et puis cliquez sur Visual Studio .NET .
  2. Dans la page Visual Studio .NET démarrage, cliquez sur Nouveau projet .
  3. Dans la boîte de dialogue Nouveau projet , cliquez sur projets Visual C# sous types de projet , puis cliquez sur Application Web ASP.NET sous modèles .
  4. Dans la zone Nom , tapez un nom pour votre application Web, puis cliquez sur OK .
  5. Ajoutez les contrôles de serveur suivants à l'écran Web et définir les propriétés, comme elles sont répertoriées dans le tableau :
    Réduire ce tableauAgrandir ce tableau
    ContrôleID, propriétéText, propriété
    étiquette lblLastNameTapez le nom de l'auteur :
    zone de texte txtLastName%
    bouton btnGetAuthorsObtenir des auteurs
    étiquette lblRowCount(Nombre de lignes)

  6. Faites glisser un contrôle de serveur DataGrid de la boîte à outils à l'écran Web et définir la propriété Name pour GrdAuthors .
  7. Cliquez avec le bouton droit sur la grille, puis cliquez sur Mise en forme automatique .
  8. Cliquez sur Professionnel 1 pour le jeu, puis cliquez sur OK .

Créer le GetAuthorsByLastName procédure stockée

Utilisez le code Transact-SQL suivant pour créer la procédure GetAuthorsByLastName stockée :
Use Pubs
Go
Create Procedure GetAuthorsByLastName (@au_lname varchar(40), @RowCount int output)  
as 

select * from authors where au_lname like @au_lname; 

/* @@ROWCOUNT returns the number of rows that are affected by the last statement. */ 
select @RowCount=@@ROWCOUNT
				
ce code inclut deux paramètres : @au_lname et @RowCount. Le paramètre @au_lname est un paramètre d'entrée qui obtient la chaîne de recherche pour effectuer une recherche « like » dans la table auteurs . Le paramètre @RowCount est un paramètre de sortie qui utilise la variable @@ROWCOUNT pour obtenir les lignes affectées.

Créer et exécuter la procédure stockée

Pour accéder aux bases de données SQL Server, vous devez importer l'espace de noms System.Data.SqlClient , qui fournit des nouveaux objets tels que le SqlDataReader et les objets SqlDataAdapter . Vous pouvez utiliser SqlDataReader lire un flux de type avant uniquement des lignes à partir d'une base de données SQL Server. DataAdapter représente un ensemble de commandes de données et une connexion de base de données que vous pouvez utiliser pour remplir l'objet DataSet et pour mettre à jour une base de données SQL Server.

ADO.NET introduit également l'objet DataSet , qui est une représentation résidant en mémoire de données qui fournit un modèle de programmation cohérent et relationnel quelle que soit la source de données. Le code dans cette section utilise tous ces objets.
  1. Double-cliquez sur le formulaire Web.
  2. Ajoutez le code suivant (les instructions à l'aide ) à la section de déclaration de votre formulaire Web qui s'affiche en haut de la fenêtre Code :
    using System.Data;
    using System.Data.SqlClient;
    					
  3. Pour vous assurer que la procédure stockée existe et pour créer une procédure stockée, utilisez un objet SqlCommand avec un objet SqlDataReader . Vous pouvez utiliser SqlCommand pour exécuter les commandes SQL sur la base de données. Puis appelez la méthode ExecuteReader de SqlCommand pour renvoyer SqlDataReader , qui contient les lignes correspondantes de votre requête.

    Ajoutez le code suivant dans l'événement Page_Load du formulaire Web :
    	private void Page_Load(object sender, System.EventArgs e)
    	{
    		// 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 (!IsPostBack)
    		{
    			//Create a connection to the SQL Server; modify the connection string for your environment
    			//SqlConnection MyConnection = new SqlConnection("server=(local);database=pubs;Trusted_Connection=yes");
    			SqlConnection MyConnection = new SqlConnection("server=(local);database=pubs;UID=myUser;PWD=myPassword;");
    
    			// Create a Command object, and then set the connection.
    			// The following SQL statements check whether a GetAuthorsByLastName  
    			// stored procedure already exists.
    			SqlCommand MyCommand = new SqlCommand("select * from sysobjects where id = object_id(N'GetAuthorsByLastName')" +
    			"  and OBJECTPROPERTY(id, N'IsProcedure') = 1", MyConnection);
    
    			// Set the command type that you will run.
    			MyCommand.CommandType = CommandType.Text;
    
    			// Open the connection.
    			MyCommand.Connection.Open();
    
    			// Run the SQL statement, and then get the returned rows to the DataReader.
    			SqlDataReader MyDataReader = MyCommand.ExecuteReader();
    
    			// If any rows are returned, the stored procedure that you are trying 
    			// to create already exists. Therefore, try to create the stored procedure
    			// only if it does not exist.
    			if(!MyDataReader.Read())
    			{
    				MyCommand.CommandText = "create procedure GetAuthorsByLastName" + 
    					" (@au_lname varchar(40), select * from authors where" +
    					" au_lname like @au_lname; select @RowCount=@@ROWCOUNT";
    				MyDataReader.Close();
    				MyCommand.ExecuteNonQuery();
    			}
    			else
    			{
    				MyDataReader.Close();
    			}
    
    			MyCommand.Dispose();  //Dispose of the Command object.
    			MyConnection.Close(); //Close the connection.
    		}
    
    		// Add the event handler to the Button_Click event.
    		this.btnGetAuthors.Click += new System.EventHandler(this.btnGetAuthors_Click);
    	}
    					
  4. Appeler la procédure stockée dans l'événement Click du bouton btnGetAuthors et utilisez l'objet SqlDataAdapter pour exécuter votre procédure stockée. Vous devez créer des paramètres de la procédure stockée et ajouter à la collection Parameters de l'objet SqlDataAdapter .

    Ajoutez le code suivant après l'événement Page_Load :
    	private void btnGetAuthors_Click(object sender, System.EventArgs e)
    	{
    		//Create a connection to the SQL Server; modify the connection string for your environment.
    		//SqlConnection MyConnection = new SqlConnection("server=(local);database=pubs;Trusted_Connection=yes");
    		SqlConnection MyConnection = new SqlConnection("server=(local);database=pubs;UID=myUser;PWD=myPassword;");
    
    		//Create a DataAdapter, and then provide the name of the stored procedure.
    		SqlDataAdapter MyDataAdapter = new SqlDataAdapter("GetAuthorsByLastName", MyConnection);
    
    		//Set the command type as StoredProcedure.
    		MyDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
    
    		//Create and add a parameter to Parameters collection for the stored procedure.
    		MyDataAdapter.SelectCommand.Parameters.Add(new SqlParameter("@au_lname", SqlDbType.VarChar, 40));
    
    		//Assign the search value to the parameter.
    		MyDataAdapter.SelectCommand.Parameters["@au_lname"].Value = (txtLastName.Text).Trim();
    
    		//Create and add an output parameter to the Parameters collection. 
    		MyDataAdapter.SelectCommand.Parameters.Add(new SqlParameter("@RowCount", SqlDbType.Int, 4));
    
    		//Set the direction for the parameter. This parameter returns the Rows that are returned.
    		MyDataAdapter.SelectCommand.Parameters["@RowCount"].Direction = ParameterDirection.Output;
    
    		//Create a new DataSet to hold the records.
    		DataSet DS = new DataSet();
    		
    		//Fill the DataSet with the rows that are returned.
    		MyDataAdapter.Fill(DS, "AuthorsByLastName");
    
    		//Get the number of rows returned, and assign it to the Label control.
    		//lblRowCount.Text = DS.Tables(0).Rows.Count().ToString() & " Rows Found!"
    		lblRowCount.Text = MyDataAdapter.SelectCommand.Parameters[1].Value + " Rows Found!";
    
    		//Set the data source for the DataGrid as the DataSet that holds the rows.
    		GrdAuthors.DataSource = DS.Tables["AuthorsByLastName"].DefaultView;
    
    		//NOTE: If you do not call this method, the DataGrid is not displayed!
    		GrdAuthors.DataBind();
    
    		MyDataAdapter.Dispose(); //Dispose the DataAdapter.
    		MyConnection.Close(); //Close the connection.
    	}
    					
  5. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur la page .aspx, puis cliquez sur Définir comme page de démarrage .
  6. Enregistrez le projet et puis cliquez sur Démarrer dans Visual Studio .NET. Notez que le projet est compilé et que la page par défaut s'exécute.
  7. Tapez le nom de l'auteur dans la zone de texte et puis cliquez sur obtenir un auteur . Notez que la procédure stockée est appelée et que les lignes renvoyées remplir la grille de données .

    Vous pouvez fournir des chaînes de recherche SQL Server-type comme numéro % , qui renvoie tous les auteurs en dernier noms qui commencent par la lettre « g ».

Résolution des problèmes

  • Si vous ne pouvez pas vous connecter à la base de données, assurez-vous que la ConnectionString pointe correctement au serveur qui exécute SQL Server.
  • Si vous pouvez vous connecter à la base de données, mais si vous rencontrez des problèmes lorsque vous essayez de créer la procédure stockée, assurez-vous que vous avez les autorisations correctes créer des procédures stockées dans la base de données auquel vous vous connectez.

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft ADO.NET 1.1
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2002 Initiation
  • Microsoft Visual C# .NET 2003 Initiation
Mots-clés : 
kbmt kbhowtomaster kbsqlclient kbstoredproc kbsystemdata KB320916 KbMtfr
Traduction automatiqueTraduction 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: 320916  (http://support.microsoft.com/kb/320916/en-us/ )
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.
 

Traductions disponibles