【C#】SqlServer数据库表生成C# Model实体类 小工具

先来个效果图

【C#】SqlServer数据库表生成C# Model实体类 小工具_第1张图片

前言

在开发过程中,经常有一些重复性的工作要做,而且工作量挺大的

比如,在创建数据表和创建Model实体列时,通常要耗费一定的时间,其实我们可以通过脚本读取数据库表来生成实体类

 

SqlServer

在SqlServer中有一些系统自带的视图,能帮助我们查询到所要的信息

select * from sys.extended_properties  --查询表和列注释,列的排列顺序

select * from sys.columns --查询数据库表所有列的详细信息 字段类型,表的字段,名称等

select * from sysobjects where xtype = 'U' --查询所有用户创建的表信息

select * from systypes  --查询SQL SERVER 数据库所有的类型

select * from syscolumns --查询所有字段名称 长度等

我们可以通过多视图查询,获取字段的信息

select syscolumns.name as fieldName,
systypes.name as fieldType,
ext.value as fieldDesc,
sysobjects.name as tableName,
(select isnull(value,'') from sys.extended_properties ex_p where ex_p.minor_id=0 and ex_p.major_id=sysobjects.id) as tableDesc
from syscolumns  
inner join sysobjects on   syscolumns.id  =  sysobjects.id 
inner join systypes on   syscolumns.xtype   =   systypes.xtype 
inner join sys.extended_properties as ext on ext.major_id=sysobjects.id 
and ext.minor_id=syscolumns.colorder
where  (systypes.name <> 'sysname')
order by ext.major_id

这是查询到所有用户表的结果

【C#】SqlServer数据库表生成C# Model实体类 小工具_第2张图片

我们可以在表属性为表添加说明

【C#】SqlServer数据库表生成C# Model实体类 小工具_第3张图片

同时为列添加说明

【C#】SqlServer数据库表生成C# Model实体类 小工具_第4张图片

 

C#

在SqlServer的数据类型与C#中是不同的,所以需要进行转换

/// 
/// 数据库数据类型转C#
/// 
private string SqlDataTypeToCSharp(string 
{
    string CSharpDataType = string.Empty;
    switch (sqlDataType)
    {
        case "bit":
            CSharpDataType = "bool";
            break;
        case "tinyint":
            CSharpDataType = "byte";
            break;
        case "smallint":
            CSharpDataType = "short";
            break;
        case "int":
            CSharpDataType = "int";
            break;
        case "bigint":
            CSharpDataType = "long";
            break;
        case "smallmoney":
        case "money":
        case "numeric":
        case "decimal":
            CSharpDataType = "int";//decim
            break;
        case "float":
            CSharpDataType = "double";
            break;
        case "real":
            CSharpDataType = "float";
            break;
        case "smalldatetime":
        case "datetime":
        case "timestamp":
            CSharpDataType = "DateTime";
            break;
        case "char":
        case "text":
        case "varchar":
        case "nchar":
        case "ntext":
        case "nvarchar":
            CSharpDataType = "string";
            break;
        case "binary":
        case "varbinary":
        case "image":
            CSharpDataType = "byte[]";
            break;
        case "uniqueidentifier":
            CSharpDataType = "Guid";
            break;
        case "Variant":
            CSharpDataType = "object";
            break;
        default:
            break;
    }
    return CSharpDataType;
}

在C#中,我们可以新建一个字段类来存放在数据库查询的字段信息

/// 
/// 字段
/// 
public class Field
{
    /// 
    /// 字段名称
    /// 
    public string fieldName { get; set; }
    /// 
    /// 字段类型
    /// 
    public string fieldType { get; set; }
    /// 
    /// 字段说明
    /// 
    public string fieldDesc { get; set; }
    /// 
    /// 表名称
    /// 
    public string tableName { get; set; }
    /// 
    /// 表说明
    /// 
    public string tableDesc { get; set; }

}

通过查询数据库用户表字段信息,保存于DataGridView中,可再次编辑信息,再根据DataGridView的信息生成预览代码,最后生成.cs文件

我们可以先自己新建一个类,研究各个部分的构成

首先是引入命名空间

lsbMode.Items.Add("using System;");
lsbMode.Items.Add("using System.Collections.Generic;");
lsbMode.Items.Add("using System.Linq;");
lsbMode.Items.Add("using System.Text;");
lsbMode.Items.Add("");

然后就是类名,属性等一些信息,遍历所有字段信息

lsbMode.Items.Add("");
lsbMode.Items.Add("        /// ");
lsbMode.Items.Add("        /// " + fields[i].fieldDesc);
lsbMode.Items.Add("        /// ");
lsbMode.Items.Add("        public " + SqlDataTypeToCSharp(fields[i].fieldType) + " " + fields[i].fieldName +" { get; set; }");

最后将代码保存到.cs文件中,在项目中添加现有项即可

private void SaveToFile(string path)
{
    StreamWriter writer = File.CreateText(path);
    foreach (var item in lsbMode.Items)
    {
        writer.WriteLine(item);
    }
    writer.Close();
}

 

源码:SqlServer数据库表生成C# Model实体类 小工具 TableToModel源码

你可能感兴趣的:(C#操作SqlServer,资源)