COMMENT FAIRE : Créer et utiliser un DataSet typé à l'aide de Visual C# .NET

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

Sommaire

Résumé

Cet article vous explique comment créer et utiliser un DataSet typé dans une petite application Web. Les DataSets typés, qui héritent de la classe DataSet, créent des membres de première classe d'un DataSet de DataTables et de DataColumns, ce qui génère de nombreux avantages liés à l'utilisation d'un typage fort.

Conditions requises

Les éléments suivants décrivent le matériel recommandé ainsi que les logiciels, l'infrastructure réseau, les compétences, les connaissances et les Service Packs dont vous devez disposer pour suivre ces étapes :
  • Microsoft SQL Server 6.5 (ou version ultérieure) avec base de données Les Comptoirs
Compétences préalables requises :
  • Maîtrise générale de Microsoft SQL Server
  • Maîtrise générale de Microsoft Visual Studio .NET
  • Maîtrise générale de Microsoft ADO.NET
  • Maîtrise générale de Microsoft .NET Web Controls

DataSets typés

Suivez ces étapes pour créer une petite application Web à l'aide de Visual Studio .NET. L'application Web utilise un DataSet typé pour afficher les résultats d'une requête SQL improvisée dans la base de données Les Comptoirs.
  1. Démarrez Visual Studio .NET.
  2. Créez un nouveau projet d'application Web nommé TDS dans Visual C# .NET.
  3. Assurez-vous que l'Explorateur de solutions est affiché. Dans le cas contraire, appuyez sur CTRL+ALT+L.
  4. Assurez-vous que le fichier WebForm1.aspx est ouvert dans la fenêtre Éditeur. Si le fichier n'est pas ouvert, double-cliquez sur WebForm1.aspx dans l'Explorateur de solutions pour ouvrir le fichier.
  5. Sous la fenêtre Éditeur, cliquez sur Design pour basculer en mode Design.
  6. Pour ouvrir la boîte à outils, appuyez sur CTRL+ALT+X. Dans la boîte à outils, cliquez sur Web Forms. Sélectionnez et faites glisser les éléments suivants vers l'angle supérieur gauche de la page : deux lignes de chaque étiquette suivie d'une zone de texte (positionnée à droite de chaque étiquette). Au-dessous de ces éléments, ajoutez un DataGrid de la même façon.
  7. Cliquez sur l'étiquette supérieure. Appuyez sur F4 pour afficher la fenêtre des propriétés. Remplacez la propriété Text par Product. Cliquez sur l'autre étiquette, puis remplacez la propriété Text par Category.
  8. Pour ajouter un nouveau DataSet au projet, appuyez sur CTRL+MAJ+A, puis cliquez sur DataSet dans la liste de modèles. Nommez le DataSet comme suit : dsProducts.xsd. Notez que le fichier est en réalité un schéma XML. Cliquez sur OK. Une page jaune pâle figure à présent dans la fenêtre Éditeur.
  9. Pour créer un DataSet typé, appuyez sur CTRL+ALT+S pour ouvrir l'Explorateur de serveurs.
  10. Cliquez sur Serveurs, sur nom_ordinateur, sur SQLServers, sur nom_serveur, sur Comptoirs, puis sur Vues.
  11. Sélectionnez la vue SQL Server Comptoirs Liste alphabétique des produits, puis faites glisser la vue vers la page DataSet.de couleur jaune pâle. Une représentation visuelle du jeu de résultats qui est généré par la vue s'affiche dans la page. Pour consulter le schéma XML réel pour le fichier de schéma, cliquez sur le bouton XML sous la fenêtre Éditeur.
  12. Un schéma basé sur un objet SQL Server existe désormais. Pour créer et remplir un DataSet typé, vous devez d'abord générer la classe qui mappe sur le schéma. Cliquez avec le bouton droit sur la vue Design, puis assurez-vous que l'option Générer le Dataset est sélectionnée. Si cette option n'est pas sélectionnée, sélectionnez-la. Appuyez sur CTRL+S pour enregistrer le schéma et générer la classe.
  13. Pour afficher la nouvelle classe de DataSet typé, cliquez sur Afficher tous les fichiers dans l'Explorateur de solutions.
  14. Développez l'arborescence en regard de dsProducts.xsd. Vous voyez un fichier dsProducts.vb qui contient la nouvelle classe qui mappe sur le schéma. Vous voyez également un fichier dsProducts.xsx qui est utilisé pour effectuer le suivi des modifications apportées aux fichiers.
  15. Pour écrire le code permettant d'afficher le DataSet typé, double-cliquez directement sur le formulaire Web (et non pas sur un contrôle Web). Le codebehind Web Form apparaît, et le point d'insertion est à l'intérieur de l'événement Page_Load.
  16. Pour inclure les classes qui résident dans l'espace de noms System.Data.SqlClient, ajoutez l'instruction using suivante dans la partie supérieure du codebehind :
    using System.Data.SqlClient;
    					
    REMARQUE Les autres espaces de noms dont vous devez disposer pour cette petite application Web sont automatiquement référencés dans le projet lorsque vous créez une application Web dans Visual Studio .NET.

  17. Dans la procédure d'événement Page_Load, créez un objet Connexion en transmettant la chaîne de connexion au constructeur par défaut de la classe SqlConnection :
    SqlConnection cn = new SqlConnection("server=myserver;uid=myuid;pwd=mypassword;database=northwind");
    					
  18. Créez un objet SqlCommand qui est ensuite transmis à l'objet SqlDataAdapter. Transmettez une instruction SQL improvisée et le nouvel objet Connexion au constructeur SqlCommand. Le premier définit la propriété CommandText du nouvel objet SqlCommand. Vous pouvez également transmettre le nom d'une procédure stockée.
    SqlCommand cmd = new SqlCommand("select * from [Alphabetical list of products]", cn);
    					
  19. Créez une instance de l'objet SqlDataAdapter, en transmettant le nouvel objet SqlCommand au constructeur :
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    					
  20. Vous créez à présent les objets requis pour la connexion à la base de données et le renvoi de données. Voici le code pour le DataSet typé. Notez qu'une instance de la classe dsProducts est créée : Il s'agit de la classe qui mappe sur le schéma dsProducts et hérite de la classe DataSet, et non la classe DataSet générique elle-même.
    dsProducts tds = new dsProducts();
    					
  21. Appelez la méthode Fill de SqlDataAdapter, en transmettant l'objet DataSet typé et la propriété DataTable TableName typée du DataSet :
    da.Fill(tds, tds.Tables[0].TableName);
    					
  22. Pour définir la propriété Text des contrôles de zone de texte sur les colonnes fortement typées dans la propriété DataTable du DataSet, utilisez le format suivant :
    dsProducts.DataTableName[RowIndex].ColumnName
    						
    Pour cet exemple d'application, le RowIndex est codé en dur sur 5 :
    TextBox1.Text = tds.Alphabetical_list_of_products[5].ProductName;
    TextBox2.Text = tds.Alphabetical_list_of_products[5].CategoryName; 
    						
    Étant donné que la collection Rows est basée sur zéro, lors du chargement de page, notez que les contrôles de zone de texte affichent les noms de produit et de catégorie de l'élément sur la sixième ligne du DataGrid.
  23. Pour afficher tous les résultats du DataGrid, définissez la propriété DataSource du DataGrid sur le nouveau DataSet typé et appelez DataBind () :
    DataGrid1.DataSource = tds;
    DataGrid1.DataBind();
    					

Code complet (WebForm1.aspx)

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="TDS.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
	<title>WebForm1</title>
	<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
	<meta name="CODE_LANGUAGE" Content="C#">
	<meta name="vs_defaultClientScript" content="JavaScript">
	<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
	<form id="Form1" method="post" runat="server">
		<asp:Label id="Label1"  runat="server" >Label</asp:Label>
		<asp:DataGrid id="DataGrid1"  runat="server" ></asp:DataGrid>
		<asp:TextBox id="TextBox2"  runat="server"></asp:TextBox>
		<asp:TextBox id="TextBox1"  runat="server"></asp:TextBox>
		<asp:Label id="Label2"  runat="server" >Label</asp:Label>
	</form>
</body>
</HTML>
				

Code complet (WebForm1.aspx.cs)

using System.Data.SqlClient;

namespace TDS
{
  /// <summary>
  /// Summary description for WebForm1.
  /// </summary>
  public class WebForm1 : System.Web.UI.Page
  {
    protected System.Web.UI.WebControls.Label Label1;
    protected System.Web.UI.WebControls.Label Label2;
    protected System.Web.UI.WebControls.TextBox TextBox1;
    protected System.Web.UI.WebControls.TextBox TextBox2;
    protected System.Web.UI.WebControls.DataGrid DataGrid1;
	
    private void Page_Load(object sender, System.EventArgs e) 
    {
	SqlConnection cn = new SqlConnection("server=localhost;uid=sa;pwd=abcd;database=northwind");
	SqlCommand cmd = new SqlCommand("select * from [Alphabetical list of products]", cn);
	SqlDataAdapter da = new SqlDataAdapter(cmd);
	dsProducts tds = new dsProducts();

	da.Fill(tds, tds.Tables[0].TableName);
	TextBox1.Text = tds.Alphabetical_list_of_products[5].ProductName;
	TextBox2.Text = tds.Alphabetical_list_of_products[5].CategoryName; 

         DataGrid1.DataSource = tds;
	DataGrid1.DataBind();

    }

    #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
	// 
	// CODEGEN: This call is required by the ASP.NET Web Form Designer.
	// 
	InitializeComponent();
	base.OnInit(e);
    }
		
    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {    
	this.TextBox1.TextChanged += new System.EventHandler(this.TextBox1_TextChanged);
	this.Load += new System.EventHandler(this.Page_Load);

    }
    #endregion
  }
}

				

Vérification

Appuyez sur F5 pour exécuter l'application Web. Le navigateur affiche « Uncle Bob's Organic Dried Pears » dans la zone de texte Product et « Produce » dans la zone de texte Category. Un DataGrid rempli à l'aide des informations produit apparaît sous les zones de texte.

Dépannage

  • Les DataSets génériques ne requièrent pas que vous transmettiez un TableName lors de l'appel de la méthode Fill. Toutefois, les DataSets typés requièrent cela, même si vous accédez à la collection Table du DataSet par les index et non par le TableName. Si vous ne transmettez pas le TableName du DataSet typé, une erreur « There is no Row at Position 0 » est générée pendant l'exécution. Ce besoin de DataSets typés signifie également que vous ne pouvez pas créer votre propre TableName mais que vous devez transmettre celui qui est référencé dans la classe DataSet, laquelle est accédée comme dans le code précédent.
  • Toutes les modifications manuelles que vous apportez au schéma généré par Visual Studio .NET sont remplacées si vous modifiez l'objet de base de données utilisé initialement pour générer le schéma et la classe du DataSet typé et le déplacer dans la vue Design du schéma. Il est généralement préférable d'apporter les modifications requises au niveau de Microsoft SQL Server et de générer un nouveau DataSet typé que de modifier le schéma résultant.

Références

Pour plus d'informations sur la façon d'utiliser un DataSet typé, consultez le site Web de Microsoft à l'adresse suivante  (en anglais) :
http://msdn2.microsoft.com/en-us/library/esbykkzb(vs.71).aspx


Propriétés

Numéro d'article: 320714 - Dernière mise à jour: mercredi 13 juin 2007 - Version: 2.1
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 Visual C# .NET 2002 Initiation
  • Microsoft Visual C# .NET 2003 Initiation
Mots-clés : 
kbhowtomaster KB320714
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