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

VB.NET Discussion :

Simplification de requêtes SQL


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 51
    Points : 6
    Points
    6
    Par défaut Simplification de requêtes SQL
    Bonjour, j'ai créer cette fonction qui a pour but de retourner un Dataview a partir d'une requêtes. J'ai l'impression d'en avoir un peu trop mit pour rien. Qu'en penser vous? Aurais-je pu faire dans le plus simple... D’ailleurs cette fonction ne me permet même pas de faire du multi table.

    Merci de me donner votre point de vue.

    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
    38
    39
    Public Function selecttable(ByVal Table As String, _
                                    ByVal Selection As String, _
                                    Optional ByVal whereSql As String = Nothing, _
                                    Optional ByVal orderBySql As String = Nothing) As DataView
     
            Dim daTable As New OleDbDataAdapter
            Dim dtTable As New DataTable
            Dim sqlstring As String = "SELECT " & Selection & " FROM " & Table
     
            If Not (whereSql Is Nothing) AndAlso 0 < whereSql.Length Then
                sqlstring += " WHERE " + whereSql
            End If
     
            If Not (orderBySql Is Nothing) AndAlso 0 < orderBySql.Length Then
                sqlstring += " ORDER BY " + orderBySql
            End If
     
            Using connection As New OleDbConnection(m_ConnectionString)
     
                ' Insert une nouvelle ligne dans la table.
                Dim command As New OleDbCommand(sqlstring, connection)
     
                ' Open the connection and execute the insert command.
                Try
                    connection.Open()
                    command.ExecuteNonQuery()
     
                    daTable.SelectCommand = command
                    daTable.Fill(dtTable)
     
                    Return New DataView(dtTable)
     
                Catch ex As Exception
                    Console.WriteLine(ex.Message)
                    Return Nothing
     
                End Try
            End Using
        End Function

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    command.ExecuteNonQuery() va exécuter la requete et daTable.Fill(dtTable) aussi ... donc inutile de le faire 2x
    de plus executenonquery ne peut pas rapatrier des données issues d'un select

    après je ne comprends pas l'utilité que tu as de demander le select, la table, le where et le order by dans des paramètres différents ... à part emmerder l'appelant
    demander un string avec la requete complète suffit, surtout que là ca t'obliges à avoir des requêtes simples ou à bricoler quand tu auras des requetes plus complexes


    y aussi cette ligne ' Insert une nouvelle ligne dans la table. qui fait peur ...

    et noter aussi qu'il y a une balise code sur ce forum pour mettre en forme le code (bouton # dans l'interface)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    J'ajouterai qu'il serait préférable d'utiliser des requêtes parametrées (à voir avec la compatibilité de ton driver SQL)

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 51
    Points : 6
    Points
    6
    Par défaut
    J'ai apporté les modifications.
    Présentement j'utilise microsoftjet déclaré ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private m_ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\dbfinal.accdb"
    la raison de la multitude des parametre était pour utiliser plus facilement le dataview avec Return New DataView(dtTable)

    je pourais mettre les parametre directement dans le dataview et sauver plusieur ligne.

    Le probleme c'est que ca plante sur la ligne connection.Open() avec l'erreur:
    Pas à pas détaillé*: pas à pas principal dans le code non-utilisateur 'System.Data.ProviderBase.DbConnectionClosed.OpenConnection'
    Une exception de première chance de type 'System.Data.OleDb.OleDbException' s'est produite dans System.Data.dll

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    il manque le message d'erreur, qui explique pourquoi l'erreur

    m'enfin concernant la question de départ demandant un avis sur le code, il est pas terrible ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 51
    Points : 6
    Points
    6
    Par défaut
    Des idées d'amélioration?
    Il n'y a pas de message d'erreur spécifique, c'est ce qui me cause probleme.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 51
    Points : 6
    Points
    6
    Par défaut
    Apaprament, il semple que l'ereur soit:
    format de base de donnée non reconnu...
    comprend pas...

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    j'suis pas expert en access, mais gogle aurait l'air de dire que c'est pas jet qu'il faudrait pour ouvrir un .accdb
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour,
    Pol63 a raison,
    Pour le Provider d'Access (.accdb).
    Voir ce lien :
    http://www.connectionstrings.com/access-2007#p84

Discussions similaires

  1. [ DB2 ] [ AS400] requête sql
    Par zinaif dans le forum DB2
    Réponses: 6
    Dernier message: 23/08/2008, 19h42
  2. Simplification requête SQL
    Par squall6969 dans le forum Requêtes
    Réponses: 1
    Dernier message: 31/07/2008, 13h55
  3. Simplification d'une requête SQL
    Par nicou50 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 07/09/2006, 06h37
  4. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  5. Requête SQL
    Par Leludo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/02/2003, 16h44

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