Dataset TYPEE

nabilG Messages postés 20 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 19 juin 2009 - 16 avril 2009 à 09:34
titeoe Messages postés 433 Date d'inscription samedi 26 avril 2003 Statut Membre Dernière intervention 4 décembre 2009 - 17 avril 2009 à 08:23
Bonjour,
Je suis nouveau dans C# et je débute après plusieurs tutoriaux et après vérification que les Datasets Fortement Typées sont les mieux adaptées pour le développements d'applications.
Mais je coince depuis une journée sur cette petite application pour tester un DATASET TYPEE:
J'ai crée une appliaction windows Form qui est "Dataset" pour tester une dataset typée. j'ai crée une dataset avec l'assistant (DS_Customers). J'ai voulu utiliser ce fichier pour avoir un affichage datagridview de la nouvelle dataset instanciée à partire de cette DS_Customers mais....RIEN DU TOUT.
Un bouton et textbox ou il y'a un chiffre pour voir la ligne n°(Ce chiffre) quand on appuie sur le bouton.
A priori c'est un problème de porté de la variable DS_Customers...????
Pouvez-vous me dire où est le problème?

********************************************************
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Data.SqlClient;
using System.Text;
using System.Windows.Forms;
 
namespace Dataset
{
    public partial class Form1 : Form
    {
        // Déclaration des Variables.....
        private DS_Customers DS_Type;
        
        public Form1()
        {
            InitializeComponent();
            dataGridView1.DataSource = DS_Type;
 
        }
       
        privatevoid Form1_Load(object sender, EventArgs e)
        {
            // Avant l'affichage de la Form on obtient la connexion et les Datasets
            Connecter();
        }
 
        privatevoid Connecter()
        {
            // Création de la Connexion
            SqlConnection Maconnexion = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True");
           
            // Ouverture de la connexion (ne pas oublier)
            Maconnexion.Open();
 
            // Vérifier l'état de la connexion
            if(Maconnexion.State == ConnectionState.Open)
            {
                MessageBox.Show("Connexion au Serveur OK","Etat de la Connexion",MessageBoxButtons.OK,MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("Pas de connexion au Serveur","Etat de la Connexion",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
            }
 
            // Création de la commande
            SqlCommand Macommande = new SqlCommand();
            Macommande.Connection = Maconnexion;
            Macommande.CommandType = CommandType.Text;
            Macommande.CommandText = "Select * From Customers";
 
            // Création de l'Adapter
            SqlDataAdapter MonDA = new SqlDataAdapter(Macommande);
 
            // Création de l'instance de la Dataset TYPEE DS_Customers pour utiliser
            //les index en chiffres à la place des "CustomerID..."
            DS_Customers DS_Type = new DS_Customers();
 
 
            // Remplisssage de la Dataset Typée
            MonDA.Fill(DS_Type, "Table des Clients");
 
            // Après le remplisssage fermer la connexion
            Maconnexion.Close();
        }
 
        privatevoid button1_Click(object sender, EventArgs e)
        {
            // select dans un TextBOX de la ligne de DATASET à afficher
            int I = Convert.ToInt32(textBox1.Text);
 
            // Affichage des informations avec DATASET TYPEE
            label1.Text = DS_Type.Customers[i].CustomerID.ToString();
            label2.Text = DS_Type.Customers[i].ContactName.ToUpper();
            label3.Text = DS_Type.Customers[i].ContactTitle.ToString();
            label4.Text = DS_Type.Customers[i].CompanyName.ToString();
            label5.Text = DS_Type.Customers[i].Country.ToString();
 
 
        }
      
              
    }
}
 
********************************************************
Avec mes remerciements

3 réponses

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
16 avril 2009 à 17:14
avec les dataset typés, tu ne devrais pas avoir besoin de :
-gérer toi meme la connexion (ni meme ten occuper)
-créer les requetes dans ton code
-utiliser un adapter faiblement typé

Dans l'assistant, tu ouvre l'onglet de visual studio "explorateurs de serveurs", tu paramètres la connection sur ta base de données, puis tu drag and drop tes tables sur ton schéma. Cela va te créer ta table avec le meme schéma que la DB et un dataadapter pour chaque table. Chaque dataadapter contient par défaut la requetes correspondant au "select *", mais tu peux aussi configurer le dataadapter pour ajouter une méthode pour chaque requete que tu souhaite faire. Ton code ne contiendra donc aucun SQL, aucune référence à la connexion, ni quoi que ce soit.Ta méthode d'affichage ne contiendrait plus que le code suivant :

CustomersTableAdapter  adapter = new CustomersTableAdapter();
DS_Customers DS_Type = adapter.GetData();

Enfin, le fait que rien ne s'affiche vient du fait que tu as deux variables DS_Type. Une membre de la classe qui est celle utilisée dans button1_Click et qui n'est jamais remplie, et une deuxieme locale a la fonction Connecter qui est bien celle qui est remplie (puis perdue des que tu sors du scope de la fonction connecter). D'ailleurs, le compilo devrait te sortir un warning j'imagine...
0
nabilG Messages postés 20 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 19 juin 2009
16 avril 2009 à 18:12
marci pour la réponse très clair Leprov.

mais une question qui me tracasse et me laisse vraiment hésiter à utiliser les Dataset Typés :
 - Quand j'éffectue une modification sur la structure d'une table que contient mon dataset via SQL (Ajouter ou renommer par exemple) je dois tout reprendre. Aussi, si je voux utiliser des procédures stockées, serait-il judicieux d'utiliser ces datasets?

 -En ce qui concerne la déclaration de DS_Type, il fallait, je pense, la déclarer au départ dans la déclarration de variables  "private DS_Customers DS_Type = new Ds_Customers;"

Merci de m'éclairer avant d'entamer la programmation de mon application de gestion de maintenance.
Avec mes remerciements
0
titeoe Messages postés 433 Date d'inscription samedi 26 avril 2003 Statut Membre Dernière intervention 4 décembre 2009 1
17 avril 2009 à 08:23
Bonjour,

Essais ceci : ********************************************************
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Data.SqlClient;
using System.Text;
using System.Windows.Forms;

namespace Dataset
{
public partial class Form1 : Form
{
// Déclaration des Variables.....
private DS_Customers DS_Type;

public Form1()
{
InitializeComponent();

}

privatevoid Form1_Load(object sender, EventArgs e)
{
// Avant l'affichage de la Form on obtient la connexion et les Datasets
Connecter();
dataGridView1.DataSource = DS_Type;

}

privatevoid Connecter()
{
// Création de la Connexion
SqlConnection Maconnexion = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True");

// Ouverture de la connexion (ne pas oublier)
Maconnexion.Open();

// Vérifier l'état de la connexion
if(Maconnexion.State == ConnectionState.Open)
{
MessageBox.Show("Connexion au Serveur OK","Etat de la Connexion",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Pas de connexion au Serveur","Etat de la Connexion",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
}

// Création de la commande
SqlCommand Macommande = new SqlCommand();
Macommande.Connection = Maconnexion;
Macommande.CommandType = CommandType.Text;
Macommande.CommandText = "Select * From Customers";

// Création de l'Adapter
SqlDataAdapter MonDA = new SqlDataAdapter(Macommande);


// Remplisssage de la Dataset Typée
MonDA.Fill(this.DS_Type, "Table des Clients");

// Après le remplisssage fermer la connexion
Maconnexion.Close();
}

privatevoid button1_Click(object sender, EventArgs e)
{
// select dans un TextBOX de la ligne de DATASET à afficher
int I = Convert.ToInt32(textBox1.Text);

// Affichage des informations avec DATASET TYPEE
label1.Text = DS_Type.Customers[i].CustomerID.ToString();
label2.Text = DS_Type.Customers[i].ContactName.ToUpper();
label3.Text = DS_Type.Customers[i].ContactTitle.ToString();
label4.Text = DS_Type.Customers[i].CompanyName.ToString();
label5.Text = DS_Type.Customers[i].Country.ToString();


}


}
}
0
Rejoignez-nous