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 :

Projet compatible multibase


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    Par défaut Projet compatible multibase
    Bonsoir,
    je cherche à developper une application indépendante de la base de données. En d'autres termes, je souhaite que cette appli soit compatible avec n'importe quelle base de données (Sqlserver, MySql....) et que le client final puisse choisir quelle base implémenter.

    Je ne trouve pas comment récupérer un "reader" commun avec les differents types de connecteurs.

    Pour être clair, je voudrais écrire une fonction générique qui me renvoi un datareader quelque soit la base de données en face.

    exemple :

    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
    40
    41
    42
    43
    44
    45
    46
    47
    ' ===================================================================
        ' Execution requete générique SQL de type SELECT
        ' Paramètres : strSql = Requête Sql à exécuter
        ' Retourne   : DataReader
        ' Fonction qui doit appeler la bonne fonction selon le paramétrage
    ' ===================================================================
        Public Function Sql_Select(ByVal strSql)
     
            If nTypeBDD = BDD_SQLSERVER Then
                Sql_Select = SqlServer_Select(strSql)
            ElseIf nTypeBDD = BDD_MYSQL Then
                Sql_Select = MySql_Select(strSql)
            ElseIf nTypeBDD = BDD_ODBC Then
                Sql_Select = Odbc_Select(strSql)
            Else
                Sql_Select = OleDb_Select(strSql)
            End If
     
        End Function
     
        ' ===================================================================
        ' Execution requete SQL BDD SQLServer
        ' Paramètres : strSql = Requête Sql à exécuter
        ' Retourne   : RecordSet
        ' ===================================================================
        Public Function SqlServer_Select(ByVal strSql) As SqlClient.SqlDataReader ' voir common.dbDatareader
     
            oCn.ConnectionString = "Data Source=" & strServer & ";User Id=sa ;Initial Catalog=" & strDatabase & ";Connection TimeOut=10"
     
            oCn.Open()
            '
            Dim rdSql As New SqlClient.SqlCommand
            rdSql.Connection = oCn
            rdSql.CommandType = CommandType.Text
            rdSql.CommandText = strSql
     
            Dim MyReader As SqlClient.SqlDataReader
            MyReader = rdSql.ExecuteReader
     
            SqlServer_Select = MyReader
     
     
        End Function
     
     
        Public Function MySql_Select(ByVal strSql) 'As SqlClient.SqlDataReader
    ......
    Existe-t-il une solution autre que de passer par notre bon vieil ODBC (est-ce possible d'ailleurs ?????).

    Si qq1 à une idée je suis preneur !

  2. #2
    Membre éprouvé Avatar de beren.kei
    Inscrit en
    Mai 2008
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2008
    Messages : 135
    Par défaut
    si tu trouve cette solution partage ! je suis preneur !

    sinon, faut que tu créé tes classes x fois pour x types de base et que tu fasses choisir l'utilisateur à l'install ou au premier démarrage pour définir quelles classes seront utilisées, quelque chose dans ce goût la...

    bon courage

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    c'est parfaitement faisable et il y a une solution propre

    .net gère plusieurs type de connexions en natif, et d'autres via des ajoute de dll en référence
    donc soit on se retrouve avec un sqldatareader, soit un oledbdatareader etc...
    mais tous héritent d'une classe de base qui se trouve dans system.Data.common

    donc il suffit de déclarer une variable du type commun, de mettre dedans n'importe lequel des types dérivés selon le type de base
    (c'est ce qu'on appelle du polymorphisme en POO, la classe de base a des membres et les types dérivés l'implémentent chacun à leur manière)

    (il y a la meme chose avec les dbcommand et les dbconnexions)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Générer un projet compatible avec les vieilles versions
    Par taorepoara dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 30/10/2013, 00h25
  2. Réponses: 5
    Dernier message: 26/05/2010, 09h57
  3. [XNA] Projet compatible que sur le PC qui a compilé
    Par Daikyo dans le forum XNA/Monogame
    Réponses: 2
    Dernier message: 29/04/2008, 17h48
  4. Réponses: 2
    Dernier message: 28/04/2008, 09h04
  5. Réponses: 3
    Dernier message: 23/11/2007, 09h12

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