我一直在寻找这个, 我使用C#开发了Windows Forms App,它必须连接Oracle数据库, 这个应用程序将在许多使用Windows XP和Windows 7的PC上使用 经过长时间的研究,我发现我需要使用OBP.net进行oracle访问,但问题是我无法在每台PC上安装oracle客户端,但是我发现在CodePorject Example中下载5个DLL文件来做同样的工作
OCI Instant Client Data Shared Library
oraociicus10.dll (Basic-Lite version)
oraociei10.dll (Basic version)
Client Code Library
oci.dll
Security Library
orannzsbb10.dll
OCCI Library
oraocci10.dll
但是当我发布应用程序时,它会连接到Oracle数据库 请帮助我如何使用我的Windows窗体应用程序连接Oracle数据库而不安装oracle客户端PC,如果可以通过上述DLLS实现,我该怎么做?
修改
DataTable dt = new DataTable();
OracleConnection Oracle_connection = new OracleConnection();
Oracle_connection.ConnectionString = con;
Oracle_connection.Open();
在调试模式的Oracle_connection.Open();
中有连接超时,我不使用TNSNAMES.ORA,因为我的连接字符串是
Data Source=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.20.2.54)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = PRD))) ;User Id=catering;Password=catering;"`
试图发布它在Windows 7 PC上运行的代码,但在Windows XP上无法运行
System.TypeInitializationException: The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception. ---> Oracle.DataAccess.Client.OracleException The provider is not compatible with the version of Oracle client at Oracle.DataAccess.Client.OracleInit.Initialize()
Dunno如果它与Windows相关或某些DLL丢失
答案 0 :(得分:2)
还有完全托管的.net连接器,即ODP.NET托管驱动程序:
我已经在安装了.NET 4.0框架的Windows 8和Windows XP SP3上进行了测试 - 所有工作都按预期进行。对于部署,只需要1个dll(Oracle.ManagedDataAccess.dll),其重量为6 MB(与即时客户端精简版相比,差不多是40 MB)。
更新:使用托管oracle驱动程序的最佳方式可能是通过NuGet(ODP.NET @ nuget)
答案 1 :(得分:0)
ODP.net对于混合版本号非常挑剔。错误消息:
System.TypeInitializationException:'Oracle.DataAccess.Client.OracleConnection'的类型初始值设定项引发了异常。 ---> Oracle.DataAccess.Client.OracleException提供程序与Oracle.DataAccess.Client.OracleInit.Initialize()
中的Oracle客户端版本不兼容
表示它在某处拾取了错误的客户端DLL版本。当我使用Oracle和Visual C#2010进行一些开发时,我从以下位置下载了ODP.NET库:
http://www.oracle.com/technetwork/developer-tools/visual-studio/downloads/index.html
然后,我为我将要使用的Oracle版本采用了正确的版本,并在我的项目中使用了这些DLL。我不确定再分配的限制是什么。
答案 2 :(得分:0)
看看这个帖子:The provider is not compatible with the version of Oracle client
那里列出的DLL为我做了工作(All与exe在同一个目录中)。