예제 #1
0
        public static string GetSerializedString(string tableName)
        {
            var builder    = new StringBuilder();
            var list       = GetTableMetadataInfoList(tableName);
            var sortedlist = new SortedList();

            foreach (var metadataInfo in list)
            {
                if (metadataInfo.IsSystem == false)
                {
                    /*
                     * AttributeName,
                     * DataType,
                     * DataLength,
                     * CanBeNull,
                     * DBDefaultValue
                     * */
                    string serialize =
                        $"AttributeName:{metadataInfo.AttributeName};DataType:{EDataTypeUtils.GetValue(metadataInfo.DataType)};DataLength={metadataInfo.DataLength}";
                    sortedlist.Add(metadataInfo.AttributeName, serialize);
                }
            }

            foreach (string attributeName in sortedlist.Keys)
            {
                builder.Append(sortedlist[attributeName]);
            }

            return(builder.ToString());
        }
예제 #2
0
        public void Page_Load(object sender, EventArgs e)
        {
            if (IsForbidden)
            {
                return;
            }

            PageUtils.CheckRequestParameter("TableName", "TableType");

            _tableName = Body.GetQueryString("TableName");
            _tableType = EAuxiliaryTableTypeUtils.GetEnumType(Body.GetQueryString("TableType"));

            if (!IsPostBack)
            {
                EDataTypeUtils.AddListItemsToAuxiliaryTable(DataType);

                if (Body.IsQueryExists("TableMetadataID"))
                {
                    var tableMetadataId = Body.GetQueryInt("TableMetadataID");
                    var info            = BaiRongDataProvider.TableMetadataDao.GetTableMetadataInfo(tableMetadataId);
                    if (info != null)
                    {
                        AttributeName.Text    = info.AttributeName;
                        AttributeName.Enabled = false;
                        ControlUtils.SelectListItemsIgnoreCase(DataType, info.DataType.ToString());
                        DataLength.Text = info.DataLength.ToString();
                    }
                }
            }
        }
예제 #3
0
        public static string GetTableMetadataDataType(string tableName, string attributeName)
        {
            var metadataInfo = GetTableMetadataInfo(tableName, attributeName);

            if (metadataInfo != null)
            {
                return(EDataTypeUtils.GetTextByAuxiliaryTable(metadataInfo.DataType, metadataInfo.DataLength));
            }
            return(string.Empty);
        }
예제 #4
0
        public static string GetMySqlColumnSqlString(EDataType dataType, string attributeName, int length)
        {
            string retval;
            var    sqlDbType = EDataTypeUtils.ToSqlDbType(dataType);

            switch (sqlDbType)
            {
            case SqlDbType.Char:
                retval = $"{attributeName} VARCHAR({length})";
                break;

            case SqlDbType.DateTime:
                retval = $"{attributeName} DATETIME";
                break;

            case SqlDbType.Decimal:
                retval = $"{attributeName} DECIMAL(18, 2)";
                break;

            case SqlDbType.Float:
                retval = $"{attributeName} FLOAT(18, 2)";
                break;

            case SqlDbType.Int:
                retval = $"{attributeName} INT";
                break;

            case SqlDbType.NChar:
                retval = $"{attributeName} VARCHAR({length})";
                break;

            case SqlDbType.NText:
                retval = $"{attributeName} LONGTEXT";
                break;

            case SqlDbType.NVarChar:
                retval = $"{attributeName} VARCHAR({length})";
                break;

            case SqlDbType.Text:
                retval = $"{attributeName} LONGTEXT";
                break;

            case SqlDbType.VarChar:
                retval = $"{attributeName} VARCHAR({length})";
                break;

            default:
                retval = $"{attributeName} VARCHAR({length})";
                break;
            }
            return(retval);
        }
예제 #5
0
        private static AtomEntry GetAtomEntry(TableMetadataInfo metaInfo)
        {
            var entry = AtomUtility.GetEmptyEntry();

            AtomUtility.AddDcElement(entry.AdditionalElements, "TableMetadataID", metaInfo.TableMetadataId.ToString());
            AtomUtility.AddDcElement(entry.AdditionalElements, "AuxiliaryTableENName", metaInfo.AuxiliaryTableEnName);
            AtomUtility.AddDcElement(entry.AdditionalElements, "AttributeName", metaInfo.AttributeName);
            AtomUtility.AddDcElement(entry.AdditionalElements, "DataType", EDataTypeUtils.GetValue(metaInfo.DataType));
            AtomUtility.AddDcElement(entry.AdditionalElements, "DataLength", metaInfo.DataLength.ToString());
            AtomUtility.AddDcElement(entry.AdditionalElements, "Taxis", metaInfo.Taxis.ToString());
            AtomUtility.AddDcElement(entry.AdditionalElements, "IsSystem", metaInfo.IsSystem.ToString());

            return(entry);
        }
예제 #6
0
        public static IDbDataParameter GetIDbDataParameter(string parameterName, EDataType dataType, int size)
        {
            IDbDataParameter parameter;

            if (WebConfigUtils.IsMySql)
            {
                parameter = new MySqlParameter(parameterName, EDataTypeUtils.ToMySqlDbType(dataType), size);
            }
            else
            {
                parameter = new SqlParameter(parameterName, EDataTypeUtils.ToSqlDbType(dataType), size);
            }

            return(parameter);
        }
예제 #7
0
        private void SetColumns(NameValueCollection columnsMap)
        {
            Columns.Items.Clear();
            ColumnsToMatch.Items.Clear();

            var tableColumnInfoList    = BaiRongDataProvider.TableStructureDao.GetTableColumnInfoList(GetDatabaseConnectionString(), DatabaseName.SelectedValue, RelatedTableName.SelectedValue);
            var columnToMatchArrayList = new ArrayList();

            foreach (var tableColumnInfo in tableColumnInfoList)
            {
                string text =
                    $"{tableColumnInfo.ColumnName}({EDataTypeUtils.GetValue(tableColumnInfo.DataType)} {tableColumnInfo.Length})";
                var value         = tableColumnInfo.ColumnName.ToLower();
                var columnToMatch = columnsMap[value];
                if (!string.IsNullOrEmpty(columnToMatch))
                {
                    var tableMetadataInfoToMatch = TableManager.GetTableMetadataInfo(TableNameToMatch.Text, columnToMatch);
                    if (tableMetadataInfoToMatch != null)
                    {
                        columnToMatchArrayList.Add(columnToMatch);
                        text += " -> " +
                                $"{tableMetadataInfoToMatch.AttributeName}({EDataTypeUtils.GetValue(tableMetadataInfoToMatch.DataType)} {tableMetadataInfoToMatch.DataLength})";
                        value += "&" + columnToMatch;
                    }
                }
                Columns.Items.Add(new ListItem(text, value));
            }

            var tableMetadataInfoList = TableManager.GetTableMetadataInfoList(TableNameToMatch.Text);

            foreach (var tableMetadataInfo in tableMetadataInfoList)
            {
                var value = tableMetadataInfo.AttributeName.ToLower();
                if (!columnToMatchArrayList.Contains(tableMetadataInfo.AttributeName))
                {
                    string text =
                        $"{tableMetadataInfo.AttributeName}({EDataTypeUtils.GetValue(tableMetadataInfo.DataType)} {tableMetadataInfo.DataLength})";
                    ColumnsToMatch.Items.Add(new ListItem(text, value));
                }
            }

            SaveColumnsMap(columnsMap);
        }
예제 #8
0
        public void RelatedTable_Changed(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(RelatedTableName.SelectedValue))
            {
                RelatedIdentity.Items.Clear();
                RelatedOrderBy.Items.Clear();
            }
            else
            {
                var tableColumnInfoList = BaiRongDataProvider.TableStructureDao.GetTableColumnInfoList(GetDatabaseConnectionString(), DatabaseName.SelectedValue, RelatedTableName.SelectedValue);
                RelatedIdentity.Items.Clear();
                RelatedOrderBy.Items.Clear();
                var item = new ListItem("请选择主键字段名称", string.Empty);
                RelatedIdentity.Items.Add(item);
                item = new ListItem("请选择排序字段名称", string.Empty);
                RelatedOrderBy.Items.Add(item);
                foreach (var tableColumnInfo in tableColumnInfoList)
                {
                    item = new ListItem(
                        $"{tableColumnInfo.ColumnName}({EDataTypeUtils.GetValue(tableColumnInfo.DataType)} {tableColumnInfo.Length})", tableColumnInfo.ColumnName);
                    if (StringUtils.EqualsIgnoreCase(tableColumnInfo.ColumnName, RelatedIdentityHidden.Value))
                    {
                        item.Selected = true;
                    }
                    RelatedIdentity.Items.Add(item);
                }

                foreach (var tableColumnInfo in tableColumnInfoList)
                {
                    item = new ListItem(
                        $"{tableColumnInfo.ColumnName}({EDataTypeUtils.GetValue(tableColumnInfo.DataType)} {tableColumnInfo.Length})", tableColumnInfo.ColumnName);
                    if (StringUtils.EqualsIgnoreCase(tableColumnInfo.ColumnName, RelatedOrderByHidden.Value))
                    {
                        item.Selected = true;
                    }
                    RelatedOrderBy.Items.Add(item);
                }
            }
        }
예제 #9
0
        public void Update(TableMetadataInfo info)
        {
            var isSqlChanged = true;
            var originalInfo = GetTableMetadataInfo(info.TableMetadataId);

            if (originalInfo != null)
            {
                if (info.AuxiliaryTableEnName == originalInfo.AuxiliaryTableEnName &&
                    info.AttributeName == originalInfo.AttributeName &&
                    info.DataType == originalInfo.DataType &&
                    info.DataLength == originalInfo.DataLength &&
                    info.Taxis == originalInfo.Taxis)
                {
                    isSqlChanged = false;
                }
            }

            var updateParms = new IDataParameter[]
            {
                GetParameter(ParmAuxiliaryTableEnname, EDataType.VarChar, 50, info.AuxiliaryTableEnName),
                GetParameter(ParmAttributeName, EDataType.VarChar, 50, info.AttributeName),
                GetParameter(ParmDataType, EDataType.VarChar, 50, EDataTypeUtils.GetValue(info.DataType)),
                GetParameter(ParmDataLength, EDataType.Integer, info.DataLength),
                GetParameter(ParmIsSystem, EDataType.VarChar, 18, info.IsSystem.ToString()),
                GetParameter(ParmTableMetadataId, EDataType.Integer, info.TableMetadataId)
            };

            using (var conn = GetConnection())
            {
                conn.Open();
                ExecuteNonQuery(conn, SqlUpdateTableMetadata, updateParms);
                if (isSqlChanged)
                {
                    BaiRongDataProvider.TableCollectionDao.UpdateIsChangedAfterCreatedInDb(true, info.AuxiliaryTableEnName);
                }
                TableManager.IsChanged = true;
            }
        }
예제 #10
0
        internal void InsertWithTransaction(TableMetadataInfo info, EAuxiliaryTableType tableType, int taxis, IDbTransaction trans)
        {
            var sqlString = "INSERT INTO bairong_TableMetadata (AuxiliaryTableENName, AttributeName, DataType, DataLength, Taxis, IsSystem) VALUES (@AuxiliaryTableENName, @AttributeName, @DataType, @DataLength, @Taxis, @IsSystem)";

            var insertParms = new IDataParameter[]
            {
                GetParameter(ParmAuxiliaryTableEnname, EDataType.VarChar, 50, info.AuxiliaryTableEnName),
                GetParameter(ParmAttributeName, EDataType.VarChar, 50, info.AttributeName),
                GetParameter(ParmDataType, EDataType.VarChar, 50, EDataTypeUtils.GetValue(info.DataType)),
                GetParameter(ParmDataLength, EDataType.Integer, info.DataLength),
                GetParameter(ParmTaxis, EDataType.Integer, taxis),
                GetParameter(ParmIsSystem, EDataType.VarChar, 18, info.IsSystem.ToString())
            };

            ExecuteNonQuery(trans, sqlString, insertParms);
            if (info.StyleInfo != null)
            {
                info.StyleInfo.TableName     = info.AuxiliaryTableEnName;
                info.StyleInfo.AttributeName = info.AttributeName;
                BaiRongDataProvider.TableStyleDao.InsertWithTransaction(info.StyleInfo, EAuxiliaryTableTypeUtils.GetTableStyle(tableType), trans);
                TableStyleManager.IsChanged = true;
            }
            TableManager.IsChanged = true;
        }
예제 #11
0
        public void Insert(TableMetadataInfo info)
        {
            var sqlString = "INSERT INTO bairong_TableMetadata (AuxiliaryTableENName, AttributeName, DataType, DataLength, Taxis, IsSystem) VALUES (@AuxiliaryTableENName, @AttributeName, @DataType, @DataLength, @Taxis, @IsSystem)";

            var insertParms = new IDataParameter[]
            {
                GetParameter(ParmAuxiliaryTableEnname, EDataType.VarChar, 50, info.AuxiliaryTableEnName),
                GetParameter(ParmAttributeName, EDataType.VarChar, 50, info.AttributeName),
                GetParameter(ParmDataType, EDataType.VarChar, 50, EDataTypeUtils.GetValue(info.DataType)),
                GetParameter(ParmDataLength, EDataType.Integer, info.DataLength),
                GetParameter(ParmTaxis, EDataType.Integer, GetMaxTaxis(info.AuxiliaryTableEnName) + 1),
                GetParameter(ParmIsSystem, EDataType.VarChar, 18, info.IsSystem.ToString())
            };

            using (var conn = GetConnection())
            {
                conn.Open();
                ExecuteNonQuery(conn, sqlString, insertParms);

                BaiRongDataProvider.TableCollectionDao.UpdateAttributeNum(info.AuxiliaryTableEnName);
                BaiRongDataProvider.TableCollectionDao.UpdateIsChangedAfterCreatedInDb(true, info.AuxiliaryTableEnName);
                TableManager.IsChanged = true;
            }
        }
예제 #12
0
        public override void Submit_OnClick(object sender, EventArgs e)
        {
            var isChanged = false;

            var attributeNameList = TranslateUtils.StringCollectionToStringList(Request.Form["attributeName"]);
            var dataTypeList      = TranslateUtils.StringCollectionToStringList(Request.Form["dataType"]);
            var dataLengthList    = TranslateUtils.StringCollectionToStringList(Request.Form["dataLength"]);

            for (var i = 0; i < attributeNameList.Count; i++)
            {
                if (dataTypeList.Count < attributeNameList.Count)
                {
                    dataTypeList.Add(string.Empty);
                }
                if (dataLengthList.Count < attributeNameList.Count)
                {
                    dataLengthList.Add(string.Empty);
                }
            }

            var tableStyle             = EAuxiliaryTableTypeUtils.GetTableStyle(_tableType);
            var attributeNameArrayList = TableManager.GetAttributeNameList(tableStyle, _tableName, true);

            attributeNameArrayList.AddRange(TableManager.GetHiddenAttributeNameList(tableStyle));

            for (var i = 0; i < attributeNameList.Count; i++)
            {
                var attributeName = attributeNameList[i];
                var dataType      = dataTypeList[i];
                var dataLength    = dataLengthList[i];

                if (attributeNameArrayList.IndexOf(attributeName.Trim().ToLower()) != -1)
                {
                    FailMessage("字段添加失败,字段名已存在!");
                }
                else if (!SqlUtils.IsAttributeNameCompliant(attributeName))
                {
                    FailMessage("字段名不符合系统要求!");
                }
                else
                {
                    var info = new TableMetadataInfo
                    {
                        AuxiliaryTableEnName = _tableName,
                        AttributeName        = attributeName,
                        DataType             = EDataTypeUtils.GetEnumType(dataType)
                    };

                    var hashtable = new Hashtable
                    {
                        [EDataType.DateTime] = new[] { "8", "false" },
                        [EDataType.Integer]  = new[] { "4", "false" },
                        [EDataType.NChar]    = new[] { "50", "true" },
                        [EDataType.NText]    = new[] { "16", "false" },
                        [EDataType.NVarChar] = new[] { "255", "true" }
                    };

                    var strArr = (string[])hashtable[EDataTypeUtils.GetEnumType(dataType)];
                    if (strArr[1].Equals("false"))
                    {
                        dataLength = strArr[0];
                    }

                    if (string.IsNullOrEmpty(dataLength))
                    {
                        dataLength = strArr[0];
                    }

                    info.DataLength = int.Parse(dataLength);
                    if (info.DataType == EDataType.NVarChar || info.DataType == EDataType.NChar)
                    {
                        var maxLength = SqlUtils.GetMaxLengthForNVarChar();
                        if (info.DataLength <= 0 || info.DataLength > maxLength)
                        {
                            FailMessage($"字段修改失败,数据长度的值必须位于 1 和 {maxLength} 之间");
                            return;
                        }
                    }
                    info.IsSystem = false;

                    try
                    {
                        BaiRongDataProvider.TableMetadataDao.Insert(info);

                        Body.AddAdminLog("添加辅助表字段",
                                         $"辅助表:{_tableName},字段名:{info.AttributeName}");

                        isChanged = true;
                    }
                    catch (Exception ex)
                    {
                        FailMessage(ex, ex.Message);
                    }
                }
            }

            if (isChanged)
            {
                PageUtils.CloseModalPage(Page);
            }
        }
예제 #13
0
        /// <summary>
        /// 将频道模板中的辅助表导入发布系统中,返回修改了的表名对照
        /// 在导入辅助表的同时检查发布系统辅助表并替换对应表
        /// </summary>
        public NameValueCollection ImportAuxiliaryTables(int publishmentSystemId, bool isUserTables)
        {
            if (!DirectoryUtils.IsDirectoryExists(_directoryPath))
            {
                return(null);
            }

            var publishmentSystemInfo = PublishmentSystemManager.GetPublishmentSystemInfo(publishmentSystemId);

            var nameValueCollection = new NameValueCollection();
            var tableNamePrefix     = publishmentSystemInfo.PublishmentSystemDir + "_";

            var filePaths = DirectoryUtils.GetFilePaths(_directoryPath);

            foreach (var filePath in filePaths)
            {
                var feed = AtomFeed.Load(FileUtils.GetFileStreamReadOnly(filePath));

                var tableName = AtomUtility.GetDcElementContent(feed.AdditionalElements, "TableENName");
                var tableType = EAuxiliaryTableTypeUtils.GetEnumType(AtomUtility.GetDcElementContent(feed.AdditionalElements, "AuxiliaryTableType"));

                if (!isUserTables)
                {
                    nameValueCollection[tableName] = NodeManager.GetTableName(publishmentSystemInfo, tableType);
                    continue;
                }

                var tableCnName      = AtomUtility.GetDcElementContent(feed.AdditionalElements, "TableCNName");
                var serializedString = AtomUtility.GetDcElementContent(feed.AdditionalElements, "SerializedString");

                var tableNameToInsert = string.Empty;//需要增加的表名,空代表不需要添加辅助表

                var tableInfo = BaiRongDataProvider.TableCollectionDao.GetAuxiliaryTableInfo(tableName);
                if (tableInfo == null)//如果当前系统无此表名
                {
                    tableNameToInsert = tableName;
                }
                else
                {
                    var serializedStringForExistTable = TableManager.GetSerializedString(tableName);

                    if (!string.IsNullOrEmpty(serializedString))
                    {
                        if (serializedString != serializedStringForExistTable)//仅有此时,导入表需要修改表名
                        {
                            tableNameToInsert = tableNamePrefix + tableName;
                            tableCnName       = tableNamePrefix + tableCnName;
                            nameValueCollection[tableName] = tableNameToInsert;
                        }
                    }
                }

                if (!string.IsNullOrEmpty(tableNameToInsert))//需要添加
                {
                    if (!BaiRongDataProvider.TableStructureDao.IsTableExists(tableNameToInsert))
                    {
                        tableInfo = new AuxiliaryTableInfo
                        {
                            TableEnName               = tableNameToInsert,
                            TableCnName               = tableCnName,
                            AttributeNum              = 0,
                            AuxiliaryTableType        = tableType,
                            IsCreatedInDb             = false,
                            IsChangedAfterCreatedInDb = false,
                            Description               = AtomUtility.GetDcElementContent(feed.AdditionalElements, "Description")
                        };

                        BaiRongDataProvider.TableCollectionDao.Insert(tableInfo);

                        var tableStyle = EAuxiliaryTableTypeUtils.GetTableStyle(tableInfo.AuxiliaryTableType);

                        var attributeNameList =
                            TableManager.GetAttributeNameList(tableStyle, tableInfo.TableEnName, true);
                        attributeNameList.AddRange(
                            TableManager.GetHiddenAttributeNameList(tableStyle));

                        foreach (AtomEntry entry in feed.Entries)
                        {
                            var metaInfo = new TableMetadataInfo
                            {
                                AuxiliaryTableEnName = tableNameToInsert,
                                AttributeName        =
                                    AtomUtility.GetDcElementContent(entry.AdditionalElements, "AttributeName"),
                                DataType = EDataTypeUtils.GetEnumType(
                                    AtomUtility.GetDcElementContent(entry.AdditionalElements, "DataType")),
                                DataLength = TranslateUtils.ToInt(
                                    AtomUtility.GetDcElementContent(entry.AdditionalElements, "DataLength")),
                                Taxis =
                                    TranslateUtils.ToInt(AtomUtility.GetDcElementContent(entry.AdditionalElements,
                                                                                         "Taxis")),
                                IsSystem = TranslateUtils.ToBool(
                                    AtomUtility.GetDcElementContent(entry.AdditionalElements, "IsSystem"))
                            };

                            if (attributeNameList.IndexOf(metaInfo.AttributeName.Trim().ToLower()) != -1)
                            {
                                continue;
                            }

                            if (metaInfo.IsSystem)
                            {
                                continue;
                            }

                            BaiRongDataProvider.TableMetadataDao.Insert(metaInfo);
                        }

                        BaiRongDataProvider.TableMetadataDao.CreateAuxiliaryTable(tableNameToInsert);
                    }
                }

                var tableNameToChange = (!string.IsNullOrEmpty(tableNameToInsert)) ? tableNameToInsert : tableName;
                //更新发布系统后台内容表及栏目表
                if (tableType == EAuxiliaryTableType.BackgroundContent)
                {
                    publishmentSystemInfo.AuxiliaryTableForContent = tableNameToChange;
                    DataProvider.PublishmentSystemDao.Update(publishmentSystemInfo);
                }
                else if (tableType == EAuxiliaryTableType.GovPublicContent)
                {
                    publishmentSystemInfo.AuxiliaryTableForGovPublic = tableNameToChange;
                    DataProvider.PublishmentSystemDao.Update(publishmentSystemInfo);
                }
                else if (tableType == EAuxiliaryTableType.GovInteractContent)
                {
                    publishmentSystemInfo.AuxiliaryTableForGovInteract = tableNameToChange;
                    DataProvider.PublishmentSystemDao.Update(publishmentSystemInfo);
                }
                else if (tableType == EAuxiliaryTableType.JobContent)
                {
                    publishmentSystemInfo.AuxiliaryTableForJob = tableNameToChange;
                    DataProvider.PublishmentSystemDao.Update(publishmentSystemInfo);
                }
                else if (tableType == EAuxiliaryTableType.VoteContent)
                {
                    publishmentSystemInfo.AuxiliaryTableForVote = tableNameToChange;
                    DataProvider.PublishmentSystemDao.Update(publishmentSystemInfo);
                }
            }

            return(nameValueCollection);
        }
예제 #14
0
        public static string GetSqlServerColumnSqlString(EDataType dataType, string attributeName, int length)
        {
            var retval    = string.Empty;
            var sqlDbType = EDataTypeUtils.ToSqlDbType(dataType);

            switch (sqlDbType)
            {
            case SqlDbType.BigInt:
                retval = $"[{attributeName}] [bigint]";
                break;

            case SqlDbType.Binary:
                retval = $"[{attributeName}] [binary] ({length})";
                break;

            case SqlDbType.Bit:
                retval = $"[{attributeName}] [bit]";
                break;

            case SqlDbType.Char:
                retval = $"[{attributeName}] [char] ({length})";
                break;

            case SqlDbType.DateTime:
                retval = $"[{attributeName}] [datetime]";
                break;

            case SqlDbType.Decimal:
                retval = $"[{attributeName}] [decimal] (18, 2)";
                break;

            case SqlDbType.Float:
                retval = $"[{attributeName}] [float]";
                break;

            case SqlDbType.Image:
                retval = $"[{attributeName}] [image]";
                break;

            case SqlDbType.Int:
                retval = $"[{attributeName}] [int]";
                break;

            case SqlDbType.Money:
                retval = $"[{attributeName}] [money]";
                break;

            case SqlDbType.NChar:
                retval = $"[{attributeName}] [nchar] ({length})";
                break;

            case SqlDbType.NText:
                retval = $"[{attributeName}] [ntext]";
                break;

            case SqlDbType.NVarChar:
                retval = $"[{attributeName}] [nvarchar] ({length})";
                break;

            case SqlDbType.Real:
                retval = $"[{attributeName}] [real]";
                break;

            case SqlDbType.SmallDateTime:
                retval = $"[{attributeName}] [smalldatetime]";
                break;

            case SqlDbType.SmallInt:
                retval = $"[{attributeName}] [smallint]";
                break;

            case SqlDbType.SmallMoney:
                retval = $"[{attributeName}] [smallmoney]";
                break;

            case SqlDbType.Text:
                retval = $"[{attributeName}] [text]";
                break;

            case SqlDbType.Timestamp:
                retval = $"[{attributeName}] [timestamp]";
                break;

            case SqlDbType.TinyInt:
                retval = $"[{attributeName}] [tinyint]";
                break;

            case SqlDbType.VarBinary:
                retval = $"[{attributeName}] [varbinary] ({length})";
                break;

            case SqlDbType.VarChar:
                retval = $"[{attributeName}] [varchar] ({length})";
                break;
            }
            retval += " NULL";
            return(retval);
        }
예제 #15
0
        public List <TableMetadataInfo> GetTableMetadataInfoList(string tableEnName)
        {
            var list = new List <TableMetadataInfo>();

            var parms = new IDataParameter[]
            {
                GetParameter(ParmAuxiliaryTableEnname, EDataType.VarChar, 50, tableEnName)
            };

            using (var rdr = ExecuteReader(SqlSelectAllTableMetadataByEnname, parms))
            {
                while (rdr.Read())
                {
                    var i    = 0;
                    var info = new TableMetadataInfo(GetInt(rdr, i++), GetString(rdr, i++), GetString(rdr, i++), EDataTypeUtils.GetEnumType(GetString(rdr, i++)), GetInt(rdr, i++), GetInt(rdr, i++), GetBool(rdr, i));
                    list.Add(info);
                }
                rdr.Close();
            }
            return(list);
        }
예제 #16
0
        public TableMetadataInfo GetTableMetadataInfo(string tableEnName, string attributeName)
        {
            TableMetadataInfo info = null;

            var parms = new IDataParameter[]
            {
                GetParameter(ParmAuxiliaryTableEnname, EDataType.VarChar, 50, tableEnName),
                GetParameter(ParmAttributeName, EDataType.VarChar, 50, attributeName)
            };

            using (var rdr = ExecuteReader(SqlSelectTableMetadataByTableEnnameAndAttributeName, parms))
            {
                if (rdr.Read())
                {
                    var i = 0;
                    info = new TableMetadataInfo(GetInt(rdr, i++), GetString(rdr, i++), GetString(rdr, i++), EDataTypeUtils.GetEnumType(GetString(rdr, i++)), GetInt(rdr, i++), GetInt(rdr, i++), GetBool(rdr, i));
                }
                rdr.Close();
            }

            return(info);
        }
예제 #17
0
        public TableMetadataInfo GetTableMetadataInfo(int tableMetadataId)
        {
            TableMetadataInfo info = null;

            var parms = new IDataParameter[]
            {
                GetParameter(ParmTableMetadataId, EDataType.Integer, tableMetadataId)
            };

            using (var rdr = ExecuteReader(SqlSelectTableMetadata, parms))
            {
                if (rdr.Read())
                {
                    var i = 0;
                    info = new TableMetadataInfo(GetInt(rdr, i++), GetString(rdr, i++), GetString(rdr, i++), EDataTypeUtils.GetEnumType(GetString(rdr, i++)), GetInt(rdr, i++), GetInt(rdr, i++), GetBool(rdr, i));
                }
                rdr.Close();
            }

            return(info);
        }
예제 #18
0
 public static string GetDefaultDateString()
 {
     return(EDataTypeUtils.GetDefaultString(EDataType.DateTime));
 }
예제 #19
0
        public override void Submit_OnClick(object sender, EventArgs e)
        {
            var isChanged = false;

            if (Body.IsQueryExists("TableMetadataID"))
            {
                var tableMetadataId = Body.GetQueryInt("TableMetadataID");

                var info = BaiRongDataProvider.TableMetadataDao.GetTableMetadataInfo(tableMetadataId);
                info.AuxiliaryTableEnName = _tableName;
                info.AttributeName        = AttributeName.Text;
                info.DataType             = EDataTypeUtils.GetEnumType(DataType.SelectedValue);

                var hashtable = new Hashtable
                {
                    [EDataType.DateTime] = new[] { "8", "false" },
                    [EDataType.Integer]  = new[] { "4", "false" },
                    [EDataType.NChar]    = new[] { "50", "true" },
                    [EDataType.NText]    = new[] { "16", "false" },
                    [EDataType.NVarChar] = new[] { "255", "true" }
                };

                var strArr = (string[])hashtable[EDataTypeUtils.GetEnumType(DataType.SelectedValue)];
                if (strArr[1].Equals("false"))
                {
                    DataLength.Text = strArr[0];
                }

                info.DataLength = int.Parse(DataLength.Text);
                if (info.DataType == EDataType.NVarChar || info.DataType == EDataType.NChar)
                {
                    var maxLength = SqlUtils.GetMaxLengthForNVarChar();
                    if (info.DataLength <= 0 || info.DataLength > maxLength)
                    {
                        FailMessage($"字段修改失败,数据长度的值必须位于 1 和 {maxLength} 之间");
                        return;
                    }
                }

                try
                {
                    BaiRongDataProvider.TableMetadataDao.Update(info);

                    Body.AddAdminLog("修改辅助表字段",
                                     $"辅助表:{_tableName},字段名:{info.AttributeName}");

                    isChanged = true;
                }
                catch (Exception ex)
                {
                    FailMessage(ex, ex.Message);
                }
            }
            else
            {
                var tableStyle        = EAuxiliaryTableTypeUtils.GetTableStyle(_tableType);
                var attributeNameList = TableManager.GetAttributeNameList(tableStyle, _tableName, true);
                attributeNameList.AddRange(TableManager.GetHiddenAttributeNameList(tableStyle));
                if (attributeNameList.IndexOf(AttributeName.Text.Trim().ToLower()) != -1)
                {
                    FailMessage("字段添加失败,字段名已存在!");
                }
                else if (!SqlUtils.IsAttributeNameCompliant(AttributeName.Text))
                {
                    FailMessage("字段名不符合系统要求!");
                }
                else
                {
                    var info = new TableMetadataInfo
                    {
                        AuxiliaryTableEnName = _tableName,
                        AttributeName        = AttributeName.Text,
                        DataType             = EDataTypeUtils.GetEnumType(DataType.SelectedValue)
                    };

                    var hashtable = new Hashtable
                    {
                        [EDataType.DateTime] = new[] { "8", "false" },
                        [EDataType.Integer]  = new[] { "4", "false" },
                        [EDataType.NChar]    = new[] { "50", "true" },
                        [EDataType.NText]    = new[] { "16", "false" },
                        [EDataType.NVarChar] = new[] { "255", "true" }
                    };

                    var strArr = (string[])hashtable[EDataTypeUtils.GetEnumType(DataType.SelectedValue)];
                    if (strArr[1].Equals("false"))
                    {
                        DataLength.Text = strArr[0];
                    }

                    info.DataLength = int.Parse(DataLength.Text);
                    if (info.DataType == EDataType.NVarChar || info.DataType == EDataType.NChar)
                    {
                        var maxLength = SqlUtils.GetMaxLengthForNVarChar();
                        if (info.DataLength <= 0 || info.DataLength > maxLength)
                        {
                            FailMessage($"字段修改失败,数据长度的值必须位于 1 和 {maxLength} 之间");
                            return;
                        }
                    }
                    info.IsSystem = false;

                    try
                    {
                        BaiRongDataProvider.TableMetadataDao.Insert(info);

                        Body.AddAdminLog("添加辅助表字段",
                                         $"辅助表:{_tableName},字段名:{info.AttributeName}");

                        isChanged = true;
                    }
                    catch (Exception ex)
                    {
                        FailMessage(ex, ex.Message);
                    }
                }
            }

            if (isChanged)
            {
                PageUtils.CloseModalPage(Page);
            }
        }
예제 #20
0
        public List <TableColumnInfo> GetTableColumnInfoList(string connectionString, string databaseName, string tableName, string tableId)
        {
            if (string.IsNullOrEmpty(connectionString))
            {
                connectionString = ConnectionString;
            }

            var cacheList = SqlUtils.Cache_GetTableColumnInfoListCache(connectionString, databaseName, tableId);

            if (cacheList != null && cacheList.Count > 0)
            {
                return(cacheList);
            }

            var list            = new List <TableColumnInfo>();
            var isIdentityExist = false;

            if (WebConfigUtils.IsMySql)
            {
                string sqlString = $"select COLUMN_NAME, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, COLUMN_KEY from information_schema.columns where table_schema = '{databaseName}' and table_name = '{tableName}' order by table_name,ordinal_position; ";
                using (var rdr = ExecuteReader(connectionString, sqlString))
                {
                    while (rdr.Read())
                    {
                        var columnName   = Convert.ToString(rdr.GetValue(0));
                        var isNullable   = Convert.ToString(rdr.GetValue(1)) == "YES";
                        var dataType     = EDataTypeUtils.FromMySql(Convert.ToString(rdr.GetValue(2)));
                        var length       = rdr.IsDBNull(3) || dataType == EDataType.NText || dataType == EDataType.Text ? 0 : Convert.ToInt32(rdr.GetValue(3));
                        var precision    = rdr.IsDBNull(4) ? 0 : Convert.ToInt32(rdr.GetValue(4));
                        var scale        = rdr.IsDBNull(5) ? 0 : Convert.ToInt32(rdr.GetValue(5));
                        var isPrimaryKey = Convert.ToString(rdr.GetValue(6)) == "PRI";

                        var isIdentity = isPrimaryKey && StringUtils.EqualsIgnoreCase(columnName, "ID");

                        var info = new TableColumnInfo(databaseName, tableId, columnName, dataType, length, precision, scale, isPrimaryKey, isNullable, isIdentity);
                        list.Add(info);
                    }
                    rdr.Close();
                }
            }
            else
            {
                string sqlString =
                    $"select C.name, T.name, C.length, C.xprec, C.xscale, C.colstat, C.isnullable, case when C.autoval is null then 0 else 1 end, SC.text, (select CForgin.name from [{databaseName}].dbo.sysreferences Sr,[{databaseName}].dbo.sysobjects O,[{databaseName}].dbo.syscolumns CForgin where Sr.fkeyid={tableId} and Sr.fkey1=C.colid and Sr.rkeyid=O.id and CForgin.id=O.id and CForgin.colid=Sr.rkey1), (select O.name from [{databaseName}].dbo.sysreferences Sr,[{databaseName}].dbo.sysobjects O,[{databaseName}].dbo.syscolumns CForgin where Sr.fkeyid={tableId} and Sr.fkey1=C.colid and Sr.rkeyid=O.id and CForgin.id=O.id and CForgin.colid=Sr.rkey1), (select Sr.rkeyid from [{databaseName}].dbo.sysreferences Sr,[{databaseName}].dbo.sysobjects O,[{databaseName}].dbo.syscolumns CForgin where Sr.fkeyid={tableId} and Sr.fkey1=C.colid and Sr.rkeyid=O.id and CForgin.id=O.id and CForgin.colid=Sr.rkey1) from [{databaseName}].dbo.systypes T, [{databaseName}].dbo.syscolumns C left join [{databaseName}].dbo.syscomments SC on C.cdefault=SC.id where C.id={tableId} and C.xtype=T.xusertype order by C.colid";

                using (var rdr = ExecuteReader(connectionString, sqlString))
                {
                    while (rdr.Read())
                    {
                        var columnName = Convert.ToString(rdr.GetValue(0));
                        if (columnName == "msrepl_tran_version")//sqlserver 发布订阅字段,忽略
                        {
                            continue;
                        }
                        var dataType        = EDataTypeUtils.FromSqlServer(Convert.ToString(rdr.GetValue(1)));
                        var length          = GetDataLength(dataType, Convert.ToInt32(rdr.GetValue(2)));
                        var precision       = Convert.ToInt32(rdr.GetValue(3));
                        var scale           = Convert.ToInt32(rdr.GetValue(4));
                        var isPrimaryKeyInt = Convert.ToInt32(rdr.GetValue(5));
                        var isNullableInt   = Convert.ToInt32(rdr.GetValue(6));
                        var isIdentityInt   = Convert.ToInt32(rdr.GetValue(7));

                        var isPrimaryKey = isPrimaryKeyInt == 1;
                        var isNullable   = isNullableInt == 1;
                        var isIdentity   = isIdentityInt == 1 || StringUtils.EqualsIgnoreCase(columnName, "ID");
                        //sqlserver 2005 返回isIdentity结果不正确,so 在此假设所有ID字段为Idenity字段
                        if (isIdentity)
                        {
                            isIdentityExist = true;
                        }

                        var info = new TableColumnInfo(databaseName, tableId, columnName, dataType, length, precision, scale, isPrimaryKey, isNullable, isIdentity);
                        list.Add(info);
                    }
                    rdr.Close();
                }

                if (!isIdentityExist)
                {
                    var sqlIdentity = "select name from syscolumns where id = object_id(N'" + tableName + "') and COLUMNPROPERTY(id, name,'IsIdentity')= 1";
                    var clName      = "";
                    using (var rdr = ExecuteReader(sqlIdentity))
                    {
                        if (rdr.Read())
                        {
                            clName = GetString(rdr, 0);
                        }
                        rdr.Close();
                    }

                    foreach (var info in list)
                    {
                        if (clName == info.ColumnName)
                        {
                            info.IsIdentity = true;
                        }
                    }
                }
            }

            SqlUtils.Cache_CacheTableColumnInfoList(connectionString, databaseName, tableId, list);

            return(list);
        }
예제 #21
0
        void dgContents_ItemDataBound(object sender, DataGridItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                var tableMetadataId = SqlUtils.EvalInt(e.Item.DataItem, "TableMetadataID");
                var attributeName   = SqlUtils.EvalString(e.Item.DataItem, "AttributeName");
                var dataType        = SqlUtils.EvalString(e.Item.DataItem, "DataType");
                var dataLength      = SqlUtils.EvalInt(e.Item.DataItem, "DataLength");
                var isSystem        = SqlUtils.EvalString(e.Item.DataItem, "IsSystem");

                var ltlAttributeName = e.Item.FindControl("ltlAttributeName") as Literal;
                var ltlDisplayName   = e.Item.FindControl("ltlDisplayName") as Literal;
                var ltlIsVisible     = e.Item.FindControl("ltlIsVisible") as Literal;
                var ltlValidate      = e.Item.FindControl("ltlValidate") as Literal;
                var ltlDataType      = e.Item.FindControl("ltlDataType") as Literal;
                var ltlInputType     = e.Item.FindControl("ltlInputType") as Literal;
                var upLinkButton     = e.Item.FindControl("UpLinkButton") as HyperLink;
                var downLinkButton   = e.Item.FindControl("DownLinkButton") as HyperLink;
                var ltlStyle         = e.Item.FindControl("ltlStyle") as Literal;
                var ltlEditValidate  = e.Item.FindControl("ltlEditValidate") as Literal;
                var ltlEditUrl       = e.Item.FindControl("ltlEditUrl") as Literal;
                var ltlDeleteUrl     = e.Item.FindControl("ltlDeleteUrl") as Literal;

                var showPopWinString = ModalTableMetadataView.GetOpenWindowString(_tableType, _tableName, attributeName);
                ltlAttributeName.Text =
                    $"<a href=\"javascript:void 0;\" onClick=\"{showPopWinString}\">{attributeName}</a>";

                var styleInfo = TableStyleManager.GetTableStyleInfo(EAuxiliaryTableTypeUtils.GetTableStyle(_tableType), _tableName, attributeName, null);
                ltlDisplayName.Text = styleInfo.DisplayName;

                ltlIsVisible.Text = StringUtils.GetTrueOrFalseImageHtml(styleInfo.IsVisible.ToString());
                ltlValidate.Text  = EInputValidateTypeUtils.GetValidateInfo(styleInfo);

                ltlDataType.Text  = EDataTypeUtils.GetTextByAuxiliaryTable(EDataTypeUtils.GetEnumType(dataType), dataLength);
                ltlInputType.Text = EInputTypeUtils.GetText(EInputTypeUtils.GetEnumType(styleInfo.InputType));

                if (IsSystem(isSystem))
                {
                    if (upLinkButton != null)
                    {
                        upLinkButton.NavigateUrl = PageUtils.GetSysUrl(nameof(PageTableMetadata),
                                                                       new NameValueCollection
                        {
                            { "PublishmentSystemID", PublishmentSystemId.ToString() },
                            { "SetTaxis", "True" },
                            { "TableStyleID", styleInfo.TableStyleId.ToString() },
                            { "Direction", "UP" },
                            { "TableMetadataId", tableMetadataId.ToString() },
                            { "ENName", _tableName },
                            { "TableType", EAuxiliaryTableTypeUtils.GetValue(_tableType) }
                        });
                    }
                    if (downLinkButton != null)
                    {
                        downLinkButton.NavigateUrl = PageUtils.GetSysUrl(nameof(PageTableMetadata),
                                                                         new NameValueCollection
                        {
                            { "PublishmentSystemID", PublishmentSystemId.ToString() },
                            { "SetTaxis", "True" },
                            { "TableStyleID", styleInfo.TableStyleId.ToString() },
                            { "Direction", "DOWN" },
                            { "TableMetadataId", tableMetadataId.ToString() },
                            { "ENName", _tableName },
                            { "TableType", EAuxiliaryTableTypeUtils.GetValue(_tableType) }
                        });
                    }
                }

                ltlStyle.Text = GetEditStyleHtml(tableMetadataId, attributeName);

                showPopWinString     = ModalTableStyleValidateAdd.GetOpenWindowString(styleInfo.TableStyleId, _tableName, styleInfo.AttributeName, EAuxiliaryTableTypeUtils.GetTableStyle(_tableType), _redirectUrl);
                ltlEditValidate.Text = $"<a href=\"javascript:void 0;\" onClick=\"{showPopWinString}\">设置</a>";

                ltlEditUrl.Text = GetEditHtml(isSystem, tableMetadataId);

                if (!IsSystem(isSystem))
                {
                    var attributes = new NameValueCollection
                    {
                        { "Delete", true.ToString() },
                        { "TableMetadataID", tableMetadataId.ToString() }
                    };
                    var deleteUrl = PageUtils.AddQueryString(_redirectUrl, attributes);
                    ltlDeleteUrl.Text =
                        $@"<a href=""{deleteUrl}"" onClick=""javascript:return confirm('此操作将删除辅助字段“{attributeName}”,确认吗?');"">删除字段</a>";
                }
            }
        }