根据数据库表名获取表的字段与描述

前言

本文使用Sqlsuger框架对SqlServer数据库进行访问与操作
业务场景有时需要根据数据库名获取表结构对应的列项和描述
1、使用SqlSuger数据库提供的方法;
2、使用原生的sql进行操作


一、SqlSuger方法

示例使用仓储调用上文Context,使用方法GetColumnInfosByTableName获取数据表信息;
List<DbColumnInfo> GetColumnInfosByTableName(string tableName, bool isCache = true);
入参:
tableName:表名(string),
isCache:是否使用Cache数据(当对待查询表进行数据库动态新增或删除字段时,使用true会导致读到脏数据),参数默认值为true
出参:
List<DbColumnInfo> value:包含表列项的详细数据,包括列名和描述等。

var ColumnList = _DataSourceRepository.Context.DbMaintenance.GetColumnInfosByTableName(custInfo.TableName);
foreach( var column in ColumnList)
{
    var item = new DataSource()
    {
        CustId = parm.CustId,
        ProductCode = parm.ProductCode,
        //获取表的列项,列
        Param = column.DbColumnName,
        //获取列项的描述,列名
        ParamName = column.ColumnDescription,
        IsDefault = "1",
        //获取用户名
        CreateBy = _HttpContext.User.Identity.Name,
        CreateTime = DateTime.Now,
    };
    SourceList.Add(item); 

}

二、使用原生sql

TableName为对应的数据库表名,SqlServer使用以下Sql可查询到表名对应的列项和列项说明(Mysql不一定支持,未测试)。通过方法GetDataTable(sql),执行sql返回DataTable类型数据,再遍历返回值获取里面表的列项和说明。

var sqls = "SELECT B.name AS DbColumnName,C.value AS ColumnDescription " +
    "from sys.columns B LEFT JOIN sys.extended_properties C ON C.major_id = B.object_id AND C.minor_id = B.column_id" +
    " WHERE B.object_id = object_id('" + TableName + "')";
var ColumnInfoList = _DataSourceRepository.Context.Ado.GetDataTable(sqls);

var tableColumn = new List<TableColumn>();

foreach (DataRow row in ColumnInfoList.Rows)
{
	//获取列项
    var columnName = row["DbColumnName"].ToString();
    //获取列项描述
    var columnDes = row["ColumnDescription"].ToString();
    var item = new TableColumn
    {
        ColumnName = columnName,
        ColumnDescription = columnDes;
    }
    tableColumn.Add(item);
    
}

总结

以上两种方法都能实现通过表名获取表字段和描述,请注意示例里的具体的方法使用。如需使用,请根据具体业务场景考虑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开心,你呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值