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

ADO.NET Discussion :

[C#] Même script pour un accès à des bases différentes


Sujet :

ADO.NET

  1. #1
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut [C#] Même script pour un accès à des bases différentes
    Bonjour @ tous,

    Voilà, j'ai une même appli web qui, selon le contexte, doit se connecter à une base SQL server ou SQL compact (voir access).
    Seulement, ce ne sont pas les mêmes object qui sont utilsés (connection, command et dataAdapter).

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            using (OleDbConnection conn = new OleDbConnection(connect)) {
                conn.Open();
                OleDbCommand command = new OleDbCommand(req, conn);
                command.ExecuteNonQuery();
                foreach (int TA in TAs) {
                    req = "INSERT INTO ...";
                    OleDbCommand command2 = new OleDbCommand(req, conn);
                    command2.ExecuteNonQuery();
                    ret++;
                }
            }
    Par exemple, ce code ne fonctionne que pour Access. Sinon, il faut utiliser SqlConnection, SqlCeConnection, SqlCommand, SqlCeCommand, ...

    J'ai essayé de créer mes classes surchargées, mais je fini toujours par une voie sans issue.

    Avez vous une idée pour éviter de faire des gros IF pour chaque requête ?

    Merci d'avance.

    David.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Il faut que tu utilises les interfaces telles que IDbCommand IDbConnection, IDbDataReader etc.. Pour l'instanciation (vu qu'elles sont abstraites tu dois passer par une factory qui te renverrai une instance concrète en fonction de la base de donnée.) Ex ce tuto parle de ces types d'objets.

  3. #3
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Super,

    merci pour la rapidité et la pertinence de la réponse.
    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
            IDataReader dr = null;
            DbProviderFactory dbfactory = DbProviderFactories.GetFactory("System.Data.OleDb"); // System.Data.SqlClient System.Data.OleDb
            IDbConnection dbconn = dbfactory.CreateConnection();
            dbconn.ConnectionString = connect;
            try {
                dbconn.Open();
                IDbCommand cmd = dbconn.CreateCommand();
                cmd.Parameters.Add(requetes.faireParam(dbfactory, "@USR", txtLogin.Text));
                cmd.Parameters.Add(requetes.faireParam(dbfactory, "@PASS", txtPasse.Text));
                cmd.Connection = dbconn;
                cmd.CommandText = query;
                dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                if (dr.Read()) {
                    Session["UserId"] = dr[0].ToString();
                    ...
                    dr.Close();
                } else {
                    Literal1.Text = "Données invalides";
                    dr.Close();
                }
             } finally {
                if (dr != null) dr.Dispose();
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        public static IDataParameter faireParam(DbProviderFactory f, string cle, string val) {
            IDataParameter param = f.CreateParameter();
            param.ParameterName = cle;
            param.DbType = DbType.String;
            param.Value = val;
            return param;
        }


    Je n'ai pas testé avec SQL Compact, mais ça roule avec Access et SQL server.

  4. #4
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    J'éprouve des difficultés à faire fonctionner le dataAdapter... Pas moyen de le lier à la connexion.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            DbProviderFactory dbfactory = getFactory();
            IDbConnection dbconn = dbfactory.CreateConnection();
            dbconn.ConnectionString = connect;
            IDbDataAdapter oda = dbfactory.CreateDataAdapter(); // Avec un IDbDataAdapter on ne peux nommer des tables. Y a une seule table et elle s'appelle Table.
            oda.SelectCommand.CommandText = req;
            oda.Fill(ds);
    Je ne suis même pas sur que ce code est bon.

    Est ce bien un IDbDataAdapter qu'il faut utiliser et quelle différence avec un DbDataAdapter ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Utilises plutôt DbAdapter au lieu de IDbAdapter qui n'est là que pour servir de contrat dans le cas où tu voudras créer le tien à partir de Zéro.
    Tu peux aussi faire de même pour les autres en utilisant DbCommand au lieu de IDbCommand, etc ...

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

Discussions similaires

  1. Accès à des bases de données
    Par GO dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 02/11/2006, 10h57
  2. Réponses: 7
    Dernier message: 13/10/2006, 00h45
  3. [Noob] Script pour la gestion des dates
    Par Konrad Florczak dans le forum Langage
    Réponses: 19
    Dernier message: 02/10/2006, 18h24
  4. Script pour faire défiler des infos
    Par waddle dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/01/2006, 14h54
  5. Recherche script pour visualisation UML des jointures
    Par messier79 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 12/12/2005, 13h40

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