From 49d798f6c34e123b8fd5686e1ca49c6d925d68de Mon Sep 17 00:00:00 2001 From: Laurents Meyer Date: Mon, 23 Nov 2020 06:04:03 +0100 Subject: [PATCH] Change default data access library to ODBC. (#63) Improve file extension handling. --- src/System.Data.Jet/JetConfiguration.cs | 2 +- src/System.Data.Jet/JetConnection.cs | 5 ++- .../JetStoreDatabaseHandling.cs | 38 ++++++++++++++++--- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/System.Data.Jet/JetConfiguration.cs b/src/System.Data.Jet/JetConfiguration.cs index 01c8d03..da7dfe9 100644 --- a/src/System.Data.Jet/JetConfiguration.cs +++ b/src/System.Data.Jet/JetConfiguration.cs @@ -31,7 +31,7 @@ } } - public static DataAccessProviderType DefaultDataAccessProviderType { get; set; } = DataAccessProviderType.OleDb; + public static DataAccessProviderType DefaultDataAccessProviderType { get; set; } = DataAccessProviderType.Odbc; // The SQL statement // diff --git a/src/System.Data.Jet/JetConnection.cs b/src/System.Data.Jet/JetConnection.cs index 2416c50..77f43ad 100644 --- a/src/System.Data.Jet/JetConnection.cs +++ b/src/System.Data.Jet/JetConnection.cs @@ -572,8 +572,9 @@ namespace System.Data.Jet public static bool DatabaseExists(string fileNameOrConnectionString) { - var fileName = JetStoreDatabaseHandling.ExtractFileNameFromConnectionString(fileNameOrConnectionString) - .Trim('"'); + var fileName = JetStoreDatabaseHandling.ExpandFileName( + JetStoreDatabaseHandling.ExtractFileNameFromConnectionString(fileNameOrConnectionString) + .Trim('"')); if (string.IsNullOrWhiteSpace(fileName)) throw new InvalidOperationException("The file name or connection string is invalid."); diff --git a/src/System.Data.Jet/JetStoreSchemaDefinition/JetStoreDatabaseHandling.cs b/src/System.Data.Jet/JetStoreSchemaDefinition/JetStoreDatabaseHandling.cs index b6c1a87..9405fc8 100644 --- a/src/System.Data.Jet/JetStoreSchemaDefinition/JetStoreDatabaseHandling.cs +++ b/src/System.Data.Jet/JetStoreSchemaDefinition/JetStoreDatabaseHandling.cs @@ -195,16 +195,33 @@ namespace System.Data.Jet.JetStoreSchemaDefinition public static void DeleteFile(string fileName) { + JetConnection.ClearAllPools(); + + fileName = ExpandFileName(fileName); + + var directoryPath = Path.GetDirectoryName(fileName) ?? string.Empty; + var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName); + var extension = Path.GetExtension(fileName); + if (!File.Exists(fileName)) + { return; - - JetConnection.ClearAllPools(); + } File.Delete(fileName); - if (string.Equals(Path.GetExtension(fileName), "accdb", StringComparison.OrdinalIgnoreCase)) + if (string.IsNullOrEmpty(extension) || + string.Equals(extension, ".accdb", StringComparison.OrdinalIgnoreCase) || + !string.Equals(extension, ".mdb", StringComparison.OrdinalIgnoreCase)) + { + File.Delete(Path.Combine(directoryPath, fileNameWithoutExtension + ".laccdb")); + } + + if (string.IsNullOrEmpty(extension) || + string.Equals(extension, ".mdb", StringComparison.OrdinalIgnoreCase) || + !string.Equals(extension, ".accdb", StringComparison.OrdinalIgnoreCase)) { - File.Delete(Path.Combine(Path.GetDirectoryName(fileName), Path.GetFileNameWithoutExtension(fileName) + ".laccdb")); + File.Delete(Path.Combine(directoryPath, fileNameWithoutExtension + ".ldb")); } } @@ -227,7 +244,18 @@ namespace System.Data.Jet.JetStoreSchemaDefinition fileName = Path.Combine(dataDirectory, fileName.Substring("|DataDirectory|".Length)); } - return Path.GetFullPath(fileName); + return EnsureFileExtension(Path.GetFullPath(fileName)); + } + + public static string EnsureFileExtension(string fileName) + { + var extension = Path.GetExtension(fileName); + if (string.IsNullOrEmpty(extension)) + { + fileName += ".accdb"; + } + + return fileName; } } } \ No newline at end of file