1

Я пишу утилиту для работы с кучей устаревших файлов Access'97 .MDB. Мне нужно подключиться к ним программно, и мне не разрешено преобразовывать файлы в более новую версию Access. До сих пор ничего особенного. Большинство из них защищен пароль, но пароль действительно странно:Использование символов non-ascii в строке строки подключения

Password File

Я узнал, трудный путь, что делает эту строку текста по умолчанию для текстового поля нарушит мой код. Я могу прочитать пароль и загрузите его в текстовое поле на моей форме со следующим кодом:

FileStream Reader = new FileStream(openFileDialog2.FileName, FileMode.Open); 
byte[] StringData = new byte[Reader.Length]; 
Reader.Read(StringData, 0, StringData.Length); 
String strPassword = Encoding.Default.GetString(StringData); 

txtReadPassword.Text = strPassword; 
strDatabasePassword = strPassword; 

Если я пишу строку на консоль в этот момент последний символ не появляется, но capitol E с акцентом. Я генерация строки подключения с помощью чтения пароля с помощью следующего кода:

public static string GetConnectionString(string strDataSource, string strPassword) 
     { 
      return String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Mode=Share Deny None;data source={0};password={1};", strDataSource, strPassword,"Jet OLEDB:Database "); 
     } 

и строки подключения возвращенной действительно содержат специальные символы:

enter image description here

пароля правильный, как я могу скопировать/вставить его в доступ и открыть базу данных. Когда я пытаюсь использовать эту строку подключения с помощью этого кода:

private void btnConnectToDatabase_Click(object sender, EventArgs e) 
     { 
      System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection(); 

       try 
       { 
        connection.ConnectionString = strConnectionString; 
        connection.Open(); 
        Console.WriteLine("Connected!"); 
       } 
       catch (Exception ex) 
       { 
        MessageBox.Show("Failed to connect to data source" + ex.ToString()); 
       } 
     } 

Я получаю этот результат:

enter image description here

Линия 78 является "connection.ConnectionString = strConnectionString;" сверху. Индекс 137, я считаю, является последним двумя символами в строке соединения, которые являются странными символами в пароле.

Приложение «no-longer-supported», которое сгенерирует и открывает эти .MDB-файлы, подключается к ним программно, поэтому должен быть способ сделать это. Решение ускользнуло меня уже три дня, поэтому я ищу помощь.

+0

Вы пытались использовать unicode: String strPassword = Encoding.Unicode.GetString (StringData); – Gustav

+0

Я не могу воссоздать вашу проблему. У моего приложения C# не было проблем с открытием файла базы данных Access97, чей пароль базы данных был '54BÈ┘'. Однако мне пришлось изменить параметр строки подключения с '; password = 54BÈ┘' на'; Jet OLEDB: пароль базы данных = 54BÈ┘', в противном случае Jet OLEDB подумал, что в базе данных включена защита уровня пользователя (ULS) и жаловалась о том, чтобы не найти файл информации рабочей группы. –

+0

Gustav, я пробовал это, и пароль становится китайским иероглифом ... и не работает. – Pierce

ответ

2

@Pierce. Эти самые удивительные спецификации Microsoft для количества символов в пароле в зависимости от версии Access. Так что, как и рад, Access 2003 и ниже - 14 символов, а Access 2007+ - 20 символов. Дайте 20 символов выстрел, так как вы используете 22 символа в вашем примере. МИЛАЯ!

+0

Убей меня в лицо! Мы дважды проверили пароль, конвертировав базу данных, открыв ее в 2010 году и выполнив копию/вставку пароля - она ​​работала нормально. Как оказалось, Access был TRUNCATING паролем до 20 символов, но поскольку он был замаскирован, он никогда меня не регистрировал. Я выкопал старую установку Access '97, и копия/вставка пароля НЕ работала! Если вы сбросите два последних нечетных символа, пусть это и получится! Это никогда не был код - это была комбинация плохого пароля, и Access бросал нам кривую мяч, когда мы проверяли пароль на достоверность, обрезая пасту. – Pierce

+0

SWEET! Бруски в одной руке, малыш в другой, и впитывают какую-то материнскую природу. – Malibu

0

Для тех, кто до сих пор есть эта проблема, несмотря на соответствующую длину пароля (до 14/20 символов), инкапсулировать значение пароля внутри либо апострофы или спасшийся кавычки:

"...;Password=\"passwordÈ┘\"" 

или

"..;Password='passwordÈ┘'" 

 Смежные вопросы

  • Нет связанных вопросов^_^