Comment : Créer et utiliser un DataSet typé à l’aide de Visual C# .NET

Résumé

Cet article vous montre comment créer et utiliser un DataSet typé dans une petite application Web. Des groupes de données, de typés qui héritent de la classe DataSet , de créer des membres de première classe des DataTables et des DataColumns, produisant les nombreux avantages liés à l’utilisation d’un typage fort un groupe de données.

Configuration requise

Les éléments suivants décrivent le matériel recommandé, logiciel, infrastructure réseau, compétences et connaissances et les service packs dont vous avez besoin pour effectuer ces étapes :
  • Microsoft SQL Server 6.5 (ou version ultérieure) avec la base de données Northwind
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

Groupes de données typés

Suivez ces étapes pour créer une petite application Web à l’aide de Visual Studio .NET. L’application Web utilise un groupe de données typé pour afficher les résultats d’une requête SQL improvisée dans la base de données Northwind.
  1. Démarrez Visual Studio .NET.
  2. Créer un nouveau projet d’Application Web nommé TDS dans Visual C# .NET.
  3. Assurez-vous que l’Explorateur de solutions est affiché. Si l’Explorateur de solutions n’est pas affichée, appuyez sur CTRL + ALT + L.
  4. Assurez-vous que le fichier WebForm1.aspx est ouvert dans la fenêtre de l’éditeur. Si le fichier n’est pas ouvert, double-cliquez sur WebForm1.aspx dans l’Explorateur de solutions pour ouvrir le fichier.
  5. Dans la fenêtre de l’éditeur, cliquez sur Création 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 à 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). Sous, ajoutez un contrôle DataGrid de la même manière.
  7. Cliquez sur l’étiquette supérieure. Appuyez sur F4 pour afficher la fenêtre Propriétés. Modifiez la propriété Text au produit. Cliquez sur l’autre étiquette, puis modifiez sa propriété Text à la catégorie.
  8. Pour ajouter un nouveau groupe de données au projet, appuyez sur CTRL + MAJ + A, puis cliquez sur groupe de données dans la liste des modèles. Nommez le groupe de données suivants : dsProducts.xsd. Notez que le fichier est en fait un schéma XML. Cliquez sur OK. Vous voyez maintenant une page jaune pâle figure dans la fenêtre de l’éditeur.
  9. Pour créer un groupe de donnéestypé, appuyez sur CTRL + ALT + S pour ouvrir l’Explorateur de serveurs.
  10. Cliquez sur serveurs, cliquez sur le nom de l’ordinateur, cliquez sur SQLServers, cliquez sur le nom du serveur, cliquez sur Northwind, puis cliquez sur vues.
  11. Sélectionnez la vue de SQL Server Northwind liste alphabétique des produitset puis faites glisser la vue vers la page de DataSet jaune pâle. Une représentation visuelle de l’ensemble de résultats qui est généré par la vue s’affiche sur la page. Pour afficher le code pour le fichier de schéma XML, cliquez sur le bouton XML sous la fenêtre Éditeur.
  12. Il existe un schéma basé sur un objet SQL Server maintenant. Pour créer et remplir le groupe de donnéestypé, vous devez d’abord générer la classe qui mappe sur le schéma. Avec le bouton droit de la vue de conception et assurez-vous que l’option Générer le groupe de données est sélectionnée. Si elle 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 groupe de données typée, 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 le nouveau mappage de classe du schéma. Vous voyez également un fichier dsProducts.xsx qui est utilisé pour le suivi des modifications apportées aux fichiers.
  15. Pour écrire du code pour afficher le groupe de donnéestypé, double-cliquez directement sur le formulaire Web (et non sur un contrôle Web). Le codebehind Web Form apparaît, et le point d’insertion se trouve à l’intérieur de l’événement Page_Load .
  16. Pour inclure les classes qui se trouvent dans l’espace de noms System.Data.SqlClient, ajoutez l’instruction using suivante en haut du codebehind :
    using System.Data.SqlClient;
    Remarque: les autres espaces de noms dont vous avez besoin 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 événementielle Page_Load , créez un objet connexion en transmettant la chaîne de connexion pour le 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. Passez 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 passer 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. Maintenant, vous créez les objets qui sont requises pour se connecter à la base de données et retourner des données. Voici le code pour le groupe de donnéestypé. Notez qu’une instance de la classe dsProducts est créée : la classe qui mappe sur le schéma dsProducts et hérite de la classe DataSet , pas la classe DataSet générique lui-même.
    dsProducts tds = new dsProducts();
  21. Appelez la méthode Fill de SqlDataAdapter, en transmettant l’objet de groupe de données typé et le groupe de donnéestypé propriété TableName de DataTable :
    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 typée DataSetdu DataTable, 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 de lignes est de base zéro, lors du charge de la page, notez que les contrôles de zone de texte affichent les noms de produit et la catégorie de l’élément de la sixième ligne du contrôle DataGrid.
  23. Pour afficher tous les résultats dans le contrôle DataGrid, la valeur de la propriété DataSource du contrôle DataGrid le nouveau DataSettypé et appelez DataBind():
    DataGrid1.DataSource = tds;DataGrid1.DataBind();

Exécuter du Code (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>

Exécuter du Code (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 Organic Dried Pears » dans la zone de texte de produit et le « Produit » dans la zone de texte catégorie . Un DataGrid rempli avec les informations produit apparaît sous les zones de texte.

Résolution des problèmes

  • Générique des groupes de données ne nécessitent pas que vous passez un TableName lorsque vous appelez la méthode Fill . Saisie de groupes de données, cependant, ont besoin, même si vous accédez à la collection Table du DataSetpar index plutôt que du TableName. Transmettez le typée DataSetde TableName lève une erreur « Il n’existe aucune ligne à la Position 0 » lors de l’exécution. Cette exigence de groupes de données typés également signifie que vous ne pouvez pas créer vos propres TableName , mais 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.
  • 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 les classe DataSet typée et faites-le glisser à nouveau en mode de création du schéma. Il est généralement préférable d’apporter les modifications que vous devrez au niveau de Microsoft SQL Server et de générer un DataSet typé nouvelle à to modifier le schéma résultant.

Références

Pour plus d’informations sur l’utilisation avec un groupe de donnéestypé, consultez le site Web de Microsoft à l’adresse suivante :


Propriétés

ID d'article : 320714 - Dernière mise à jour : 27 janv. 2017 - Révision : 2

Commentaires