Bonjour

je veux créer une connexion (cnx) vers une base de données, qui peut être SQL server, DB2 IBM (AS400) ou Oracle

Pour connaître la base de données, je lis un paramètre : provider :

Pour éviter toute complication, j'ai mis en commentaire le code des deux derniers pour me concentrer sur SQL Server.

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
            // Choix du fournisseur d'accès
            int provider = (Convert.ToInt16(urlCpte))/10;
            var cnx;
            switch (provider)
            {
                case 1:             // SQL Server
                    cnx = new SqlConnection();
                    break;
                case 2:             // DB2 AS400
                    //cnx = new SqlConnection();
                    break;
                case 3:             // ORACLE
                    //cnx = new SqlConnection();
                    break;
            }
            // Preparation
            
            var chaine = urlCpte;  
            cnx.ConnectionString = Convert.ToString(ConfigurationManager.ConnectionStrings[chaine]);
            DbDataReader dr;
            cnx.Open();
...
cnx est instancié dans le switch et cnx n'est donc pas utilisable dans le code APRES LE SWITCH.
Erreur de compilation


Si je fais :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
            // Choix du fournisseur d'accès
            int provider = (Convert.ToInt16(urlCpte))/10;
            var cnx = new SqlConnection();
            // Preparation
 
            var chaine = urlCpte;  
            cnx.ConnectionString = Convert.ToString(ConfigurationManager.ConnectionStrings[chaine]);
            DbDataReader dr;
            cnx.Open(); ...

ça marche, mais je perd le choix de type d'objet en fonction du paramètre provider

Question :
Comment faire ce switch pour créer cnx en fonction de la base de données ?