Quel est le nombre minimum de clients requis pour connecter C# à une base de données Oracle?
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'empreinte de l'installation des outils Client Oracle était de plus de 200 Mo, et assez longue enroulée.
est-ce que quelqu'un sait ce qu'est l'empreinte minimale réalisable? J'espère que c'est une simple DLL et une commande de registre, mais j'ai le sentiment que j'ai besoin de installez une maison oracle et définissez diverses variables d'environnement.
J'utilise Oracle.DataAccess dans mon code.
8 réponses
vous avez besoin d'un Client Oracle pour vous connecter à une base de données Oracle. La manière la plus simple est d'installer les composants Oracle Data Access Components .
pour minimiser l'empreinte, je suggère ce qui suit :
- utiliser le Microsoft provider pour Oracle (System.Données.OracleClient), qui expédie avec le cadre.
- télécharger le Oracle Instant Client Package - Basic Lite: this est un fichier zip avec (presque) le strict minimum. Je recommande la version 10.2.0.4, qui est beaucoup plus petite que la version 11.1.0.6.0.
- Décompresser les fichiers suivants dans un dossier spécifique :
- v10 :
- ici.dll
- orannzsbb10.dll
- oraociicus10.dll
- v11 :
- ici.dll
- orannzsbb11.DLL
- oraocie11.dll
- v10 :
- sur une plate-forme x86, ajouter la DLL pour Visual Studio 2003 (msvcr71.dll) à ce dossier, comme Oracle guys oublié de lire ce ...
- ajouter ce dossier à la variable D'environnement PATH.
- utilisez la méthode nom de connexion facile dans votre application pour se débarrasser de l'infâme TNSNAMES.Ora fichier de configuration. On dirait:
sales-server:1521/sales.us.acme.com
.
cela représente environ 19Mb (v10).
si vous ne vous souciez pas de partager ce dossier entre plusieurs applications, une alternative serait d'envoyer les DLLs mentionnés ci-dessus avec vos binaires d'application, et de sauter l'étape de définition du chemin.
Si vous devez absolument utiliser le fournisseur Oracle (Oracle.DataAccess), vous aurez besoin de :
- ODP .NET 11.1.0.6.20 (la première version qui fonctionnerait avec Instant Client).
- client instantané 11.1.0.6.0, évidemment.
notez que je n'ai pas testé cette dernière configuration...
à partir de 2014, le OPD.NET, Managed Driver is the smallest footprint.
voici une comparaison de l'utilisation du code avec les versions non gérées suggérées dans les réponses précédentes (périmées).: http://docs.oracle.com/cd/E51173_01/win.122/e17732/intro005.htm#ODPNT148
vous aurez besoin de télécharger ces dlls et la référence Oracle.ManagedDataAccess.dll
dans votre projet:
Télécharger le ODP.NET, pilote géré version Xcopy seulement
Voici une empreinte de pied typique que vous devrez empaqueter avec votre version:
-
Oracle.ManagedDataAccess.dll
-
Oracle.ManagedDataAccessDTC.dll
tous ensemble, un whopping 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:
- Téléchargez le paquet" ODAC 11.2 Release 3 (11.2.0.2.1) with Xcopy Deployment " à partir de oracle.com (53 MB), et extraire le ZIP.
- collecter les DLLs suivantes: oci.dll (1 Mo), oraocie11.dll (130 Mo!), OraOps11w.dll (0.4 MB), Oracle.DataAccess.dll (1 MB). Le reste peut être supprimé, et rien ne doit être installer.
- ajouter une référence à Oracle.DataAccess.dll, ajouter
using Oracle.DataAccess.Client;
à votre code et maintenant vous pouvez utiliser des types commeOracleConnection
,OracleCommand
etOracleDataReader
pour accéder à une base de données Oracle. Voir la documentation de classe pour plus de détails. Il n'est pas nécessaire d'utiliser le tnsnames.ora fichier de configuration, seul le connection string doit être réglé correctement. - les 4 DLLs ci-dessus doivent être déployés le long avec votre exécutable.
de cette façon vous permet de vous connecter avec ODP.net en utilisant 5 fichiers redistribuables à partir d'oracle:
Edit: Dans le cas où le blog tous les descend, voici un bref résumé...
- ici.dll
- Oracle.DataAccess.dll
- oraociicus11.dll
- OraOps11w.dll
- orannzsbb11.dll
- oraocci11.dll
- ociw32.dll
assurez-vous que vous obtenez tous ces DLL de la même ODP.Net distribution / ODAC pour éviter les conflits de numéros de version, et les mettre tous dans le même dossier que votre EXE
DevArt http://www.devart.com / , anciennement CoreLab (crlab.com) fournit un client pur-c # Oracle. C'est une seule dll, et ça marche très bien.
Voici une mise à jour pour Oracle 11.2.0.4.0 . J'ai eu du succès avec la procédure suivante sur Windows 7 en utilisant System.Data.OracleClient
.
1. Télécharger Instant Package Client - Base Lite : Windows 32 Bits ou 64 Bits .
2. copier les fichiers suivants à un endroit dans votre chemin du 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. construisent une chaîne de connexion qui omet la nécessité de noms.ora .
(voir exemples dans le programme d'essai ci-dessous).)
4. Run ce programme C # minimum 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 " système.Données.OracleClient nécessite Oracle client software version 8.1.7" , voir cette question .
ODAC xcopy vous permettra de vous en sortir avec environ 45MB. http://www.oracle.com/technology/software/tech/windows/odpnet/index.html
j'ai trouvé ce post sur le forum Oracle très utile aussi bien:
comment configurer Oracle Instant Client avec Visual Studio
Remarque: Le ADO.NET l'équipe dévalorise le système.Données.OracleClient ainsi pour les projets futurs que vous devez utiliser ODP.NET
Reproduction:
configurer les variables d'environnement suivantes:
- marque bien sûr, aucun autre répertoire oracle n'est dans votre chemin
- paramétrez votre chemin pointez vers votre client immédiat
- définissez votre TNS_ADMIN pour indiquer où vous donnez des noms.le fichier ora est situé
- définir votre NLS_LANG
- réglez votre ORACLE_HOME à votre client instantané
pour moi, J'ai mis NLS_LANG à
http://download-east.oracle.com/docs/html/A95493_01/gblsupp.htm#634282
j'ai vérifié que c'était en utilisant le bon logiciel client en utilisant l'add-on sqlplus pour le client instantané.
pour moi, j'ai mis: SET NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252
Note: avant toute modification, sauvegardez votre clé de registre Oracle (si exist) et sauvegarder la chaîne de caractères pour toutes les variables d'environnement.