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

C# Discussion :

DataSet DataType FillSchema typage de colonnes


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 10
    Par défaut DataSet DataType FillSchema typage de colonnes
    Salut !

    Hier je me suis pris un peu la tête sur un problème de typage de colonne dans les DataSet. J'ai trouvé une solution à mon problème MAIS je trouve ça assez crade niveau code et pas du tout dynamique. J'aimerai bien savoir s'il y a une autre solution à ce problème.. Le voici :

    Au départ je structurais mon DataSet avec la méthode FillSchema.
    Le FillSchema ne récupère pas du tout les types des colonnes de ma table.
    Je me retrouve alors avec des colonnes de type System.String.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    myDataAdapter.FillSchema(ds, SchemaType.Mapped, tableName); //je fill avec un SELECT * FROM tablename;
    ....
    //Ajout d'une nouvelle row dans mon DataSet
    DataRow dr= MyDS.Tables["tablename"].NewRow();
         dr["Description"] = myInterv.Description;
         ....
         dr["Date_début"] = myInterv.DateDebut; // myInterv.DateDebut est de type DateTime
    MyDS.Tables["tablename"].Rows.Add(dr); <<< Impossible de définir la colonne 'Date_début'. La valeur dépasse la limite MaxLength de cette colonne.
    Je me suis dit que c'était à cause du type String de la colonne du DataSet qui n'aimait pas qu'on lui passe un DateTime...


    Je rajoute alors dans mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MyDS.FillSchema(ds, SchemaType.Mapped, tableName);
    MyDS.Tables["tablename"].Columns["Date_début"].DataType = System.Type.GetType("System.DataTime");
     
    ....
    Toujours même erreur au niveau de l'ajout de la row dans le dataset !
    Je change alors la taille du maxlength avec plusieurs valeurs différentes... toujours même message d'erreur.

    Finalement je remplis mon dataset a la main.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MyDS.Tables.Add("tablename");
         MyDS.Tables["tablename"].Columns.Add("Description", System.Type.GetType("System.String"));
         ....
         MyDS.Tables["tablename"].Columns.Add("Date_début", System.Type.GetType("System.DateTime"));
    Et bien entendu quand j'ajoute ma row... ça passe très bien, aucune erreur.

    C'est cool que ça fonctionne mais j'ai 2 tables à remplir et une 20aine de champs par table. Ajouter à la main c'est très lourd (niveau code) !!
    Si quelqu'un a une solution... je prends avec plaisir !

    Merci d'avance

  2. #2
    Inactif
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Algérie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 59
    Par défaut SGBD?
    Quel sgbd utilises tu ? (FillSchema récupère toutes les colonnes et types).

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 10
    Par défaut
    - Odbc
    - Sql Server (2008)

    Quand je regarde mon DataSet il n'y a que le type System.String sur toutes les colonnes je ne comprends pas pourquoi alors.

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Algérie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 59
    Par défaut Source
    J'ai fait le même exemple que toi .. Et ça marche à merveille ... essaies de mettre SchemaType.Source à la place de mapped (étant donné que tu charge le schéma du dataadapter et nom des tableMappings )...

    Si tu peux m'envoyer le code que tu utilise ou un exemple simple ça serait mieux...

    Voici la capture d'écran sur mon exemple ... tu remarques bien le type qui n'est pas string ...
    Bon courage

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 10
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    DataSet MyDS = new DataSet();
    using (OdbcConnection cnx = new OdbcConnection(connection))
    {
          daTicket = new OdbcDataAdapter("SELECT * FROM TICKET", cnx);
          daTicket.FillSchema(MyDS, SchemaType.Source, "Ticket");
          cnx.Close();
    }
    Je n'utilise pas du tout linq, je n'ai aucune notion dedans.
    Les colonnes de la table sont de type date (dont DateFermeture)
    Voici ma capture d'écran...

    Et je viens de m'apercevoir qu'en fait il n'arrive pas a prendre les types Date et Time dans ma table sql server mais il arrive bien a prendre le int....
    Ya t il un moyen pour régler ça ?
    Images attachées Images attachées  

  6. #6
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 10
    Par défaut
    Je viens de vérifier avec d'autres types pour la date ou le temps :
    - le type Date (sql server) n'est pas pris en DateTime (.net) il me le met en String
    - le type Time (sql server) pareil...

    Le type SmallDateTime (sql server) passe en DateTime (.net) sauf que la MinValue d'un DateTime est 01/01/0001, c'est la même chose pour le type Date (sql server) mais pas pour le SmallDateTime qui est 01/01/1900.

    Je vois pas comment faire

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

Discussions similaires

  1. [SQL2005] problèmes de typage de colonne en XML
    Par titouc330 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/10/2006, 12h52
  2. Réponses: 3
    Dernier message: 16/05/2006, 14h47
  3. [C#]recupérer les colonnes de type numérique d'un dataset
    Par bossun dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/03/2006, 16h08
  4. Récupérer les infos d'une colonne de type DataSet
    Par Zugg dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/02/2006, 14h46
  5. [VB.NET] DataSet - DataGrid - Cacher Colonne
    Par Seb.M dans le forum Windows Forms
    Réponses: 4
    Dernier message: 02/03/2005, 12h37

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