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

Contribuez .NET Discussion :

[VB.NET][ADO.NET] : Taille d'un champs de type texte ? [FAQ]


Sujet :

Contribuez .NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 9
    Points : 12
    Points
    12
    Par défaut [VB.NET][ADO.NET] : Taille d'un champs de type texte ?
    Hola companeros,

    Je cherche à récupérer, par programme, la taille d'un champs de type texte via la propriété MaxLength d'un objet DataColumn. Ca me renvoie toujours -1 !!!

    Connaissez-vous un autre moyen d'obtenir la taille d'un tel champs ? Je suis preneur. A titre de remerciement je demanderais au père noêl de venir vous rendre visite (indiquez votre préférence pour le cadeau).

    Merci d'avance.

  2. #2
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    Salut,
    Ca ne fonctionne pas en utilisant .ToString.Length() ?

    Example:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            Dim dt As New DataTable
            Dim dc As New DataColumn("Test")
     
            dt.Columns.Add(d)
            Dim r As DataRow = dt.NewRow
     
            r("Test") = "some data"
            dt.Rows.Add(r)
     
            'Et là tu accedes a la longueur de chaine :
            dim length as Integer = dt.rows(0).item(0).ToString.Length
    [EDIT]
    oups N'aurais-je pas par hasard répondu à coté de la question :
    En effet c'est la longueur du type que tu veux, pas la longueur des données, c'est bien ça?
    Dans ce cas en effet, c'est bien MaxLength qu'il faut utiliser. Si elle vaut -1 c'est qu'elle n'a pas été initialisée. Tu peux utiliser MaxLength pour attribuer la longueur maximal de ton champs.
    [EDIT]

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    Hola,

    Au moins à 3 mètres de la plaque lol. Je m'interesse à la colonne en tant que structure. Je ne cherche pas à récupérer la taille d'une colonne sur un enregistremment particulier.

    Quand à la propriété MaxLenth j'ai lu au travers de mes pélégrinations sur Internet qu'elle était buggée. Elle renvoie toujours -1 sur une table existante. Je signale au passage que le problème se pose avec le framework 1.1 (VS 2003).

    Merci quand même. Si quelqu'un a une idéee ...

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Cela n'a-t-il pas un lien avec ta façon de recupérer les données
    MissingSchemaAction Enumeration

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par neguib
    Cela n'a-t-il pas un lien avec ta façon de recupérer les données
    MissingSchemaAction Enumeration
    Merci pour la suggestion. Je dirais au père noêl de te donner au moins un 1/2 cadeau.

    La propriété DataColumn.MaxLength me semblant mal documentée, je me suis orienté, par ta suggestion vers une méthode qui travaille sur le schéma de la table.

    Je joint ci dessous une fonction qui fait le boulot demandé au cas où ca peux servir à d'autres. Pour faire court ce n'est ni complet ni sécurisé et on peux obtenir des d'informations autres que la taille.

    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
     
    Public Function GetFieldSize( _
       ByVal p_con As OleDbConnection, _
       ByVal p_strTableName As String, _
       ByVal p_strFieldName As String) As Integer
     
     ' Récupérer le "schema" de la table
     Dim dt As DataTable
     dt = p_con.GetOleDbSchemaTable( _ 
        OleDbSchemaGuid.Columns, _ 
        New Object() {Nothing, Nothing, p_strTableName})
     
     ' Récupérer l'enregistrement qui décrit le champs désiré
     Dim dv As DataView = dt.DefaultView
     dv.Sort = "COLUMN_NAME"
     Dim iRow As Integer = dv.Find(p_strFieldName)
     Dim dr As DataRow = dv(iRow).Row
     
     Dim iLength As Integer = dr.Item("CHARACTER_MAXIMUM_LENGTH")
     Return iLength
    End Function
    Merci à ceux qui m'ont répondu et même aux autres -))

  6. #6
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut Récupérer la taille d'un champ texte ( alimentation de MawLength ) par FillSchema
    Comme je me suis également posé la question, et que la conclusion me semblait un peu trop complexe, il y'a un moyen simple de récupérer les propriétés d'une colonne d'un dataset issu d'une BDD.
    Il suffit d'utiliser la méthode FillSchema du DataAdapter utilisé pour remplir le DataSet.

    Exemple :
    Code vb.net : 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
    24
    25
     
            '
            ' Cnn est un connexion oledb a une base de donnée
            ' Parametre est une table de la base
            '
            Dim strQuery As String = "SELECT * FROM Parametre"
            Dim daListe As New OleDbDataAdapter(New OleDb.OleDbCommand(strQuery, Cnn))
            Dim dsListe As New DataSet
            '
            ' charge le schéma --> c'est là qu'on récupére les infos sur les champs
            '
            daListe.FillSchema(dsListe, SchemaType.Mapped)
            '
            ' charge les données --> pour affichage en datagrid par exemple
            ' pas d'intérêt dans l'exemple mais a ne pas oublier !
            '
            daListe.Fill(dsListe)
     
            Dim c As DataColumn, strMsg As String
            For Each c In dsListe.Tables(0).Columns
                strMsg = strMsg & vbCrLf
                strMsg = strMsg & " Nom : " & c.ColumnName & " - Type : " & c.DataType.Name & " - Longueur : " & c.MaxLength
            Next
     
            System.Windows.Forms.MessageBox.Show(strMsg)

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

Discussions similaires

  1. [ADO.Net][VB.Net] Comment réaliser un Update via un champ de saisie ?
    Par nazimb dans le forum Accès aux données
    Réponses: 25
    Dernier message: 15/05/2006, 14h10
  2. [ADO.NET][VB.Net]Comment filtrer certains champs de DataRow?
    Par Philorix dans le forum Accès aux données
    Réponses: 3
    Dernier message: 14/02/2006, 20h26
  3. Réponses: 1
    Dernier message: 30/01/2006, 12h21
  4. [VB.NET] [ADO.NET] Adapter, TableMapping et DataSet xsd
    Par neo.51 dans le forum Accès aux données
    Réponses: 14
    Dernier message: 23/09/2004, 16h52
  5. [VB.NET] [ADO.NET] DataAdapter et concaténation
    Par master56 dans le forum Accès aux données
    Réponses: 3
    Dernier message: 04/06/2004, 13h25

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