IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

DataTable vide pourquoi


Sujet :

Windows Forms

  1. #1
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut DataTable vide pourquoi
    Salut!

    J'ai encore des problèmes!

    Mes DataTables sont vides ( vérification grâce a une messagebox)

    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    public partial class F_ConsultSearch : Form
        {
            SqlConnection m_cnADONetConnection = new SqlConnection();
            SqlDataAdapter m_daDataAdapter;
            DataSetConsultSearch m_ConsultSearchData = new DataSetConsultSearch();
            SqlCommandBuilder m_cbCommandBuilder;
     
            public F_ConsultSearch()
            {
                InitializeComponent();
            }
     
            private void F_ConsultSearch_Load(object sender, EventArgs e)
            {
     
     
                m_cnADONetConnection.ConnectionString =
                @"Server=***;Database=***;User ID=***;Password=***;Trusted_Connection=False";
                m_cnADONetConnection.Open();
                m_daDataAdapter = new SqlDataAdapter("SELECT AKKNDI,AKARTK, AKARTN  FROM ARKF;" + "SELECT KNKNDI, KNKNMN FROM KNDF;" + "SELECT ITNBR, ITDSC FROM ITEMASA;" /*+ "SELECT // FROM //;"*/, m_cnADONetConnection);
                SqlCommandBuilder m_cbCommandBuilder = new SqlCommandBuilder(m_daDataAdapter);
                m_daDataAdapter.Fill(m_ConsultSearchData);
    Je ne sais pas comment savoir si ma connection fonctionne.

    Merci d'avance

  2. #2
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    tu doit mettre ton code a partir du niveau ou tu ouvre la connexion dans un bloc Try...Catch.
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  3. #3
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Si j'ai bien compres Try catch c'est pour afficher une exception?

    Si oui? Je croyai que lorsque l'on débug il nous affiche les exceptions?

    Je viens de tester mes requêtes sur sql server, ça marche. C'est donc un probleme de connection ou de remplissage...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Quand tu mets plusieurs SELECT dans ton DataAdapter, il ne sait pas quelles DataTables il faut remplir donc il crée des nouvelles tables Table1, Table2, etc dans le dataset.

    Pour que ça remplisse bien les bonnes tables, il faut soit les charger une par une, soit utiliser une autre surcharge de Fill qui permet de spécifier les tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                m_daDataAdapter.Fill(0, 0, m_ConsultSearchData.ARKF, m_ConsultSearchData.KNDF, m_ConsultSearchData.ITEMASA);

  5. #5
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Salut!

    Je viens d'essayer ton truc. Ca rame à mort! J'arrive pas à afficher mon formulaire. Faut dire qu'une fois pleines les datatables doivent faire dans les 15 milles lignes...
    C'est normal que ça n'arrive pas à charger?

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    ben je sais pas, c'est peut-être ta connexion avec la BDD qui est un peu lente... ça charge pas du tout ou c'est juste très long ?

  7. #7
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Et bien j'ai attendu 1 ou 2 min et rien.

    Ca sert à quoi les 0 au début du Fill?

    ---------------

    Je viens de recommencer, au bout de 3 min, il m'affiche une exception sur la ligne que tu m'a donné:

    Impossible d'activer les contraintes. Une ou plusieurs lignes contiennent des valeurs qui violent les contraintes de type non null, unique ou de clé externe.

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Chacha35 Voir le message
    Ca sert à quoi les 0 au début du Fill?
    http://msdn.microsoft.com/fr-fr/library/0z5wy74x.aspx

    C'est l'index de ligne de départ, et le nombre de lignes à prendre. Mais si on spécifie plusieurs tables, il faut mettre les deux à 0. J'ai testé chez moi, ça marchait nickel...

    Sinon essaie de remplir tes tables séparément, en mettant une seule requête dans le SqlDataAdapter, et en appelant Fill sur une table en particulier

  9. #9
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Ok merci!
    Je fais ça demain. C'est l'heure de quitter le boulot (stage).

    Merci encore

  10. #10
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Comment vérifie-tu exactement que tes DataTable sont vides ?
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  11. #11
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Et bien je compte combien il y a de lignes dans ma DataTable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MessageBox.Show("nombre de ligne dans la datatable " + m_ConsultSearchData.ITEMASA.Rows.Count);
    Et il me retourne 0.

    J'ai tenté avec plusieurs dataadapter, j'obtient la même erreur.
    C'est peut-être une histoire de contraintes sur le DataSet?
    -----------

    C'était bien ça! J'ai mis la propriété EnforceContraints a false et maintenant ma table se rempli. Je ne sais pas exactement ce que j'ai changé. Si quelqu'un peut m'expliquer.

  12. #12
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Comment as-tu créé ton Dataset et que contient-il au départ ?
    [Edit]
    J'avais pas vu que tu avais trouvé la solution

    DataSet.EnforceConstraints, propriété :
    Obtient ou définit une valeur indiquant si les règles de contrainte doivent être respectées lorsque vous tentez une opération de mise à jour.

    Donc apparemment tu avais des contraintes implicites qui empêchaient ton Dataset de se remplir.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  13. #13
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Ok merci.

    Mais maintenant j'ai une autre exception dans DataSetConsultSearch.Designer.cs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
                public string ITNBR {
                    get {
                        return ((string)(this[this.tableITEMASA.ITNBRColumn]));
                    }
                    set {
                        this[this.tableITEMASA.ITNBRColumn] = value;
                    }
                }
    InvalidCastException

    Impossible d'effectuer un cast d'un objet de type 'System.DBNull' en type 'System.String'.
    J'ai trouvé ça sur msdn:

    InvalidCastException est levé si :

    Pour une conversion de Single ou Double en Decimal , la valeur source est l'infini, un non-nombre (NaN) ou trop grande pour être représentée comme type de destination.

    Échec en cours de conversion d'une référence explicite.

    Pour qu'une conversion de référence explicite réussisse, la valeur source doit être référence Null (Nothing en Visual Basic) ou le type d'objet référencé par l'argument source doit être convertible en type de destination par une conversion de référence implicite.

    Pour obtenir des informations sur les conversions prises en charge par le système, consultez la classe Convert . Pour plus d'informations sur les erreurs se produisant lorsque le type de destination peut stocker des valeurs type sources, mais n'est pas suffisamment grand pour stocker une valeur source spécifique, consultez l'exception OverflowException .

    Les instructions MSIL (Microsoft Intermediate Language) suivantes lèvent InvalidCastException

    castclass

    refanyval

    unbox
    Mais je n'y comprend pas grand chose!

    -------------------

    J'ai recommencé le debug et je n'ai plus de problème!

    Merci à tous

  14. #14
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    ça signifie tout simplement que la valeur du champ en bdd est NULL. Je pensais que le Dataset gérait cela tout seul mais apparemment non.

    Il ne te reste plus qu'à faire un test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(this[this.tableITEMASA.ITNBRColumn] == DBNull.Value)
    {
     return "null";
    }
    else
    {
     return (string)this[this.tableITEMASA.ITNBRColumn]:
    }
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Avec les datasets fortement typés, il essaie de convertir la valeur de la colonne dans le type qui va bien, mais si la colonne est DBNull ça foire. Il faut vérifier avant si la colonne est nulle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int itnbr = 0;
    if (!row.IsITNBRNull())
        itnbr = row.ITNBR;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Datatable vide avant l'application de filtres
    Par jujur dans le forum JSF
    Réponses: 4
    Dernier message: 07/12/2008, 19h51
  2. [VB2005]sql server : datatable vide
    Par Kropernic dans le forum Windows Forms
    Réponses: 12
    Dernier message: 03/06/2008, 12h47
  3. Session terminée DataTable vidée
    Par electrolol dans le forum ASP.NET
    Réponses: 2
    Dernier message: 04/04/2008, 09h17
  4. Comment gerer les dataTable vide ?
    Par perezoso dans le forum JSF
    Réponses: 6
    Dernier message: 05/02/2007, 12h56
  5. [Vb.net 2005]_Routine Sub donnant DataTable vide ?
    Par Gdal dans le forum Accès aux données
    Réponses: 1
    Dernier message: 07/10/2006, 12h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo