DetailPage-MSS-KB

Base de connaissances

Numéro d'article: 320916 - Dernière mise à jour: samedi 27 octobre 2012 - Version: 4.0

 

Sommaire

Résumé

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

L'exemple de code dans cet article vérifie d'abord si la procédure stockée que vous allez créer existe dans la base de données Pubs , qui est inclus dans une installation standard de Microsoft SQL Server. Si la procédure stockée n'existe pas, le code crée une procédure stockée qui prend un paramètre pour effectuer une recherche basée sur le nom dans la table auteurs et renvoie les lignes correspondantes et le nombre de lignes retournées 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 :
  • Une zone de texte dans lequel l'utilisateur tape la condition de recherche.
  • Un contrôle DataGrid qui affiche les résultats de recherche.
  • Un contrôle Label qui affiche le nombre d'enregistrements renvoyés.
  • Un contrôle bouton qui appelle la procédure stockée lorsque vous cliquez sur le bouton.

Configuration requise

La liste suivante met en évidence le matériel recommandé, logiciel infrastructure réseau et les service packs sont requis :
  • Microsoft SQL Server version 7.0 ou version ultérieure
  • Visual Studio de Microsoft .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 rubriques suivantes :
  • ASP.NET
  • Procédures de SQL Server stockées

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

Dans cette section, vous créez un projet ASP.NET et créez l'interface utilisateur de base. Notez que ces procédures utilisent du code Microsoft Visual C# .NET. Pour créer le projet, procédez comme suit :
  1. Cliquez sur Démarrer, pointez sur programmes, pointez sur Microsoft Visual Studio .NETet cliquez sur Microsoft .NET de Visual Studio.
  2. Dans la page de démarrage de Visual Studio .NET, cliquez sur Nouveau projet.
  3. Dans la boîte de dialogue Nouveau projet , cliquez sur Projets Visual C# sous Types de projets, puis sur ASP.NET Web Application sous modèles.
  4. Dans la zone nom , tapez un nom pour votre application Web, puis sur OK.
  5. Ajoutez les contrôles de serveur suivants au formulaire Web et définissez les propriétés comme ils sont répertoriés dans la table :
    Réduire ce tableauAgrandir ce tableau
    ContrôlePropriété IDPropriété Text
    ÉtiquettelblLastNameTapez le nom de l'auteur :
    Zone de textetxtLastName%
    BoutonbtnGetAuthorsObtenir les auteurs
    ÉtiquettelblRowCount(Nombre de lignes)

  6. Faites glisser un contrôle serveur DataGrid de la boîte à outils vers le formulaire Web et définissez la propriété NameGrdAuthors.
  7. Avec le bouton droit de la grille, puis sur mise en forme automatique.
  8. Cliquez sur Professionnel 1 pour le modèle et cliquez sur OK.

Créer le GetAuthorsByLastName procédure stockée

Utilisez le code Transact-SQL suivant pour créer la procédure stockée GetAuthorsByLastName :
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 comprend 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 Authors . 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 objets tels que SqlDataReader et les objets de SqlDataAdapter . Vous pouvez utiliser SqlDataReader pour lire un flux avant uniquement de 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 mettre à jour une base de données SQL Server.

ADO.NET présente également l'objet DataSet , qui est une représentation résidente en mémoire de données qui fournit un modèle programmation relationnel cohérent quelle que soit la source de données. Le code de cette section utilise tous ces objets.
  1. Double-cliquez sur le formulaire Web.
  2. Ajoutez le code suivant (les directives using ) à la section de déclaration de votre formulaire Web qui s'affiche en haut de la fenêtre de Code :
    using System.Data;
    using System.Data.SqlClient;
    					
  3. Pour vous assurer que la procédure stockée existe et créer une nouvelle procédure stockée, utilisez un objet SqlCommand avec un objet SqlDataReader . Vous pouvez utiliser SqlCommand pour exécuter des commandes SQL sur la base de données. Puis appelez la méthode ExecuteReader de SqlCommand pour renvoyer SqlDataReaderqui contient les lignes correspondant à 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. Appelez la procédure stockée dans l'événement Click du bouton btnGetAuthors , puis utilisez l'objet SqlDataAdapter pour exécuter votre procédure stockée. Vous devez créer les paramètres de la procédure stockée et l'ajouter à la collection Parameters de l'objet SqlDataAdapter .

    Après l'événement Page_Load , ajoutez le code suivant :
    	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, avec le bouton droit de la page .aspx, puis cliquez sur Définir comme Page de démarrage.
  6. Enregistrez le projet et cliquez sur Démarrer dans .NET Visual Studio. Notez que le projet est compilé et que l'exécution de la page par défaut.
  7. Tapez le nom de l'auteur dans la zone de texte et cliquez sur Obtenir de l'auteur. Notez que la procédure stockée est appelée et que les lignes renvoyées complètent le DataGrid.

    Vous pouvez fournir des chaînes de recherche SQL Server-type tel que G %, qui retourne tous les auteurs par noms de famille 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 vers le serveur exécutant 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 appropriées pour 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 1.1
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2002 Initiation
  • Microsoft Visual C# .NET 2003 Initiation
Mots-clés : 
kbhowtomaster kbsqlclient kbstoredproc kbsystemdata kbmt 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.
Partager
Options de support supplémentaire
Forums du support Microsoft Community
Nous contacter directement
Trouver un partenaire Microsoft Certified Partner
Microsoft Store