0

0

C#实现GRID字段别名显示,利用MSSQL数据库表及字段描述

php中文网

php中文网

发布时间:2016-06-07 16:11:14

|

1634人浏览过

|

来源于php中文网

原创

大家看到现有的大多数ERP系统向用户展示的都是中文的字段名,如果维护过ERP就会发现后台的数据库里面用的都是英文字段名的,这时就需要一个字段名别名转换处理,我有想过用[字段名 AS 别名]的方法不过我觉得好麻烦 也写了好多的代码,后面我无意中看到了MSDN

大家看到现有的大多数ERP系统向用户展示的都是中文的字段名,如果维护过ERP就会发现后台的数据库里面用的都是英文字段名的,这时就需要一个字段名别名转换处理,我有想过用[字段名 AS 别名]的方法不过我觉得好麻烦 也写了好多的代码,后面我无意中看到了MSDN上的文档发现了DataTableMapping
以下代码示例创建一个 DataTableMapping(从 System.Data.Common 命名空间)并通过将其命名为“Table”来使其成为指定 DataAdapter 的默认映射。然后,该示例将查询结果中第一个表(Northwind 数据库的 Customers 表)中的列映射到 DataSet 的 Northwind Customers 表中的一组更为用户友好的名称。对于未映射的列,将使用数据源中的列名称。
这里面的“一组更为用户友好的名称” 这几个字吸引了我的眼球。

1.得到一个表包含:表名,表描述,字段名,字段描述等字段资料

剪映
剪映

一款全能易用的桌面端剪辑软件

下载
        public DataTable GetColumnsInformation(bool IsHeader, params string[] TableNames)
        {
            using (SqlConnection sconn = new SqlConnection(ConnectionString.sqlconnection))
            {
                StringBuilder sbTableInner = new StringBuilder();
                DataSet ds = new DataSet();
                DataTable dt = new DataTable();
                if (!IsHeader)
                {
                    for (int CurrentTable = 0; CurrentTable < TableNames.Length; CurrentTable++)
                    {
                        if (CurrentTable == TableNames.Length - 1)
                        {
                            sbTableInner.Append("@" + TableNames[CurrentTable]);
                        }
                        else
                        {
                            sbTableInner.Append("@" + TableNames[CurrentTable] + ",");
                        }
                    }
                }
                else
                {
                    sbTableInner.Append("@" + TableNames[0]);
                }
                SqlCommand scomm = new SqlCommand("SELECT TableName = OBJECT_NAME(c.object_id)," +
                    "TableDecription = (SELECT a.[value] FROM sys.extended_properties a left JOIN  sysobjects b ON a.major_id=b.id WHERE b.name=OBJECT_NAME(c.object_id) and a.minor_id=0 )," +
                    "ColumnsName = c.name, Description = ex.value, ColumnType = t.name, " +
                    "Length = c.max_length, strCount = len(OBJECT_NAME(c.object_id)) " +
                    "FROM sys.columns c LEFT OUTER JOIN sys.extended_properties ex " +
                    "ON ex.major_id = c.object_id AND ex.minor_id = c.column_id AND ex.name = 'MS_Description' " +
                    "left outer join systypes t on c.system_type_id = t.xtype WHERE " +
                    "OBJECTPROPERTY(c.object_id, 'IsMsShipped') = 0 " +
                    "AND OBJECT_NAME(c.object_id) in (" + sbTableInner.ToString() + ") " +
                    "order by strCount", sconn);
                if (!IsHeader)
                {
                    for (int CurrentTable = 0; CurrentTable < TableNames.Length; CurrentTable++)
                    {
                        scomm.Parameters.AddWithValue("@" + TableNames[CurrentTable], TableNames[CurrentTable]);
                    }
                }
                else
                {
                    scomm.Parameters.AddWithValue("@" + TableNames[0], TableNames[0]);
                }
                SqlDataAdapter sda = new SqlDataAdapter(scomm);
                sda.MissingSchemaAction = MissingSchemaAction.AddWithKey;//添加必须的列和主键信息以完成架构
                sda.Fill(ds, "FieldTable");
                dt = ds.Tables[0];
                dt.Columns.Add("InnerColumns");
                dt.Columns.Add("InnerColumnsCN");
                for (int CurrentRow = 0; CurrentRow < dt.Rows.Count; CurrentRow++)
                {
                    dt.Rows[CurrentRow]["InnerColumns"] = dt.Rows[CurrentRow]["TableName"] + "." +
                        dt.Rows[CurrentRow]["ColumnsName"];
                    dt.Rows[CurrentRow]["InnerColumnsCN"] = dt.Rows[CurrentRow]["TableDecription"] + "-" +
                        dt.Rows[CurrentRow]["Description"];

                }
                return dt;
            }
        }
2.利用DataTableMapping 实现,向用户显示友好的字段名称

        public DataTable Query(string tableName, string where, bool IsAlias = true)
        {
            DataTable dtColumns = new DataTable();
            dtColumns = bq.ColumnsInformation(false, new string[] { tableName });
            using (SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM " + tableName +
                " WHERE InnerID LIKE @where ORDER BY RowID", ConnectionString.sqlconnection))
            {
                SqlParameter parm = new SqlParameter("@where", "%" + where + "%");
                sda.SelectCommand.Parameters.Add(parm);
                DataTableMapping mapping = sda.TableMappings.Add(tableName, dtColumns.Rows[0]["TableDecription"].ToString());
                for (int CurrentRow = 0; CurrentRow < dtColumns.Rows.Count; CurrentRow++)
                    mapping.ColumnMappings.Add(dtColumns.Rows[CurrentRow]["ColumnsName"].ToString(),
                        dtColumns.Rows[CurrentRow]["Description"].ToString());
                DataSet ds = new DataSet();
                if (IsAlias)
                {
                    sda.Fill(ds, mapping.SourceTable);
                }
                else
                {
                    sda.Fill(ds, mapping.DataSetTable);
                }
                DataTable dt = new DataTable();
                dt = ds.Tables[0];
                return dt;
            }
        }

这边可以考虑多表关联的情况,留给大家去动动脑子吧!

相关专题

更多
苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

115

2025.12.24

拼豆图纸在线生成器
拼豆图纸在线生成器

拼豆图纸生成器有PixelBeads在线版、BeadGen和“豆图快转”;推荐通过pixelbeads.online或搜索“beadgen free online”直达官网,避开需注册的诱导页面。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

82

2025.12.24

俄罗斯搜索引擎yandex官方入口地址(最新版)
俄罗斯搜索引擎yandex官方入口地址(最新版)

Yandex官方入口网址是https://yandex.com。用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

546

2025.12.24

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

150

2025.12.24

php框架基础知识汇总
php框架基础知识汇总

php框架是构建web应用程序的架构,提供工具和功能,以简化开发过程。选择合适的框架取决于项目需求和技能水平。实战案例展示了使用laravel构建博客的步骤,包括安装、创建模型、定义路由、编写控制器和呈现视图。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

20

2025.12.24

Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

47

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

7

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

12

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

371

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 7.3万人学习

CSS3 教程
CSS3 教程

共18课时 | 4万人学习

Rust 教程
Rust 教程

共28课时 | 3.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号