与ODP.Net连接时出现ORA-01005错误

时间:2015-08-03 11:06:48

标签: c# oracle odp.net

我正在尝试使用以下代码访问Oracle数据库(版本10.2.0.4.0),但是当调用open方法时,连接会引发“ORA-01005:给出空密码;登录被拒绝”异常。

        var connBuilder = new OracleConnectionStringBuilder();
        connBuilder.DataSource = "(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = MyHost.Address)(PORT = ####)) )(CONNECT_DATA =(SERVICE_NAME = MyService)))";
        connBuilder.UserID = "validUserId";
        connBuilder.Password = "validPassword";
        connBuilder.PersistSecurityInfo = true;
        var connString = connBuilder.ToString();
        using (var con = new OracleConnection(connString))
        {
            con.Open();
        }

如果我更改用户名,则会收到以下内容; “ORA-01017:用户名/密码无效;登录被拒绝”,如果我更改与con.OpenWithNewPassword("validPassword");

的连接上的公开呼叫,情况也是如此

如果我尝试使用已弃用的Oracle客户端,它连接没有问题:

        using (var depCon = new System.Data.OracleClient.OracleConnection
           ("Data Source=MyHost.Address:####/MyService;Persist Security Info=True;
             User ID=validUsername;Password=validPassword;Unicode=True"))
        {
            depCon.Open();
        } 

我(显然)喜欢使用最新的Odp.Net驱动程序,但似乎无法解决这个问题。有没有人有任何想法?

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

当你这样做时它是否有效:

var connBuilder = new Common.DbConnectionStringBuilder();
connBuilder.Add("Data Source", "(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = MyHost.Address)(PORT = ####)) )(CONNECT_DATA =(SERVICE_NAME = MyService)))";
connBuilder.Add("User Id", "validUserId");
connBuilder.Add("Password", "validPassword");

您使用的是哪个版本的ODP.NET?使用“旧”ODP.NET提供程序连接到具有区分大小写密码的“新”Oracle数据库时存在已知问题,请参阅此处:https://community.oracle.com/message/2198228

为了验证在您的数据库上运行此命令:

ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;

答案 2 :(得分:1)

区分大小写和ODP.Net驱动程序以及不同的数据库版本的问题应该是一个简单的修复。将您的连接字符串密码用引号(“)括起来,例如Password=\"password\";,这应保留密码大小写