Я пишу утилиту для работы с кучей устаревших файлов Access'97 .MDB. Мне нужно подключиться к ним программно, и мне не разрешено преобразовывать файлы в более новую версию Access. До сих пор ничего особенного. Большинство из них защищен пароль, но пароль действительно странно:Использование символов non-ascii в строке строки подключения
Я узнал, трудный путь, что делает эту строку текста по умолчанию для текстового поля нарушит мой код. Я могу прочитать пароль и загрузите его в текстовое поле на моей форме со следующим кодом:
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 ");
}
и строки подключения возвращенной действительно содержат специальные символы:
пароля правильный, как я могу скопировать/вставить его в доступ и открыть базу данных. Когда я пытаюсь использовать эту строку подключения с помощью этого кода:
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());
}
}
Я получаю этот результат:
Линия 78 является "connection.ConnectionString = strConnectionString;" сверху. Индекс 137, я считаю, является последним двумя символами в строке соединения, которые являются странными символами в пароле.
Приложение «no-longer-supported», которое сгенерирует и открывает эти .MDB-файлы, подключается к ним программно, поэтому должен быть способ сделать это. Решение ускользнуло меня уже три дня, поэтому я ищу помощь.
Вы пытались использовать unicode: String strPassword = Encoding.Unicode.GetString (StringData); – Gustav
Я не могу воссоздать вашу проблему. У моего приложения C# не было проблем с открытием файла базы данных Access97, чей пароль базы данных был '54BÈ┘'. Однако мне пришлось изменить параметр строки подключения с '; password = 54BÈ┘' на'; Jet OLEDB: пароль базы данных = 54BÈ┘', в противном случае Jet OLEDB подумал, что в базе данных включена защита уровня пользователя (ULS) и жаловалась о том, чтобы не найти файл информации рабочей группы. –
Gustav, я пробовал это, и пароль становится китайским иероглифом ... и не работает. – Pierce