diff --git a/src/System.Data.Jet/AdoxSchema.cs b/src/System.Data.Jet/AdoxSchema.cs index 82c18f9..1c15343 100644 --- a/src/System.Data.Jet/AdoxSchema.cs +++ b/src/System.Data.Jet/AdoxSchema.cs @@ -59,14 +59,15 @@ namespace System.Data.Jet if (JetStoreDatabaseHandling.IsConnectionString(fileNameOrConnectionString) && JetConnection.GetDataAccessProviderType(fileNameOrConnectionString) == DataAccessProviderType.Odbc) { - var oldCbs = new DbConnectionStringBuilder(true) {ConnectionString = fileNameOrConnectionString}; - var newCbs = new DbConnectionStringBuilder {ConnectionString = connectionString}; + var oldCsb = new DbConnectionStringBuilder(true) {ConnectionString = fileNameOrConnectionString}; + var newCsb = new DbConnectionStringBuilder {ConnectionString = connectionString}; - newCbs.SetUserId(oldCbs.GetUserId(DataAccessProviderType.Odbc), DataAccessProviderType.Odbc); - newCbs.SetPassword(oldCbs.GetPassword(DataAccessProviderType.Odbc), DataAccessProviderType.Odbc); - newCbs.SetSystemDatabase(oldCbs.GetSystemDatabase(DataAccessProviderType.Odbc), DataAccessProviderType.Odbc); + newCsb.SetUserId(oldCsb.GetUserId(DataAccessProviderType.Odbc), DataAccessProviderType.OleDb); + newCsb.SetPassword(oldCsb.GetPassword(DataAccessProviderType.Odbc), DataAccessProviderType.OleDb); + newCsb.SetSystemDatabase(oldCsb.GetSystemDatabase(DataAccessProviderType.Odbc), DataAccessProviderType.OleDb); + newCsb.SetDatabasePassword(oldCsb.GetDatabasePassword(DataAccessProviderType.Odbc), DataAccessProviderType.OleDb); - connectionString = newCbs.ConnectionString; + connectionString = newCsb.ConnectionString; } return connectionString; @@ -706,6 +707,7 @@ ALTER TABLE `#Dual` ADD CONSTRAINT `SingleRecord` CHECK (`ID` = 1)"; public override void Dispose() { + _connection.Dispose(); _catalog.Dispose(); } diff --git a/src/System.Data.Jet/DaoSchema.cs b/src/System.Data.Jet/DaoSchema.cs index 6a769c7..c6a03c4 100644 --- a/src/System.Data.Jet/DaoSchema.cs +++ b/src/System.Data.Jet/DaoSchema.cs @@ -39,17 +39,24 @@ namespace System.Data.Jet var userId = csb.GetUserId(); var password = csb.GetPassword(); var systemDatabase = csb.GetSystemDatabase(); + var databasePassword = csb.GetDatabasePassword(); if (!string.IsNullOrEmpty(systemDatabase)) { _dbEngine.SystemDB = systemDatabase; } - _workspace = _dbEngine.CreateWorkspace(string.Empty, userId ?? "admin", password ?? string.Empty, /*WorkspaceTypeEnum.dbUseJet*/ 2); + _workspace = _dbEngine.CreateWorkspace(string.Empty, userId ?? "Admin", password ?? string.Empty, /*WorkspaceTypeEnum.dbUseJet*/ 2); try { - _database = _workspace.OpenDatabase(dataSource, /* Exclusive */ false, /* ReadOnly */ true, string.Empty); + _database = _workspace.OpenDatabase( + dataSource, + /* Exclusive */ false, + /* ReadOnly */ true, + "MS Access" + (string.IsNullOrEmpty(databasePassword) + ? null + : $";PWD={databasePassword}")); } catch { diff --git a/src/System.Data.Jet/DbConnectionStringBuilderExtensions.cs b/src/System.Data.Jet/DbConnectionStringBuilderExtensions.cs index 41f1a50..4627c91 100644 --- a/src/System.Data.Jet/DbConnectionStringBuilderExtensions.cs +++ b/src/System.Data.Jet/DbConnectionStringBuilderExtensions.cs @@ -8,40 +8,40 @@ namespace System.Data.Jet { public static string GetProvider(this DbConnectionStringBuilder builder, DataAccessProviderType? providerType = null) { - if (providerType != null && providerType == DataAccessProviderType.OleDb || + if (providerType == DataAccessProviderType.OleDb || IsOleDb(builder)) { - return builder.TryGetValue("provider", out var value) + return builder.TryGetValue("Provider", out var value) ? (string)value : null; } - if (providerType != null && providerType == DataAccessProviderType.Odbc || + if (providerType == DataAccessProviderType.Odbc || IsOdbc(builder)) { - return builder.TryGetValue("driver", out var value) + return builder.TryGetValue("DRIVER", out var value) ? (string)value : null; } - return builder.TryGetValue("provider", out var oleDbValue) + return builder.TryGetValue("Provider", out var oleDbValue) ? (string)oleDbValue - : builder.TryGetValue("driver", out var odbcValue) + : builder.TryGetValue("DRIVER", out var odbcValue) ? (string)odbcValue : null; } public static void SetProvider(this DbConnectionStringBuilder builder, string value, DataAccessProviderType? providerType = null) { - if (providerType != null && providerType == DataAccessProviderType.OleDb || + if (providerType == DataAccessProviderType.OleDb || IsOleDb(builder)) { - builder["provider"] = value; + builder["Provider"] = value; } - else if (providerType != null && providerType == DataAccessProviderType.Odbc || + else if (providerType == DataAccessProviderType.Odbc || IsOdbc(builder)) { - builder["driver"] = Regex.Replace(value.Trim(), @"^(?