使用Visual Studio连接Oracle报ORA-01017错误,SQL Plus可正常连接求排查
以下是几种常见的原因及对应解决办法:
密码大小写严格匹配问题
Oracle默认不区分密码大小写,但如果数据库开启了SEC_CASE_SENSITIVE_LOGON=TRUE,SQL Plus可能自动忽略大小写,而VS使用的ODP.NET驱动会严格校验凭据。比如你在SQL Plus输入小写密码能登录,但VS里必须输入和账户创建时完全一致的大小写密码。
解决:在VS的连接字符串里输入精确大小写的密码;或者执行ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON=FALSE;关闭大小写校验(需DBA权限)。Oracle客户端与VS驱动版本不兼容
SQL Plus用的是本地Oracle客户端,而VS依赖的ODP.NET驱动版本如果和服务器端不匹配,可能导致凭据校验失败。比如服务器是Oracle 19c,但VS用的是ODP.NET 11g驱动。
解决:将ODP.NET驱动更新到与Oracle服务器对应的版本;或者检查系统PATH环境变量,确保VS优先使用和SQL Plus相同的Oracle客户端路径。密码含特殊字符未转义
如果密码里有@、&、;这类特殊字符,SQL Plus里用双引号包裹即可正常输入,但VS的连接字符串里需要正确处理。比如密码是P@ssw0rd,直接写在连接字符串里会被错误解析。
解决:把密码用双引号包裹,比如连接字符串写成:Data Source=ORCL;User Id=MYUSER;Password="P@ssw0rd";;或者对特殊字符进行转义(如@转成\@)。连接池缓存旧凭据
VS的数据库连接池可能缓存了之前错误的凭据,即使你现在输入正确信息,也会用旧凭据尝试连接。
解决:在连接字符串里临时添加Pooling=False禁用连接池,测试是否能正常连接;或者关闭VS后重新打开,清空连接池缓存。DSN配置错误
如果VS通过ODBC数据源(DSN)连接,可能DSN里保存的用户名/密码和你手动输入的不一致,或者DSN指向了其他数据库实例。
解决:直接使用手动输入的连接字符串(不依赖DSN);或者打开ODBC数据源管理器,重新配置DSN的凭据和服务器地址。
内容的提问来源于stack exchange,提问作者Rishikesh Chava

