Не могу получить доступ к файлам Microsoft Access (.accdb) с помощью ACE OLEDB, но могу получить доступ к файлам (.mdb) с помощью JET OLEDB

Я пишу исполняемый файл C# и мне нужно проверить, правильно ли указан пароль для базы данных Microsoft Access. Это должно быть в состоянии сделать это как для файлов.mdb, так и для файлов.accdb. Для.mdb я использую JET OLED, и он работает нормально, но JET OLEDB не поддерживает более новые версии Microsoft Access, поэтому я использую ACE OLEDB, но каждый раз получаю сообщение об ошибке. Вот соответствующий метод:

public int CheckPassword(string password, string filePath)
    {
        // Ensure the correct provider for with .mdb(default) or .accdb
        string providerName = "Microsoft.Jet.OLEDB.4.0";

        if (Path.GetExtension(filePath) == ".accdb")
        {
            Console.WriteLine("Changed provider to ACE");
            providerName = "Microsoft.ACE.OLEDB.12.0";
        }
        // Establish access to the file
        var accessBuilder = new OleDbConnectionStringBuilder
        {
            Provider = providerName,
            DataSource = filePath
        };

        accessBuilder["Jet OLEDB:Database Password"] = password;

        // Attempt to enter a password and catch if it is incorrect
        using (var conn = new OleDbConnection(accessBuilder.ConnectionString))
        {
            if (ConnectionState.Open != conn.State)
            {
                try
                {
                    // If it fails here, likely due to an actual bad password.
                    conn.Open();
                    Console.WriteLine("0 - Success: Password Correct");
                }
                catch (OleDbException)
                {
                    // Assumed bad password
                    Console.WriteLine("2 - Error: Password Incorrect");
                    return -1;
                }
            }
        }
        return 0;
    }

Когда я даю ему.accdb, вывод:

Changed provider to ACE
Unhandled Exception: System.Data.OleDb.OleDbException: Cannot open database 
''.  It may not be a database that your application recognizes, or the file 
may be corrupt`.

Когда я даю ему.mdb, вывод:

0 - Success: Password Correct

Я попытался использовать совершенно новый файл Access, но он все равно выдает ту же ошибку

1 ответ

При использовании Ace вам необходимо добавить ссылку на библиотеку Microsoft ActiveX Data Objects 6.1 и, возможно, Microsoft ActiveX Data Objects Recordset 6.0 Library.

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

Другие вопросы по тегам