我找到的最佳解决方案是使用Oracle数据访问客户端库,并在连接字符串中包含整个TNS names条目。这使得项目可以很容易地发布到web服务器、ClickOnce等。
以下是在项目中设置Oracle驱动程序所需的步骤:
1) 从“Oracle Data Provider for.NET”包中获取dll
我继续安装了完整的200mb ODAC和Oracle开发人员工具Visual Studio,但您只需要从这个下载四个dll。(您可以直接从安装程序包中提取它们,而不必经历整个安装过程,或者一个较小的下载可能包含所有这些内容。)
2) 在项目中引用dll
搜索Oracle数据访问客户端的安装目录,并将以下四个DLL拖到项目的根目录中:
Oracle.DataAccess.dll
oci.dll
oraciicus11.dll
OraOps11w.dll
设置
复制到输出目录
属性除Oracle.DataAccess.dll之外的所有文件
总是复制
.
低于
项目
-->
添加引用。。。
,单击
浏览
选项卡并选择Oracle.DataAccess.dll文件。
3) 使用带有完整连接字符串的驱动程序(可选)
为了不必担心应用程序部署到的计算机上设置的TNS names文件,我将整个定义放在文件中,如
connectionstrings.com
. 它使连接字符串有点庞大,但消除了我以前遇到的许多TNS名称文件问题:
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=servername)(PORT=ââ1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));User Id=username;Password=********;
这是我用来测试司机的全部课程:
using System;
using System.Data;
using Oracle.DataAccess.Client;
static class Program
{
[STAThread]
static void Main()
{
TestOracle();
}
private static void TestOracle()
{
string connString =
"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)" +
"(HOST=servername)(PORT=ââ1521)))" +
"(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));"+
"User Id=username;Password=********;";
using (OracleConnection conn = new OracleConnection(connString))
{
string sqlSelect = "SELECT * FROM TEST_TABLE";
using (OracleDataAdapter da = new OracleDataAdapter(sqlSelect, conn))
{
var table = new DataTable();
da.Fill(table);
if (table.Rows.Count > 1)
Console.WriteLine("Successfully read oracle.");
}
}
}
}