public override void CreateDatabase( string fileNameOrConnectionString, DatabaseVersion version = DatabaseVersion.Newest, CollatingOrder collatingOrder = CollatingOrder.General, string databasePassword = null) { if (databasePassword != null && databasePassword.Length > 20) { throw new ArgumentOutOfRangeException(nameof(databasePassword)); } var filePath = JetStoreDatabaseHandling.ExpandFileName(JetStoreDatabaseHandling.ExtractFileNameFromConnectionString(fileNameOrConnectionString)); try { using dynamic catalog = new ComObject("ADOX.Catalog"); // ADOX is an ADO eXtension and ADO is build on top of OLE DB. var connectionString = GetConnectionString(filePath, version, collatingOrder, databasePassword); using var connection = catalog.Create(connectionString); } catch (Exception e) { throw new Exception($"Cannot create database \"{filePath}\" using DAO.", e); } }
public static void CreateDatabase( string storeName, DatabaseVersion version = DatabaseVersion.Newest, CollatingOrder collatingOrder = CollatingOrder.General, string databasePassword = null) { DeleteDatabase(storeName); JetConnection.CreateDatabase(storeName, version, collatingOrder, databasePassword); }
private static string GetConnectionString(string filePath, DatabaseVersion version, CollatingOrder collatingOrder, string databasePassword) { var connectionString = JetConnection.GetConnectionString(filePath, DataAccessProviderType.OleDb); var databaseType = version switch { DatabaseVersion.Version10 => 1, DatabaseVersion.Version11 => 2, DatabaseVersion.Version20 => 3, DatabaseVersion.Version30 => 5, DatabaseVersion.Version40 => 5, DatabaseVersion.Version120 => 6, _ => 0 }; if (collatingOrder > 0) { //connectionString += $";Locale Identifier={collatingOrder}"; } if (databaseType > 0) { connectionString += $";Jet OLEDB:Engine Type={databaseType}"; } if (!string.IsNullOrEmpty(databasePassword)) { connectionString += $";Jet OLEDB:Database Password={databasePassword}"; } return(connectionString); }
public override void CreateDatabase( string fileNameOrConnectionString, DatabaseVersion version = DatabaseVersion.NewestSupported, CollatingOrder collatingOrder = CollatingOrder.General, string databasePassword = null) => new DaoDatabaseCreator().CreateDatabase(fileNameOrConnectionString, version, collatingOrder, databasePassword);
public override void CreateDatabase( string fileNameOrConnectionString, DatabaseVersion version = DatabaseVersion.NewestSupported, CollatingOrder collatingOrder = CollatingOrder.General, string databasePassword = null) { if (databasePassword != null && databasePassword.Length > 20) { throw new ArgumentOutOfRangeException(nameof(databasePassword)); } var filePath = JetStoreDatabaseHandling.ExpandFileName(JetStoreDatabaseHandling.ExtractFileNameFromConnectionString(fileNameOrConnectionString)); if (version == DatabaseVersion.NewestSupported && string.Equals(System.IO.Path.GetExtension(filePath), ".mdb")) { version = DatabaseVersion.Version40; } try { using var dbEngine = CreateDbEngine(); var databaseType = version switch { DatabaseVersion.Version10 => (int)DatabaseTypeEnum.dbVersion10, DatabaseVersion.Version11 => (int)DatabaseTypeEnum.dbVersion11, DatabaseVersion.Version20 => (int)DatabaseTypeEnum.dbVersion20, DatabaseVersion.Version30 => (int)DatabaseTypeEnum.dbVersion30, DatabaseVersion.Version40 => (int)DatabaseTypeEnum.dbVersion40, DatabaseVersion.Version120 => (int)DatabaseTypeEnum.dbVersion120, _ => 0, }; var daoCollatingOrder = (CollatingOrderEnum)collatingOrder; var collatingOrderString = daoCollatingOrder switch { CollatingOrderEnum.dbSortArabic => ";LANGID=0x0401;CP=1256;COUNTRY=0", CollatingOrderEnum.dbSortChineseSimplified => ";LANGID=0x0804;CP=936;COUNTRY=0", CollatingOrderEnum.dbSortChineseTraditional => ";LANGID=0x0404;CP=950;COUNTRY=0", CollatingOrderEnum.dbSortCyrillic => ";LANGID=0x0419;CP=1251;COUNTRY=0", CollatingOrderEnum.dbSortCzech => ";LANGID=0x0405;CP=1250;COUNTRY=0", CollatingOrderEnum.dbSortDutch => ";LANGID=0x0413;CP=1252;COUNTRY=0", CollatingOrderEnum.dbSortGeneral => ";LANGID=0x0409;CP=1252;COUNTRY=0", CollatingOrderEnum.dbSortGreek => ";LANGID=0x0408;CP=1253;COUNTRY=0", CollatingOrderEnum.dbSortHebrew => ";LANGID=0x040D;CP=1255;COUNTRY=0", CollatingOrderEnum.dbSortHungarian => ";LANGID=0x040E;CP=1250;COUNTRY=0", CollatingOrderEnum.dbSortIcelandic => ";LANGID=0x040F;CP=1252;COUNTRY=0", CollatingOrderEnum.dbSortJapanese => ";LANGID=0x0411;CP=932;COUNTRY=0", CollatingOrderEnum.dbSortKorean => ";LANGID=0x0412;CP=949;COUNTRY=0", //CollatingOrderEnum.dbSortNordic => ";LANGID=0x041D;CP=1252;COUNTRY=0", CollatingOrderEnum.dbSortNorwdan => ";LANGID=0x0406;CP=1252;COUNTRY=0", CollatingOrderEnum.dbSortPolish => ";LANGID=0x0415;CP=1250;COUNTRY=0", CollatingOrderEnum.dbSortSlovenian => ";LANGID=0x0424;CP=1250;COUNTRY=0", CollatingOrderEnum.dbSortSpanish => ";LANGID=0x040A;CP=1252;COUNTRY=0", CollatingOrderEnum.dbSortSwedFin => ";LANGID=0x041D;CP=1252;COUNTRY=0", CollatingOrderEnum.dbSortThai => ";LANGID=0x041E;CP=874;COUNTRY=0", CollatingOrderEnum.dbSortTurkish => ";LANGID=0x041F;CP=1254;COUNTRY=0", _ => ";LANGID=0x0409;CP=1252;COUNTRY=0", }; if (!string.IsNullOrEmpty(databasePassword)) { collatingOrderString += $";pwd={databasePassword}"; } using var workspace = dbEngine.CreateWorkspace(string.Empty, "admin", string.Empty, WorkspaceTypeEnum.dbUseJet); using var database = databaseType > 0 ? workspace.CreateDatabase(filePath, collatingOrderString, databaseType) : workspace.CreateDatabase(filePath, collatingOrderString); } catch (Exception e) { throw new Exception($"Cannot create database \"{filePath}\" using DAO.", e); } }