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

ASP.NET Discussion :

Récupérer des informations sur les propriétés des champs d'une base SQL Server 2005


Sujet :

ASP.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 25
    Points : 13
    Points
    13
    Par défaut Récupérer des informations sur les propriétés des champs d'une base SQL Server 2005
    Bonjour,

    J'ai une BDD SQL server 2005 et programme des pages web ASPX (en langage VB) sous Visual Studio 2005. (Faut être précis dans la vie )

    J'utilise les objets présents dans "System.Data.SqlClient" pour me connecter à la base (SqlConnection), pour exécuter mes requêtes (SqlCommand) et parcourir les résultats des requêtes (SqlDataReader).

    Je génères une bonne partie de mes requêtes de façon dynamique ou alors utilise des procédures stockées.

    Lorsque je fais un "UPDATE" ou un "INSERT" à partir d'un formulaire en ligne que j'ai créé, composé de "textbox" (HTML), j'aimerais vérifier l'intégrité des données entrées par rapport aux contraintes de champs dans la BDD (not null, longueur, type,...)

    En gros, si, par exemple, un utilisateur entre 51 caractères dans un "textbox" et que j'ai déclaré dans ma BDD que le champ correspondant est un "nvarchar(50)", j'aimerais afficher un message du style "Vous êtes limité à 50 caractères pour ce champ." et arrêter là l'exécution (avant que la requête "UPDATE" ou "INSERT" ne se lance) .

    Comment faire pour récupérer les informations sur les contraintes de champs dans la BDD en vu de tester les champs de mon formulaire ? Tel est la question...

    Voilà

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Points : 411
    Points
    411
    Par défaut
    dim reader as sqlDataReader

    (connexions requetes et autre... )

    Dim table As DataTable = reader.GetSchemaTable()


    Ensuite tu peux exploiter ce datatable comme expliqué:

    http://msdn.microsoft.com/en-us/libr...hematable.aspx

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Merci pour ta rapide réponse.

    Juste un souci... GetSchemaTable() n'est pas une méthode de SqlDataReader...

    Quel objet utilise cette méthode stp ?

    Voilà

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Points : 411
    Points
    411
    Par défaut
    ?

    Dim a As SqlClient.SqlDataReader
    a.GetSchemaTable()

    Quel framework tu as?

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Microsoft .NET Framework Version 2.0 Redistributable Package (x86)

    Je tourne sur XP. Il me faut télécharger le 3.5 ?

    Voilà

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Points : 411
    Points
    411
    Par défaut
    A priori le 2 devrait suffir...

    Tu es certain que tu n'as pas cette méthode?

    Ca m'etonne beaucoup

    Je l'ai dans mon projet qui avant se basait sur le fram 2.0 ...

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Au temps pour moi....
    Je me suis gouré dans un truc tout bête...
    Vraiment nul on pourrait même dire. Mais j'escompte bien mettre cela sur le compte de la distraction (elle a bon dos avec moi la distraction )

    En fait, en tapant "reader" puis le "." la liste des méthodes et autres apparait. Mais il y a deux onglets en bas... "Commun" et "Tous"... En cliquant sur l'onglet "Tous" effectivement la méthode apparait... Vraiment nul je suis

    Je te tiens au courant si jamais je résous mon affaire grâce aux pistes que tu m'as données.

    Voilà

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Ok, c'est bon, j'ai réussit à résoudre mon problème...

    J'essayerai de faire une version simplifiée et épurée que je posterai quelque part ici.

    En tout cas, merci nah666 de m'avoir mis sur la piste.

    Voilà

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Voilà donc 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
            Dim MsgError As String = ""
     
            Dim i As Integer = 0
     
            Dim oConnection As New SqlConnection("Paramètres de connexion")
            Dim oCommand As New SqlCommand
     
            Dim oReader As SqlDataReader
     
            oConnection.Open()
     
            With oCommand
                .Connection = oConnection
                .CommandType = Data.CommandType.StoredProcedure
                .CommandText = "Nom d'une procédure stockée"
                oReader = .ExecuteReader
            End With
     
            Dim oSchema As DataTable = oReader.GetSchemaTable()
     
            oReader.Read()   '<--- Je sais que ma requête ne retourne qu'un ligne
     
            For i = 0 To (oReader.FieldCount - 1)
                Dim SchemaRow As DataRow = oSchema.Rows(i)
                Dim FormFieldValue As String = Request(SchemaRow("ColumnName")) '<--- J'ai nommé mes champs formulaire comme mes champs BDD pour plus de simplicité
     
                If (SchemaRow("DataType").ToString = "System.Integer") And not IsNumeric(FormFieldValue) Then
                    MsgError = "Le champ '" & SchemaRow("ColumnName") & "' doit être un nombre<br/>"
                ElseIf FormFieldValue.Length >= SchemaRow("ColumnSize") Then
                    MsgError = "Le champ '" & SchemaRow("ColumnName") & "' est limité à " & SchemaRow("ColumnSize").ToString & " caractères<br/>"   
                ElseIf (FormFieldValue.Length = 0) And not SchemaRow("AllowDBNull") Then
                    MsgError = "Le champ '" & SchemaRow("ColumnName") & "' ne peut être vide<br/>"
                End If
            Next
     
            'Affichage de la page et du message d'erreur

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    La liste propriété de DataRow (dans mon code "SchemaRow") :

    ColumnName
    ColumnOrdinal
    ColumnSize
    NumericPrecision
    NumericScale
    IsUnique
    IsKey
    BaseServerName
    BaseCatalogName
    BaseColumnName
    BaseSchemaName
    BaseTableName
    DataType
    AllowDBNull
    ProviderType
    IsAliased
    IsExpression
    IsIdentity
    IsAutoIncrement
    IsRowVersion
    IsHidden
    IsLong
    IsReadOnly
    ProviderSpecificDataType
    DataTypeName
    XmlSchemaCollectionDatabase
    XmlSchemaCollectionOwningSchema
    XmlSchemaCollectionName
    UdtAssemblyQualifiedName
    NonVersionedProviderType

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/03/2012, 10h50
  2. Réponses: 12
    Dernier message: 08/11/2011, 11h16
  3. Accès concurrentiel sur une base SQL Server 2005
    Par Nixar dans le forum ASP.NET
    Réponses: 6
    Dernier message: 21/07/2008, 17h07
  4. Copie de table sur une base SQL Server 2005
    Par stephyugh dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/04/2008, 13h30
  5. [J2EE/JSP] Gestion des erreurs avec une base SQL server 2005
    Par critok dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 30/04/2006, 16h57

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