J'ai réussi à me connecter à une base de données Oracle (10g) à partir de C # (Visual Studio 2008) en téléchargeant et en installant les outils d'administration client et Visual Studio 2008 sur mon ordinateur portable.
L'encombrement d'installation pour les outils Oracle Client était supérieur à 200 Mo, et assez long.
Est-ce que quelqu'un sait quelle est l'empreinte minimale réalisable? J'espère que c'est un seul DLL et une commande de registre, mais j'ai le sentiment que j'ai besoin d'installer une maison Oracle et de définir diverses variables d'environnement.
J'utilise Oracle.DataAccess dans mon code.
Vous avez besoin d'un client Oracle pour vous connecter à une base de données Oracle. Le moyen le plus simple consiste à installer Oracle Data Access Components .
Pour minimiser l'empreinte, je suggère ce qui suit:
sales-server:1521/sales.us.acme.com
.Cela équivaut à environ 19 Mo (v10).
Si vous ne vous souciez pas de partager ce dossier entre plusieurs applications, une alternative serait d'expédier les DLL mentionnées ci-dessus avec vos fichiers binaires d'application et d'ignorer l'étape de configuration du CHEMIN.
Si vous devez absolument utiliser le fournisseur Oracle (Oracle.DataAccess), vous aurez besoin de:
Notez que je n'ai pas testé cette dernière configuration ...
Depuis 2014, OPD.NET, Managed Driver est la plus petite empreinte.
Voici une comparaison de l'utilisation du code avec les versions non gérées suggérées par les réponses précédentes (obsolètes): http://docs.Oracle.com/cd/E51173_01/win.122/e17732/intro005.htm#ODPNT148
Vous devrez télécharger ces dll et la référence Oracle.ManagedDataAccess.dll
dans votre projet: Téléchargez le ODP.NET, version Xcopy du pilote géré uniquement
Voici une empreinte typique que vous devrez emballer avec votre version:
Oracle.ManagedDataAccess.dll
Oracle.ManagedDataAccessDTC.dll
tous ensemble, un énorme 6,4 Mo pour .Net 4.0.
J'utilise la méthode suggérée par Pandicus ci-dessus, sur Windows XP, en utilisant ODAC 11.2.0.2.1. Les étapes sont les suivantes:
using Oracle.DataAccess.Client;
à votre code et vous pouvez désormais utiliser des types comme OracleConnection
, OracleCommand
et OracleDataReader
pour accéder à une base de données Oracle. Voir documentation de classe pour plus de détails. Il n'est pas nécessaire d'utiliser le fichier de configuration tnsnames.ora, seule la chaîne de connexion doit être définie correctement.De cette façon, vous pouvez vous connecter à ODP.net à l'aide de 5 fichiers redistribuables d'Oracle:
Edit: Au cas où le blog tombe en panne, voici un bref résumé ...
assurez-vous que vous obtenez TOUTES ces DLL à partir de la même distribution ODP.Net/ODAC pour éviter les conflits de numéro de version et placez-les toutes dans le même dossier que votre EXE
DevArt http://www.devart.com/ , anciennement CoreLab (crlab.com) fournit un client Oracle pur C #. C'est une seule DLL, et cela fonctionne très bien.
Voici une mise à jour pour Oracle 11.2.0.4.0 . J'ai réussi avec la procédure suivante sur Windows 7 en utilisant System.Data.OracleClient
.
1. Télécharger Package client instantané - Basic Lite : Windows 32 bits ou 64 bits .
2. Copiez les fichiers suivants dans un emplacement de votre chemin système:
32 bits
1,036,288 2013-10-11 oci.dll
348,160 2013-10-11 ociw32.dll
1,290,240 2013-09-21 orannzsbb11.dll
562,688 2013-10-11 oraocci11.dll
36,286,464 2013-10-11 oraociicus11.dll
64 bits
691,712 2013-10-09 oci.dll
482,304 2013-10-09 ociw32.dll
1,603,072 2013-09-10 orannzsbb11.dll
1,235,456 2013-10-09 oraocci11.dll
45,935,104 2013-10-09 oraociicus11.dll
3. Construisez une chaîne de connexion qui omet la nécessité de tnsnames.ora .
(Voir les exemples dans le programme de test ci-dessous.)
4. Exécutez ce programme C # minimal pour tester votre installation:
using System;
using System.Data;
using System.Data.OracleClient;
class TestOracleInstantClient
{
static public void Main(string[] args)
{
const string Host = "yourhost.yourdomain.com";
const string serviceName = "yourservice.yourdomain.com";
const string userId = "foo";
const string password = "bar";
var conn = new OracleConnection();
// Construct a connection string using Method 1 or 2.
conn.ConnectionString =
GetConnectionStringMethod1(Host, serviceName, userId, password);
try
{
conn.Open();
Console.WriteLine("Connection succeeded.");
// Do something with the connection.
conn.Close();
}
catch (Exception e)
{
Console.WriteLine("Connection failed: " + e.Message);
}
}
static private string GetConnectionStringMethod1(
string Host,
string serviceName,
string userId,
string password
)
{
string format =
"SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)" +
"(Host={0})(PORT=1521))" +
"(CONNECT_DATA=(SERVER=DEDICATED)" +
"(SERVICE_NAME={1})));" +
"uid={2};" +
"pwd={3};"; // assumes port is 1521 (the default)
return String.Format(format, Host, serviceName, userId, password);
}
static private string GetConnectionStringMethod2(
string Host,
string serviceName,
string userId,
string password
)
{
string format =
"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)" +
"(Host={0})(PORT=1521))" +
"(CONNECT_DATA=(SERVER=DEDICATED)" +
"(SERVICE_NAME={1})));" +
"User Id={2};" +
"Password={3};"; // assumes port is 1521 (the default)
return String.Format(format, Host, serviceName, userId, password);
}
}
Conseil final: Si vous rencontrez l'erreur "System.Data.OracleClient nécessite la version 8.1.7 du logiciel client Oracle" , voir cette question .
ODAC xcopy vous fera gagner environ 45 Mo. http://www.Oracle.com/technology/software/tech/windows/odpnet/index.html
J'ai également trouvé cet article sur le forum Oracle très utile:
Remarque: l'équipe ADO.NET déconseille System.Data.OracleClient donc pour les futurs projets, vous devez utiliser ODP.NET
La reproduction:
Configurez les variables d'environnement suivantes:
- assurez-vous qu'aucun autre répertoire Oracle ne se trouve dans votre CHEMIN
- définissez votre [~ # ~] chemin [~ # ~] pour pointer vers votre client instantané
- définissez votre TNS_ADMIN pour pointer vers l'emplacement de votre fichier tnsnames.ora
- définissez votre NLS_LANG
- définissez votre Oracle_HOME sur votre client instantané
Pour moi, j'ai défini NLS_LANG sur
http://download-east.Oracle.com/docs/html/A95493_01/gblsupp.htm#634282
J'ai vérifié que cela utilisait le logiciel client correct en utilisant le module complémentaire sqlplus pour le client instantané.
Pour moi, j'ai défini: SET NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252
Remarque: avant d'apporter des modifications, sauvegardez votre clé de registre Oracle (le cas échéant) et sauvegardez la chaîne pour toutes les variables d'environnement.