Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';t使用ODP.NET的Windows身份验证连接到Oracle_C#_Oracle_Ado.net_Database Connection_Odp.net - Fatal编程技术网

C# Can';t使用ODP.NET的Windows身份验证连接到Oracle

C# Can';t使用ODP.NET的Windows身份验证连接到Oracle,c#,oracle,ado.net,database-connection,odp.net,C#,Oracle,Ado.net,Database Connection,Odp.net,我已将Oracle数据库配置为NTS身份验证,并将Windows登录设置为数据库中的用户 我可以使用命令sqlplus/登录到数据库 我还可以使用System.Data.OracleClient provider for ADO.NET使用Windows身份验证进行连接 例如,以下代码段可以工作: DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OracleClient"); DbConnection

我已将Oracle数据库配置为NTS身份验证,并将Windows登录设置为数据库中的用户

我可以使用命令
sqlplus/
登录到数据库

我还可以使用System.Data.OracleClient provider for ADO.NET使用Windows身份验证进行连接

例如,以下代码段可以工作:

DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OracleClient");
DbConnection connection = factory.CreateConnection();
connection.ConnectionString = "Data Source=//localhost/Test; Integrated Security=yes";
connection.Open();
但是,我无法使用Oracle.DataAccess.Client(ODP.NET)使用Windows身份验证进行连接

此代码块导致以下异常:

Oracle.DataAccess.Client.OracleException未处理 Message=ORA-1017:用户名/密码无效;拒绝登录

根据此链接,我应该能够使用提供的连接字符串创建到Oracle的ODP.NET连接:

为什么ODP.NET客户端不允许我连接,而(不推荐使用的)Microsoft客户端允许我连接

2007年,以下线程讨论了此问题,但未提供任何解决方案:


这是一个showstopper。

使用ODP.net 11和此连接字符串(在Oracle客户端中使用tnsnames.ora文件来定义DLGP)对我来说效果很好:
Data Source=DLGP;用户Id=/;密码=


您的sqnet.ora文件需要正确设置才能正常工作,但如果SQLPlus可以连接,应该已经是这样了。你只有一个甲骨文家吗?如果ODP.net选择了第二个可以很好地把事情搞砸(这可能会发生,具体取决于您如何安装)。

没错,ODP客户端安装在它自己的Oracle主页上,该主页没有包含所有重要的sqlnet.AUTHENTICATION\u SERVICES=(NTS)行的必要sqlnet.ora(我使用的是ezconnect而不是tnsnames.ora)。我现在正在使用在上找到的xcopy部署hack,并将sqlnet.ora放在与dll相同的目录中,似乎工作得很好!谢谢,我现在就接受这个答案。或者,您可以在application.config文件(或machine.config)中放置一个SQLNET.AUTHENTICATION\u SERVICES条目:()
DbProviderFactory factory = DbProviderFactories.GetFactory("Oracle.DataAccess.Client");
DbConnection connection = factory.CreateConnection();
connection.ConnectionString = "Data Source=//localhost/Test; User Id=/";
connection.Open();