Не могу получить доступ к файлам Microsoft Access (.accdb) с помощью ACE OLEDB, но могу получить доступ к файлам (.mdb) с помощью JET OLEDB - PullRequest
0 голосов
/ 04 января 2019

Я пишу исполняемый файл 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, но он все равно выдает ту же ошибку

...