コード例 #1
0
ファイル: AccessDbProvider.cs プロジェクト: zhj149/ALinq
        void IProviderExtend.CreateForeignKeys(MetaTable metaTable)
        {
            var sqlBuilder = new AccessDbSqlBuilder(this);
            var commands   = sqlBuilder.GetCreateForeignKeyCommands(metaTable);

            foreach (var command in commands)
            {
                services.Context.ExecuteCommand(command);
            }
        }
コード例 #2
0
ファイル: AccessDbProvider.cs プロジェクト: zhj149/ALinq
        void IProviderExtend.DeleteTable(MetaTable metaTable)
        {
            var commands = new AccessDbSqlBuilder(this).GetDropTableCommands(metaTable);

            foreach (var command in commands)
            {
                Debug.Assert(!string.IsNullOrEmpty(command));
                services.Context.ExecuteCommand(command);
            }
        }
コード例 #3
0
ファイル: AccessDbProvider.cs プロジェクト: zhj149/ALinq
        void IProviderExtend.CreateTable(MetaTable metaTable)
        {
            //var metaTable = services.Model.GetTable(metaTable);
            var sqlBuilder = new AccessDbSqlBuilder(this);
            var commands   = sqlBuilder.GetCreateTableCommands(metaTable);

            //services.Context.ExecuteCommand(command);
            foreach (var command in commands)
            {
                Debug.Assert(command != null);
                services.Context.ExecuteCommand(command);
            }
        }
コード例 #4
0
ファイル: AccessDbProvider.cs プロジェクト: zhj149/ALinq
        void IProvider.CreateDatabase()
        {
            if (File.Exists(dbName))
            {
                throw SqlClient.Error.CreateDatabaseFailedBecauseSqlCEDatabaseAlreadyExists(dbName);
            }

            //创建数据库文件
            var dbEngineClass = new DBEngineClass();
            var dataBase      = dbEngineClass.CreateDatabase(dbName, LanguageConstants.dbLangGeneral, DatabaseTypeEnum.dbEncrypt);

            dataBase.Close();

            var connection = new OleDbConnection(GetConnectionString(dbName));

            connection.Open();
            var transaction        = connection.BeginTransaction();
            var AccessDbSqlBuilder = new AccessDbSqlBuilder(this);

            try
            {
                if (services.Model.GetTables().FirstOrDefault() == null)
                {
                    throw SqlClient.Error.CreateDatabaseFailedBecauseOfContextWithNoTables(services.Model.DatabaseName);
                }
                var model = services.Model;
                foreach (var table in model.GetTables())
                {
                    //string createTableCommand = AccessDbSqlBuilder.GetCreateTableCommand(table);
                    //if (!string.IsNullOrEmpty(createTableCommand))
                    //    Execute(connection, transaction, createTableCommand);
                    var commands = AccessDbSqlBuilder.GetCreateTableCommands(table);
                    foreach (var command in commands)
                    {
                        Debug.Assert(command != null);
                        Execute(connection, transaction, command);
                    }
                }

                foreach (MetaTable table in model.GetTables())
                {
                    foreach (string commandText in AccessDbSqlBuilder.GetCreateForeignKeyCommands(table))
                    {
                        if (!string.IsNullOrEmpty(commandText))
                        {
                            Execute(connection, transaction, commandText);
                        }
                    }
                }

                transaction.Commit();
            }
            catch
            {
                transaction.Rollback();
                throw;
            }
            finally
            {
                connection.Close();
            }
        }