Oracle ManagedDataAccess和登录时的特殊字符
本文关键字:特殊字符 登录 ManagedDataAccess Oracle | 更新日期: 2023-09-27 18:24:57
我在Oracle.ManagedDataAccess
中遇到了一个问题,即似乎不可能使用非ASCII连接字符串(非ASCII只是一个经验猜测)。
这一切都很好:
var cs = string.Format("Data Source={2};Password={1};User ID={0}", "user", "pwd", "mydb");
var connection = new OracleConnection(cs);
connection.Open();
但这不起作用(å、ä和ö是瑞典字母):
var cs = string.Format("Data Source={2};Password={1};User ID={0}", "åäö", "lösenord", "mydb");
var connection = new OracleConnection(cs);
connection.Open();
并投掷
Oracle.ManagedDataAccess.Client.OracleException: ORA-01017: invalid username/password; logon denied
两个用户都可以通过sqldeveloper登录。
有人知道解决这个问题的方法吗?或者这是Oracle的ManagedDataAccess
(好吧,DataAccess
)库的已知限制吗?
忍者的东西,比如使用Chr(int)
,在登录时很难做到。
DB信息:
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET WE8MSWIN1252
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 11.2.0.1.0
编辑:
还测试了这一点(即添加引号,就像OracleConnectionStringbuilder
对"="所做的那样):
var cs = string.Format("Data Source={2};Password={1};User ID={0}", "'"åäö'"", "'"lösenord'"", "mydb");
var connection = new OracleConnection(cs);
connection.Open();
我刚刚遇到了同样的问题,从2016年9月16日(4.121.2.20150926)起,最新的ODP托管驱动程序版本解决了这个问题。
请小心从Oracle网站的32位部分下载(http://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html)因为Oracle似乎错过了将其添加到64位部分的机会,该部分的最新版本仍从2015年10月开始。有关更多信息,请参阅我在Oracle论坛上提出的问题:https://community.oracle.com/message/14037653#14037653
这让你有点想知道Oracle在做什么,因为他们在托管驱动程序中已经有3年不支持特定语言的字符了。。。
我的用户名中有特殊字符(例如"=")的问题。我使用OracleConnectionStringBuilder解决了这个问题。它一定有某种编码。试试这个,我希望它对你的问题也有帮助。
OracleConnectionStringBuilder connBuilder = new OracleConnectionStringBuilder();
connBuilder.DataSource = "mydb";
connBuilder.UserID = "åäö";
connBuilder.Password = "lösenord";
var connection = new OracleConnection(connBuilder.ToString());
connection.Open();