我正在使用此代码,但收到的错误是“对象引用未设置为对象的实例”。在con.open()?我做错了什么?
我已经下载并安装了ODAC组件版本10,11,12,但是在最新版本失败的情况下尝试了每个版本,但仍然是同样的错误
using Oracle.DataAccess.Client;
namespace WindowsFormsApplication1
{
class OraTest
{
public OracleConnection con = new OracleConnection();
public void Connect()
{
con.ConnectionString = "Data Source=(DESCRIPTION= (ADDRESS = (PROTOCOL = TCP)(HOST =myip) (PORT = myport))(CONNECT_DATA = (SERVER = dedicated)(SERVICE_NAME = mydb)));User ID=myid;Password=mypass;";
con.Open(); //error here
}
public void Close()
{
con.Close();
con.Dispose();
}
}
答案 0 :(得分:2)
如果在Connect()中添加try / catch块,您将能够捕获错误。
例如:
When opening an oracle connection, connection object is null
我添加了try catch块,它返回了ORA12154 - TNS无法 得到解决。经过一些研究,我在我的tnsnames.ora中添加了一个SID 在我的ODP for .NET Oracle主路径中的文件,它工作
另请参阅Troubleshooting Oracle Net Services以解决Oracle客户端可能出现的连接问题(例如C#程序)。
但您的第一步绝对是确定Oracle级错误(例如,ORA-12543(无法连接到服务器主机)或TNS-12514(找不到服务名称)
public void ShowOracleException()
{
OracleConnection myConnection =
new OracleConnection("Data Source=Oracle8i;Integrated Security=yes");
try
{
myConnection.Open();
}
catch (OracleException e)
{
string errorMessage = "Code: " + e.Code + "\n" +
"Message: " + e.Message;
System.Diagnostics.EventLog log = new System.Diagnostics.EventLog();
log.Source = "My Application";
log.WriteEntry(errorMessage);
Console.WriteLine("An exception occurred. Please contact your system administrator.");
}
}
con.ConnectionString = xyz
工作很重要,但是以下`con.Open()'失败。这意味着.Net正在创建C#对象,但是当您尝试使用它时Oracle / TNS失败。
其他建议:
重新阅读
When opening an oracle connection, connection object is null。
阅读所有建议,包括关于“连接字符串中的数据源”的建议。
专注于您的连接字符串。如果可能的话,在OracleConnection()构造函数中指定连接字符串也没什么坏处。这是另一个链接:
如果您可以使用某些其他 Oracle客户端验证PC上的连接,除了您的C#/ .Net程序之外,这将会很棒。使用正确的用户名/密码验证您是否正在使用正确的TNS主机和服务。例如,您可能有SQLDeveloper或sqlplus。
最后,重新阅读TNS故障排除链接:
https://docs.oracle.com/cd/E11882_01/network.112/e41945/trouble.htm#NETAG016
答案 1 :(得分:2)
请浏览此链接
Oracle Data Provider for .NET入门(C#版本)
答案 2 :(得分:0)
对我来说,同样的错误对我来说只是简单地从'普通'Oracle DataAccess库切换到'托管'版本。 这是一个非常容易的变化 -
Oracle.ManagedDataAccess
库使用以下内容替换Oracle客户端代码顶部的现有use
语句:
using Oracle.ManagedDataAccess.Client;
using Oracle.ManagedDataAccess.Types;
在您的exe
Oracle.ManagedDataAccess.dll
文件
醇>