Доброго времени суток, уважаемые коллеги!
Помогите, пожалуйста. Столкнулся с не знакомой мне ранее проблемой.
Есть вполне себе работающая база
MS Access, формата
*.mdb, работающая с десктопным клиентом. Пароль на доступ к базе задан непечатными символами типа
\u0127 \u0027 \u0087, и им подобными. Соответственно ввести их с клавиатуры невозможно - а можно только получить доступ программно, задав соответствующий пароль в параметрах подключения. Да, и в любом случае пароль менять нельзя.
Старый клиент был написан на
Delphi, написан давно, но мне известна работающая функция, собирающая пароль для подключение к базе:
//получение пароля
function TDBAccess.GetDBPass: string;
begin
Result := Chr(27) + Chr(8) + Chr(30) + Chr(23) +
Chr(31) + Chr(22) + Chr(2) + Chr(24) + Chr(127);
end;
Сейчас клиент пишется на
C#, там функции
Chr() нет в принципе, и, соответственно, перекодировку символов и сборку строки пароля делаем вручную. Перепробовали кучу вариантов - не получается никак!
Вот основные варианты:
// строка подключения
DBConnection = new OleDbConnection();
DBConnection.ConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Jet OLEDB:Database Password={1};", _path, _pass);
Вариант#1.
string _pass = @"\u0027\u0008\u0030\u0023\u0031\u0022\u0002\u0024\u0127";
Вариант#2.
var _pass_char = Convert.ToChar(27) + Convert.ToChar(8) + Convert.ToChar(30) + Convert.ToChar(23) + Convert.ToChar(31) + Convert.ToChar(22) + Convert.ToChar(2) + Convert.ToChar(24) + Convert.ToChar(127);
String _pass= Encoding.Default.GetString(_pass_char);
Вариант#3.
var _pass_char =(char)27 + (char)8 + (char)30 + (char)23 + (char)31 + (char)22 + (char)2 + (char)24 + (char)127
String _pass= Encoding.Default.GetString(_pass_char);
Вариант#4.
byte[] _hex_code = new Byte[] { 0x1B, 0x08, 0x1E, 0x17, 0x1F, 0x16, 0x02, 0x18, 0x7F };
String _pass= Encoding.Unicode.GetString(_hex_code);
Соответственно поигрались со всеми вариантами кодовых страниц
var encoding = Encoding.GetEncoding(...)...
Но при открытии соединения:
An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in System.Data.dll
Additional information: Ошибочный пароль.
Или при некоторых CodePage сразу ругается на ошибочную строку подключения.
Подскажите, пожалуйста, кто знает! Может в мелочи какой дело, а мы "паримся".
Спасибо.