C# 使用odp.net和OCI从C连接到Oracle#
我一直在读关于如何从C#win应用程序连接到oracle数据库的文章,但我一直在“碰壁”。我已经决定使用odp.net和OCI,这样客户端计算机就不需要安装客户端,但我无法让它工作 我有一个小的测试应用程序,代码如下所示,在我的解决方案中,我添加了来自oracle OCI的以下dll:OCI.dll、orannzsbb11.dll和oraociicus11.dll。它们都与最终的.exe文件放在一起 测试代码:C# 使用odp.net和OCI从C连接到Oracle#,c#,oracle,.net-4.0,odp.net,oracle-call-interface,C#,Oracle,.net 4.0,Odp.net,Oracle Call Interface,我一直在读关于如何从C#win应用程序连接到oracle数据库的文章,但我一直在“碰壁”。我已经决定使用odp.net和OCI,这样客户端计算机就不需要安装客户端,但我无法让它工作 我有一个小的测试应用程序,代码如下所示,在我的解决方案中,我添加了来自oracle OCI的以下dll:OCI.dll、orannzsbb11.dll和oraociicus11.dll。它们都与最终的.exe文件放在一起 测试代码: private static string CONNECTION_STRING =
private static string CONNECTION_STRING =
"User Id=hr;Password=hr;Data Source=(DESCRIPTION=" +
"(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))" +
"(CONNECT_DATA=(SID=XE)));Connect Timeout=15;";
static void Main(string[] args)
{
try
{
using (var conn = new OracleConnection(CONNECTION_STRING))
{
conn.Open();
Console.WriteLine("Connection is: {0}", conn.State.ToString());
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
问题已经出现在using(…)语句中,程序只是停止工作,我没有得到响应。要让OCI正常工作,我需要做什么?通常在使用OCI或Oracle数据库产品时,应该定义Oracle_HOME环境变量并指向Oracle安装。在库旁边,Oracle确实使用了一些其他支持文件,它正在Oracle_HOME中搜索这些文件。通常,LD_LIBRARY_路径定义为ORACLE_HOME/lib。尝试使用,这很可能比手动选择几个lib要好。 这里有一篇关于如何让它工作的好文章:您可以省略关于sqlplus的部分 从otn上的实例客户端页面: 即时客户端下载 请注意,Instant Client是根据Instant Client的单独OTN开发和分发许可证提供的,该许可证允许大多数许可证持有人免费下载、重新分发和在生产环境中部署。如有必要,请咨询许可证和您的法律部门以获得澄清。有关即时客户端的更多信息,请参阅官方即时客户端网站
看起来您可以重新分发实例客户端。请阅读Oracle for ODAC的安装说明。本文还讨论了常见的设置问题
您还需要在解决方案中包含对Oracle.DataAccess的引用以及“使用Oracle.DataAccess.Client;”对于您的连接,您可能希望使用可以通过tnsnames文件解析的Oracle SID(从cmd提示符尝试tnsping)。为了能够在不安装完整客户端的情况下使用ODP.NET,您需要使用这些包(不能仅从完整的客户端复制库):
- 有关要求的说明
- 从Oracle v10开始,我强烈建议使用来简化连接字符串。这个怎么样:
private const string CONNECTION_STRING="User Id=hr;Password=hr;"+ +"Data Source=127.0.0.1:1521/XE;Connect Timeout=15;";