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 :
- Cliquez sur Démarrer , pointez sur programmes , pointez sur Visual Studio .NET et puis cliquez sur Visual Studio .NET .
- Dans la page Visual Studio .NET démarrage, cliquez sur Nouveau projet .
- 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 .
- Dans la zone Nom , tapez un nom pour votre application Web, puis cliquez sur OK .
- 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ôle | ID, propriété | Text, propriété |
|---|
| étiquette | lblLastName | Tapez le nom de l'auteur : |
| zone de texte | txtLastName | % |
| bouton | btnGetAuthors | Obtenir des auteurs |
| étiquette | lblRowCount | (Nombre de lignes) |
- 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 .
- Cliquez avec le bouton droit sur la grille, puis cliquez sur Mise en forme automatique .
- 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.
- Double-cliquez sur le formulaire Web.
- 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;
- 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);
}
- 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.
}
- Dans l'Explorateur de solutions, cliquez avec le bouton droit sur la page .aspx, puis cliquez sur Définir comme page de démarrage .
- 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.
- 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.