我想从使用微软弃用的System.Data.OracleClient DLL迁移.Net 4.5.2应用程序到使用Oracle的拥有Oracle.ManagedDataAccess.dll(使用Nuget包v12.1.1.24160419)。在问题的机器上,我安装了Oracle客户端,并且设置了原始应用程序成功用于连接的tnsnames.ora文件。我也可以成功连接Oracle的SqlPlus和SqlDeveloper工具。但是,如果我尝试使用Oracle DLL,我的应用程序无法连接。无法连接到Oracle 11g数据库使用Oracle.ManagedDataAccess.dll,而不是Microsoft System.Data.OracleClient
为了将这个简单介绍给我,我创建了一个非常简单的控制台应用程序(代码如下)来查看发生了什么。如果该项目引用了Microsoft DLL(用适当的using语句),它将连接,但如果相反,我引用Oracle.ManagedDataAccess.dll(用适当的using语句),报告说有TNS错误:
ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA
我试过向tnsnames.ora文件添加一个SERVICE_NAME子句,但没有任何改进。
我还需要做什么?
测试程序是:
using Oracle.ManagedDataAccess.Client;
using System;
using System.Collections.Generic;
//using System.Data.OracleClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace oracleconnect
{
class Program
{
static void Main(string[] args)
{
try
{
InitializeDBConnection();
}
finally
{
if (_con.State==System.Data.ConnectionState.Open)
_con.Close();
}
}
static private OracleConnection _con;
private const string connectionString = "Data Source=oracledbserver2;User ID=MATTESTNHSYS;Password=thePassword";
private static void InitializeDBConnection()
{
_con = new OracleConnection();
_con.ConnectionString = connectionString;
_con.Open();
}
}
}
你可以显示你的tnsnames文件吗? – nvoigt
ORACLEDBSERVER2 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS =(PROTOCOL = TCP)(HOST = OracleDBServer2)(PORT = 1521)) ) (CONNECT_DATA = (SID = orcdb10g) (SERVER = DEDICATED) ) ) –