Bonjour,
Suite aux conseils obtenu sur une autre discussion, je veux réaliser un modèle indépendant du type de bases de données utilisé. J'ai donc suivi le tuto que l'on m'avait conseillé.
Lors de l'exécution, j'obtiens une erreur qui me dit que le fournisseur de données .NET Framwork demandé est introuvable (J'utilise Visual Studio 2010 et je veux me connecter à Oracle 10G Express).
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Oracle.DataAccess.Client;
using MySql.Data.MySqlClient;
using System.Data.Common;
using System.Configuration;
using System.Data;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
//-------------------------------ORACLE 10G XE---------------------------------------------------------
//string Ochaine = ConfigurationManager.ConnectionStrings["ConnexionOracle"].ConnectionString;
string Ochaine = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.2)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE)));User Id=Damien;Password=Damien;Connection Lifetime=120;Persist Security Info=False;";
OracleConnection OConnexion = new OracleConnection();
OConnexion.ConnectionString = Ochaine;
string cmdtxt = "SELECT * FROM etudiant";
try
{
OConnexion.Open();
Console.WriteLine("Connexion Oracle ouverte");
OracleCommand query = new OracleCommand();
query.Connection = OConnexion;
query.CommandText = cmdtxt;
OracleDataReader reader;
reader = query.ExecuteReader();
while (reader.Read())
{
Console.WriteLine(reader[0].ToString());
}
OConnexion.Close();
Console.WriteLine("Connexion Oracle fermée");
}
catch (Exception e)
{
Console.WriteLine(e);
}
Console.WriteLine("");
//-----------------En modèle indépendant-----------------------------------------------
try
{
DbConnection connec = DataProvider.CreateConnection();
Console.WriteLine("Connexion Ok");
DbCommand cmd = DataProvider.CreateCommand(cmdtxt);
DbDataReader reader = DataProvider.CreateDataReader(cmd);
while(reader.Read())
{
Console.WriteLine(reader[0].ToString());
}
}
catch(Exception e)
{
Console.WriteLine(e);
}
}
}
public class DataProvider
{
private static DbProviderFactory factory = DbProviderFactories.GetFactory("Oracle.DataAccess.Client");
public static DbConnection CreateConnection()
{
DbConnection connection = factory.CreateConnection();
connection.ConnectionString = ConfigurationManager.ConnectionStrings["ConnexionOracle"].ConnectionString;
connection.Open();
return connection;
}
public static DbCommand CreateCommand(string commandText)
{
DbCommand command = CreateConnection().CreateCommand();
command.CommandText = commandText;
return command;
}
public static DbDataReader CreateDataReader(string commandText)
{
return CreateCommand(commandText).ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
public static DbDataReader CreateDataReader(DbCommand command)
{
return command.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
public static DataSet CreateDataSet(string commandText)
{
DbDataAdapter adapter = factory.CreateDataAdapter();
adapter.SelectCommand = CreateCommand(commandText);
DataSet ds = new DataSet();
adapter.Fill(ds);
adapter.SelectCommand.Connection.Close();
return ds;
}
}
} |
Dans mon code, il y a une première partie que j'ai réalisé et qui fonctionne (la partie Oracle 10G XE) et l'autre partie pour le modèle indépendant, qui devrait me retourner le même résultat.
Pour cette 1ère partie, j'ai téléchargé et installé le client Oracle (Oracle Universal Installer), j'ai ensuite rajouté la référence "Oracle.DataAccess.dll" au projet, et "using Oracle.DataAccess.Client" dans le code.
Pour la 2ème partie, j'ai copié/collé la classe "DataProvider" du tuto et j'ai remplacé :
private static DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
par
private static DbProviderFactory factory = DbProviderFactories.GetFactory("Oracle.DataAccess.Client");
et
connection.ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
par
connection.ConnectionString = ConfigurationManager.ConnectionStrings["ConnexionOracle"].ConnectionString;
J'ai créé un fichier App.config :
1 2 3 4 5 6 7 8 9 10
| <?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="ConnexionOracle"
connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.2)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE)));User Id=Damien;Password=Damien;Connection Lifetime=120;Persist Security Info=False;"
providerName="Oracle.DataAccess.Client" />
</connectionStrings>
</configuration> |
Le connexionString de mon fichier App.config est un copié/coller de ma variable Ochaine de la 1ère partie de mon code.
C'est la 1ère fois que je tente d'utiliser un modèle indépendant du type de bases de données, si quelqu'un pouvait me débloquer, ce serait sympa
Partager