如何从Microsoft SQL Server生成C#类

目录

背景

使用代码


背景

如果您没有使用任何ORM工具从数据库生成类,则此过程会消耗大量时间和资源。

SQL代码使您免于在此类数据操作上浪费时间,并让您专注于代码开发。

现在,您可以轻松地从常见的SQL数据库类型生成C#对象类。

使用代码

要使用此代码,只需突出显示您要使用的数据库并打开一个新查询。粘贴代码片段,执行生成的类并将其复制到Visual StudioVS Code中。

// SET NOCOUNT ON;  
  
DECLARE @table_name NVARCHAR(250), @message VARCHAR(80);  
  
DECLARE table_cursor CURSOR FOR   
select distinct tab.name as table_name
from sys.tables as tab
    inner join sys.columns as col on tab.object_id = col.object_id
    left join sys.types as t on col.user_type_id = t.user_type_id
order by table_name;  
  
OPEN table_cursor  
  
FETCH NEXT FROM table_cursor   
INTO @table_name  
  
WHILE @@FETCH_STATUS = 0  
BEGIN  
    PRINT ' '  
    --SELECT @message = 'Table Name: ' +   
    --    @table_name  
  
    --PRINT @message  
  
    --declare @TableName sysname = 'TableName'
    declare @Result varchar(max) = 'public class ' + @table_name + '
    {'

    select @Result = @Result + '
    public ' + ColumnType + NullableSign + ' ' + ColumnName + ' { get; set; }
    '
    from
    (
    select 
    replace(col.name, ' ', '_') ColumnName,
    column_id ColumnId,
    case typ.name 
    when 'bigint' then 'long'
    when 'binary' then 'byte[]'
    when 'bit' then 'bool'
    when 'char' then 'string'
    when 'date' then 'DateTime'
    when 'datetime' then 'DateTime'
    when 'datetime2' then 'DateTime'
    when 'datetimeoffset' then 'DateTimeOffset'
    when 'decimal' then 'decimal'
    when 'float' then 'float'
    when 'image' then 'byte[]'
    when 'int' then 'int'
    when 'money' then 'decimal'
    when 'nchar' then 'char'
    when 'ntext' then 'string'
    when 'numeric' then 'decimal'
    when 'nvarchar' then 'string'
    when 'real' then 'double'
    when 'smalldatetime' then 'DateTime'
    when 'smallint' then 'short'
    when 'smallmoney' then 'decimal'
    when 'text' then 'string'
    when 'time' then 'TimeSpan'
    when 'timestamp' then 'DateTime'
    when 'tinyint' then 'byte'
    when 'uniqueidentifier' then 'Guid'
    when 'varbinary' then 'byte[]'
    when 'varchar' then 'string'
    else 'UNKNOWN_' + typ.name
    end ColumnType,
    case 
    when col.is_nullable = 1 and typ.name in ('bigint', 'bit', 'date', _
    'datetime', 'datetime2', 'datetimeoffset', 'decimal', 'float', 'int', _
    'money', 'numeric', 'real', 'smalldatetime', 'smallint', 'smallmoney', _
    'time', 'tinyint', 'uniqueidentifier') 
    then '?' 
    else '' 
    end NullableSign
    from sys.columns col
    join sys.types typ on
    col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
    where object_id = object_id(@table_name)
    ) t
    order by ColumnId

    set @Result = @Result  + '
    }'

    print @Result
  
    FETCH NEXT FROM table_cursor   
    INTO @table_name  
END   
CLOSE table_cursor;  
DEALLOCATE table_cursor;  
//

https://www.codeproject.com/Tips/5305142/How-to-Generate-Csharp-Classes-from-Microsoft-SQL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值