Exemple #1
0
        /*
         * sys.sp_addextendedproperty @name = NULL, -- sysname
         *      @value = NULL, -- sql_variant
         *      @level0type = '', -- varchar(128)
         *      @level0name = NULL, -- sysname
         *      @level1type = '', -- varchar(128)
         *      @level1name = NULL, -- sysname
         *      @level2type = '', -- varchar(128)
         *      @level2name = NULL -- sysname
         *
         *  sys.sp_updateextendedproperty @name = NULL, -- sysname
         *      @value = NULL, -- sql_variant
         *      @level0type = '', -- varchar(128)
         *      @level0name = NULL, -- sysname
         *      @level1type = '', -- varchar(128)
         *      @level1name = NULL, -- sysname
         *      @level2type = '', -- varchar(128)
         *      @level2name = NULL -- sysname
         *
         *  sys.sp_dropextendedproperty @name = NULL, -- sysname
         *      @level0type = '', -- varchar(128)
         *      @level0name = NULL, -- sysname
         *      @level1type = '', -- varchar(128)
         *      @level1name = NULL, -- sysname
         *      @level2type = '', -- varchar(128)
         *      @level2name = NULL -- sysname
         */
        /// <summary>
        ///
        /// </summary>
        /// <param name="db"></param>
        /// <param name="id"></param>
        /// <param name="description"></param>
        /// <param name="metaDataType"></param>
        public void CrudDescription(RdbDescriptor db, RDbMetaDataType metaDataType, string id, string description)
        {
            const string addProcName    = "sys.sp_addextendedproperty";
            const string updateProcName = "sys.sp_updateextendedproperty";
            const string dropProcName   = "sys.sp_dropextendedproperty";
            const string propertyName   = "MS_Description";

            switch (metaDataType)
            {
            case RDbMetaDataType.Database:
                break;

            case RDbMetaDataType.Table:
                #region Table
                DbTable table;
                if (!db.TryGetDbTable(id, out table))
                {
                    throw new AnycmdException("意外的数据库表" + id);
                }
                if (description == null && table.Description != null)
                {
                    db.ExecuteNonQuery(dropProcName, CommandType.StoredProcedure,
                                       CreateParameter(db, "name", propertyName, DbType.String),
                                       CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                                       CreateParameter(db, "level0name", table.SchemaName, DbType.String),
                                       CreateParameter(db, "level1type", "TABLE", DbType.String),
                                       CreateParameter(db, "level1name", table.Name, DbType.String));
                }
                else if (table.Description == null)
                {
                    db.ExecuteNonQuery(addProcName, CommandType.StoredProcedure,
                                       CreateParameter(db, "name", propertyName, DbType.String),
                                       CreateParameter(db, "value", description, DbType.String),
                                       CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                                       CreateParameter(db, "level0name", table.SchemaName, DbType.String),
                                       CreateParameter(db, "level1type", "TABLE", DbType.String),
                                       CreateParameter(db, "level1name", table.Name, DbType.String));
                }
                else
                {
                    db.ExecuteNonQuery(updateProcName, CommandType.StoredProcedure,
                                       CreateParameter(db, "name", propertyName, DbType.String),
                                       CreateParameter(db, "value", description, DbType.String),
                                       CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                                       CreateParameter(db, "level0name", table.SchemaName, DbType.String),
                                       CreateParameter(db, "level1type", "TABLE", DbType.String),
                                       CreateParameter(db, "level1name", table.Name, DbType.String));
                }
                table.Description = description;
                #endregion
                break;

            case RDbMetaDataType.View:
                #region View
                DbView view;
                if (!db.TryGetDbView(id, out view))
                {
                    throw new AnycmdException("意外的数据库视图" + id);
                }
                if (description == null && view.Description != null)
                {
                    db.ExecuteNonQuery(dropProcName, CommandType.StoredProcedure,
                                       CreateParameter(db, "name", propertyName, DbType.String),
                                       CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                                       CreateParameter(db, "level0name", view.SchemaName, DbType.String),
                                       CreateParameter(db, "level1type", "VIEW", DbType.String),
                                       CreateParameter(db, "level1name", view.Name, DbType.String));
                }
                else if (view.Description == null)
                {
                    db.ExecuteNonQuery(addProcName, CommandType.StoredProcedure,
                                       CreateParameter(db, "name", propertyName, DbType.String),
                                       CreateParameter(db, "value", description, DbType.String),
                                       CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                                       CreateParameter(db, "level0name", view.SchemaName, DbType.String),
                                       CreateParameter(db, "level1type", "VIEW", DbType.String),
                                       CreateParameter(db, "level1name", view.Name, DbType.String));
                }
                else
                {
                    db.ExecuteNonQuery(updateProcName, CommandType.StoredProcedure,
                                       CreateParameter(db, "name", propertyName, DbType.String),
                                       CreateParameter(db, "value", description, DbType.String),
                                       CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                                       CreateParameter(db, "level0name", view.SchemaName, DbType.String),
                                       CreateParameter(db, "level1type", "VIEW", DbType.String),
                                       CreateParameter(db, "level1name", view.Name, DbType.String));
                }
                view.Description = description;
                #endregion
                break;

            case RDbMetaDataType.TableColumn:
                #region TableColumn
                DbTableColumn tableColumn;
                if (!db.AcDomain.Rdbs.DbTableColumns.TryGetDbTableColumn(db, id, out tableColumn))
                {
                    throw new AnycmdException("意外的数据库表列标识" + id);
                }
                if (description == null && tableColumn.Description != null)
                {
                    db.ExecuteNonQuery(dropProcName, CommandType.StoredProcedure,
                                       CreateParameter(db, "name", propertyName, DbType.String),
                                       CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                                       CreateParameter(db, "level0name", tableColumn.SchemaName, DbType.String),
                                       CreateParameter(db, "level1type", "TABLE", DbType.String),
                                       CreateParameter(db, "level1name", tableColumn.TableName, DbType.String),
                                       CreateParameter(db, "level2type", "COLUMN", DbType.String),
                                       CreateParameter(db, "level2name", tableColumn.Name, DbType.String));
                }
                else if (tableColumn.Description == null)
                {
                    db.ExecuteNonQuery(addProcName, CommandType.StoredProcedure,
                                       CreateParameter(db, "name", propertyName, DbType.String),
                                       CreateParameter(db, "value", description, DbType.String),
                                       CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                                       CreateParameter(db, "level0name", tableColumn.SchemaName, DbType.String),
                                       CreateParameter(db, "level1type", "TABLE", DbType.String),
                                       CreateParameter(db, "level1name", tableColumn.TableName, DbType.String),
                                       CreateParameter(db, "level2type", "COLUMN", DbType.String),
                                       CreateParameter(db, "level2name", tableColumn.Name, DbType.String));
                }
                else
                {
                    db.ExecuteNonQuery(updateProcName, CommandType.StoredProcedure,
                                       CreateParameter(db, "name", propertyName, DbType.String),
                                       CreateParameter(db, "value", description, DbType.String),
                                       CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                                       CreateParameter(db, "level0name", tableColumn.SchemaName, DbType.String),
                                       CreateParameter(db, "level1type", "TABLE", DbType.String),
                                       CreateParameter(db, "level1name", tableColumn.TableName, DbType.String),
                                       CreateParameter(db, "level2type", "COLUMN", DbType.String),
                                       CreateParameter(db, "level2name", tableColumn.Name, DbType.String));
                }
                tableColumn.Description = description;
                #endregion
                break;

            case RDbMetaDataType.ViewColumn:
                #region ViewColumn
                DbViewColumn viewColumn;
                if (!db.AcDomain.Rdbs.DbViewColumns.TryGetDbViewColumn(db, id, out viewColumn))
                {
                    throw new AnycmdException("意外的数据库视图列标识" + id);
                }
                if (description == null && viewColumn.Description != null)
                {
                    db.ExecuteNonQuery(dropProcName, CommandType.StoredProcedure,
                                       CreateParameter(db, "name", propertyName, DbType.String),
                                       CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                                       CreateParameter(db, "level0name", viewColumn.SchemaName, DbType.String),
                                       CreateParameter(db, "level1type", "VIEW", DbType.String),
                                       CreateParameter(db, "level1name", viewColumn.ViewName, DbType.String),
                                       CreateParameter(db, "level2type", "COLUMN", DbType.String),
                                       CreateParameter(db, "level2name", viewColumn.Name, DbType.String));
                }
                else if (viewColumn.Description == null)
                {
                    db.ExecuteNonQuery(addProcName, CommandType.StoredProcedure,
                                       CreateParameter(db, "name", propertyName, DbType.String),
                                       CreateParameter(db, "value", description, DbType.String),
                                       CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                                       CreateParameter(db, "level0name", viewColumn.SchemaName, DbType.String),
                                       CreateParameter(db, "level1type", "VIEW", DbType.String),
                                       CreateParameter(db, "level1name", viewColumn.ViewName, DbType.String),
                                       CreateParameter(db, "level2type", "COLUMN", DbType.String),
                                       CreateParameter(db, "level2name", viewColumn.Name, DbType.String));
                }
                else
                {
                    db.ExecuteNonQuery(updateProcName, CommandType.StoredProcedure,
                                       CreateParameter(db, "name", propertyName, DbType.String),
                                       CreateParameter(db, "value", description, DbType.String),
                                       CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                                       CreateParameter(db, "level0name", viewColumn.SchemaName, DbType.String),
                                       CreateParameter(db, "level1type", "VIEW", DbType.String),
                                       CreateParameter(db, "level1name", viewColumn.ViewName, DbType.String),
                                       CreateParameter(db, "level2type", "COLUMN", DbType.String),
                                       CreateParameter(db, "level2name", viewColumn.Name, DbType.String));
                }
                viewColumn.Description = description;
                #endregion
                break;

            default:
                break;
            }
        }
        /*
         * sys.sp_addextendedproperty @name = NULL, -- sysname
                @value = NULL, -- sql_variant
                @level0type = '', -- varchar(128)
                @level0name = NULL, -- sysname
                @level1type = '', -- varchar(128)
                @level1name = NULL, -- sysname
                @level2type = '', -- varchar(128)
                @level2name = NULL -- sysname

            sys.sp_updateextendedproperty @name = NULL, -- sysname
                @value = NULL, -- sql_variant
                @level0type = '', -- varchar(128)
                @level0name = NULL, -- sysname
                @level1type = '', -- varchar(128)
                @level1name = NULL, -- sysname
                @level2type = '', -- varchar(128)
                @level2name = NULL -- sysname

            sys.sp_dropextendedproperty @name = NULL, -- sysname
                @level0type = '', -- varchar(128)
                @level0name = NULL, -- sysname
                @level1type = '', -- varchar(128)
                @level1name = NULL, -- sysname
                @level2type = '', -- varchar(128)
                @level2name = NULL -- sysname
         */
        /// <summary>
        /// 
        /// </summary>
        /// <param name="db"></param>
        /// <param name="id"></param>
        /// <param name="description"></param>
        /// <param name="metaDataType"></param>
        public void CrudDescription(RdbDescriptor db, RDbMetaDataType metaDataType, string id, string description)
        {
            const string addProcName = "sys.sp_addextendedproperty";
            const string updateProcName = "sys.sp_updateextendedproperty";
            const string dropProcName = "sys.sp_dropextendedproperty";
            const string propertyName = "MS_Description";
            switch (metaDataType)
            {
                case RDbMetaDataType.Database:
                    break;
                case RDbMetaDataType.Table:
                    #region Table
                    DbTable table;
                    if (!db.TryGetDbTable(id, out table))
                    {
                        throw new AnycmdException("意外的数据库表" + id);
                    }
                    if (description == null && table.Description != null)
                    {
                        db.ExecuteNonQuery(dropProcName, CommandType.StoredProcedure,
                            CreateParameter(db, "name", propertyName, DbType.String),
                            CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                            CreateParameter(db, "level0name", table.SchemaName, DbType.String),
                            CreateParameter(db, "level1type", "TABLE", DbType.String),
                            CreateParameter(db, "level1name", table.Name, DbType.String));
                    }
                    else if (table.Description == null)
                    {
                        db.ExecuteNonQuery(addProcName, CommandType.StoredProcedure,
                            CreateParameter(db, "name", propertyName, DbType.String),
                            CreateParameter(db, "value", description, DbType.String),
                            CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                            CreateParameter(db, "level0name", table.SchemaName, DbType.String),
                            CreateParameter(db, "level1type", "TABLE", DbType.String),
                            CreateParameter(db, "level1name", table.Name, DbType.String));
                    }
                    else
                    {
                        db.ExecuteNonQuery(updateProcName, CommandType.StoredProcedure,
                            CreateParameter(db, "name", propertyName, DbType.String),
                            CreateParameter(db, "value", description, DbType.String),
                            CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                            CreateParameter(db, "level0name", table.SchemaName, DbType.String),
                            CreateParameter(db, "level1type", "TABLE", DbType.String),
                            CreateParameter(db, "level1name", table.Name, DbType.String));
                    }
                    table.Description = description;
                    #endregion
                    break;
                case RDbMetaDataType.View:
                    #region View
                    DbView view;
                    if (!db.TryGetDbView(id, out view))
                    {
                        throw new AnycmdException("意外的数据库视图" + id);
                    }
                    if (description == null && view.Description != null)
                    {
                        db.ExecuteNonQuery(dropProcName, CommandType.StoredProcedure,
                            CreateParameter(db, "name", propertyName, DbType.String),
                            CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                            CreateParameter(db, "level0name", view.SchemaName, DbType.String),
                            CreateParameter(db, "level1type", "VIEW", DbType.String),
                            CreateParameter(db, "level1name", view.Name, DbType.String));
                    }
                    else if (view.Description == null)
                    {
                        db.ExecuteNonQuery(addProcName, CommandType.StoredProcedure,
                            CreateParameter(db, "name", propertyName, DbType.String),
                            CreateParameter(db, "value", description, DbType.String),
                            CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                            CreateParameter(db, "level0name", view.SchemaName, DbType.String),
                            CreateParameter(db, "level1type", "VIEW", DbType.String),
                            CreateParameter(db, "level1name", view.Name, DbType.String));
                    }
                    else
                    {
                        db.ExecuteNonQuery(updateProcName, CommandType.StoredProcedure,
                            CreateParameter(db, "name", propertyName, DbType.String),
                            CreateParameter(db, "value", description, DbType.String),
                            CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                            CreateParameter(db, "level0name", view.SchemaName, DbType.String),
                            CreateParameter(db, "level1type", "VIEW", DbType.String),
                            CreateParameter(db, "level1name", view.Name, DbType.String));
                    }
                    view.Description = description;
                    #endregion
                    break;
                case RDbMetaDataType.TableColumn:
                    #region TableColumn
                    DbTableColumn tableColumn;
                    if (!db.AcDomain.Rdbs.DbTableColumns.TryGetDbTableColumn(db, id, out tableColumn))
                    {
                        throw new AnycmdException("意外的数据库表列标识" + id);
                    }
                    if (description == null && tableColumn.Description != null)
                    {
                        db.ExecuteNonQuery(dropProcName, CommandType.StoredProcedure,
                            CreateParameter(db, "name", propertyName, DbType.String),
                            CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                            CreateParameter(db, "level0name", tableColumn.SchemaName, DbType.String),
                            CreateParameter(db, "level1type", "TABLE", DbType.String),
                            CreateParameter(db, "level1name", tableColumn.TableName, DbType.String),
                            CreateParameter(db, "level2type", "COLUMN", DbType.String),
                            CreateParameter(db, "level2name", tableColumn.Name, DbType.String));
                    }
                    else if (tableColumn.Description == null)
                    {
                        db.ExecuteNonQuery(addProcName, CommandType.StoredProcedure,
                            CreateParameter(db, "name", propertyName, DbType.String),
                            CreateParameter(db, "value", description, DbType.String),
                            CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                            CreateParameter(db, "level0name", tableColumn.SchemaName, DbType.String),
                            CreateParameter(db, "level1type", "TABLE", DbType.String),
                            CreateParameter(db, "level1name", tableColumn.TableName, DbType.String),
                            CreateParameter(db, "level2type", "COLUMN", DbType.String),
                            CreateParameter(db, "level2name", tableColumn.Name, DbType.String));
                    }
                    else
                    {
                        db.ExecuteNonQuery(updateProcName, CommandType.StoredProcedure,
                            CreateParameter(db, "name", propertyName, DbType.String),
                            CreateParameter(db, "value", description, DbType.String),
                            CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                            CreateParameter(db, "level0name", tableColumn.SchemaName, DbType.String),
                            CreateParameter(db, "level1type", "TABLE", DbType.String),
                            CreateParameter(db, "level1name", tableColumn.TableName, DbType.String),
                            CreateParameter(db, "level2type", "COLUMN", DbType.String),
                            CreateParameter(db, "level2name", tableColumn.Name, DbType.String));
                    }
                    tableColumn.Description = description;
                    #endregion
                    break;
                case RDbMetaDataType.ViewColumn:
                    #region ViewColumn
                    DbViewColumn viewColumn;
                    if (!db.AcDomain.Rdbs.DbViewColumns.TryGetDbViewColumn(db, id, out viewColumn))
                    {
                        throw new AnycmdException("意外的数据库视图列标识" + id);
                    }
                    if (description == null && viewColumn.Description != null)
                    {
                        db.ExecuteNonQuery(dropProcName, CommandType.StoredProcedure,
                            CreateParameter(db, "name", propertyName, DbType.String),
                            CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                            CreateParameter(db, "level0name", viewColumn.SchemaName, DbType.String),
                            CreateParameter(db, "level1type", "VIEW", DbType.String),
                            CreateParameter(db, "level1name", viewColumn.ViewName, DbType.String),
                            CreateParameter(db, "level2type", "COLUMN", DbType.String),
                            CreateParameter(db, "level2name", viewColumn.Name, DbType.String));
                    }
                    else if (viewColumn.Description == null)
                    {
                        db.ExecuteNonQuery(addProcName, CommandType.StoredProcedure,
                            CreateParameter(db, "name", propertyName, DbType.String),
                            CreateParameter(db, "value", description, DbType.String),
                            CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                            CreateParameter(db, "level0name", viewColumn.SchemaName, DbType.String),
                            CreateParameter(db, "level1type", "VIEW", DbType.String),
                            CreateParameter(db, "level1name", viewColumn.ViewName, DbType.String),
                            CreateParameter(db, "level2type", "COLUMN", DbType.String),
                            CreateParameter(db, "level2name", viewColumn.Name, DbType.String));
                    }
                    else
                    {
                        db.ExecuteNonQuery(updateProcName, CommandType.StoredProcedure,
                            CreateParameter(db, "name", propertyName, DbType.String),
                            CreateParameter(db, "value", description, DbType.String),
                            CreateParameter(db, "level0type", "SCHEMA", DbType.String),
                            CreateParameter(db, "level0name", viewColumn.SchemaName, DbType.String),
                            CreateParameter(db, "level1type", "VIEW", DbType.String),
                            CreateParameter(db, "level1name", viewColumn.ViewName, DbType.String),
                            CreateParameter(db, "level2type", "COLUMN", DbType.String),
                            CreateParameter(db, "level2name", viewColumn.Name, DbType.String));
                    }
                    viewColumn.Description = description;
                    #endregion
                    break;
                default:
                    break;
            }
        }