Пример #1
0
        public void ReCreateAuxiliaryTable(string tableEnName, EAuxiliaryTableType tableType)
        {
            var defaultTableMetadataInfoList = BaiRongDataProvider.AuxiliaryTableDataDao.GetDefaultTableMetadataInfoList(tableEnName, tableType);

            if (BaiRongDataProvider.TableStructureDao.IsTableExists(tableEnName))
            {
                var updateParms = new IDataParameter[]
                {
                    GetParameter("@IsCreatedInDB", EDataType.VarChar, 18, true.ToString()),
                    GetParameter("@IsChangedAfterCreatedInDB", EDataType.VarChar, 18, false.ToString()),
                    GetParameter("@TableENName", EDataType.VarChar, 50, tableEnName)
                };

                var taxis = GetMaxTaxis(tableEnName) + 1;

                using (var conn = GetConnection())
                {
                    conn.Open();
                    using (var trans = conn.BeginTransaction())
                    {
                        try
                        {
                            foreach (var tableMetadataInfo in defaultTableMetadataInfoList)
                            {
                                if (GetTableMetadataId(tableEnName, tableMetadataInfo.AttributeName) == 0)
                                {
                                    InsertWithTransaction(tableMetadataInfo, tableType, taxis++, trans);
                                }
                            }

                            string dropTableSqlString   = $"DROP TABLE [{tableEnName}]";
                            var    createTableSqlString = BaiRongDataProvider.AuxiliaryTableDataDao.GetCreateAuxiliaryTableSqlString(tableEnName);

                            ExecuteNonQuery(trans, dropTableSqlString);

                            var    reader = new System.IO.StringReader(createTableSqlString);
                            string sql;
                            while (null != (sql = SqlUtils.ReadNextStatementFromStream(reader)))
                            {
                                ExecuteNonQuery(trans, sql.Trim());
                            }

                            ExecuteNonQuery(trans, "UPDATE bairong_TableCollection SET IsCreatedInDB = @IsCreatedInDB, IsChangedAfterCreatedInDB = @IsChangedAfterCreatedInDB WHERE  TableENName = @TableENName", updateParms);
                            TableManager.IsChanged = true;
                            SqlUtils.Cache_RemoveTableColumnInfoListCache();
                            trans.Commit();
                        }
                        catch
                        {
                            trans.Rollback();
                            throw;
                        }
                    }
                }
            }
        }