Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
 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);
Ejemplo n.º 5
0
        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);
            }
        }