C# 如何使用ODAC连接到oracle数据库#
我正在使用这段代码,但在con.open()处出现错误“对象引用未设置为对象的实例”?我做错了什么 我已经下载并安装了ODAC组件版本10、11、12,并在最新版本失败时尝试了每一个版本,但仍然存在相同的错误C# 如何使用ODAC连接到oracle数据库#,c#,oracle,odac,C#,Oracle,Odac,我正在使用这段代码,但在con.open()处出现错误“对象引用未设置为对象的实例”?我做错了什么 我已经下载并安装了ODAC组件版本10、11、12,并在最新版本失败时尝试了每一个版本,但仍然存在相同的错误 using Oracle.DataAccess.Client; namespace WindowsFormsApplication1 { class OraTest { public OracleConnection con = new OracleC
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();
}
}
如果在Connect()中添加try/catch块,则可以捕获错误 例如: 我添加了try-catch块,它返回ORA12154-TNS无法返回 解决。经过一些研究,我在tnsnames.ora中添加了一个SID 我的ODP for.NET Oracle主路径中的文件,它运行正常 有关Oracle客户端(如您的C#程序)可能出现的连接问题的疑难解答,请参见 但您的第一步绝对是确定Oracle级别的错误(例如,ORA-12543(无法连接到服务器主机)或TNS-12514(找不到服务名称) 重要的是,
con.ConnectionString=xyz
工作正常,但以下“con.Open()”失败。这意味着.Net正在创建C#对象,但Oracle/TNS在尝试使用它时失败
其他建议:
- 重读 阅读所有建议,包括关于“连接字符串中的数据源”的建议
- 关注连接字符串。如果可能的话,在OracleConnection()构造函数中指定连接字符串不会有什么坏处。下面是另一个链接:
- 如果您可以验证PC与C#/.Net程序之外的其他Oracle客户端的连接,这将非常好。为了验证您正在使用正确的用户名/密码与正确的TNS主机和服务进行通信。例如,您可能有SQLDeveloper或sqlplus
- 最后,重新阅读TNS疑难解答链接:
con.ConnectionString=xyz
工作正常,但以下“con.Open()”失败。这意味着.Net正在创建C#对象,但Oracle/TNS在尝试使用它时失败
其他建议:
- 重读 阅读所有建议,包括关于“连接字符串中的数据源”的建议
- 关注连接字符串。如果可能的话,在OracleConnection()构造函数中指定连接字符串不会有什么坏处。下面是另一个链接:
- 如果您可以验证PC与C#/.Net程序之外的其他Oracle客户端的连接,这将非常好。为了验证您正在使用正确的用户名/密码与正确的TNS主机和服务进行通信。例如,您可能有SQLDeveloper或sqlplus
- 最后,重新阅读TNS疑难解答链接:
请浏览此链接 使用Oracle.NET数据提供程序(C#版本)入门
对于我来说,发生同样错误的原因是简单地从“普通”Oracle DataAccess库切换到“托管”版本。 这是一个非常容易做出的改变-
Oracle.ManagedDataAccess
库中use
语句替换为以下语句:
using Oracle.ManagedDataAccess.Client;
using Oracle.ManagedDataAccess.Types;
Oracle.ManagedDataAccess.dll
文件与exe一起包括在内对于我来说,在同样的错误下,简单地从“普通”Oracle DataAccess库切换到“托管”版本是有效的。 这是一个非常容易做出的改变-
Oracle.ManagedDataAccess
库中use
语句替换为以下语句:
using Oracle.ManagedDataAccess.Client;
using Oracle.ManagedDataAccess.Types;
Oracle.ManagedDataAccess.dll
文件与exe一起包括在内try-catch不起作用,错误以相同的方式围绕调试模式突出显示行Q:您在try/catch中获得的异常对象中是否查找任何内部异常?另外:我更新了我的帖子,其中包含一个捕获OracleException对象的MSDN示例。内部异常为我提供了以下“System.NullReferenceException:object refe”rence未设置为对象的实例。位于Oracle.DataAccess.Client.OracleConnection.Open()'对于您的exception示例,其相同的消息caughtWorked,我必须删除引用并添加旧版本的引用!,感谢各位的回复,efforttry catch不起作用,错误以相同的方式围绕调试模式抛出,突出显示行问:您在try/c中获得的异常对象中是否查找任何内部异常atch?另外:我更新了我的帖子,其中有一个捕捉OracleException对象的MSDN示例。内部异常为我提供了“System.NullReferenceException:对象引用未设置为对象的实例。位于Oracle.DataAccess.Client.OracleConnection.Open()“对于您的Exception示例,它的相同消息caughtWorked,我必须删除引用并添加旧版本的引用!感谢各位的回复和努力您安装了Oracle客户端吗?您安装了Oracle客户端吗?