SQL Server中數據類型對應C#中數據類型


在SQL Server 2008中新建數據表的時候有33種數據類型可選,下面分別列舉了這些類型對應的C#數據類型

//------------------------------------------------------------------------------
// .NET Framework 版本4.6目前不支持數據類型“hierarchyid”
// .NET Framework 版本4.6目前不支持數據類型“sql_variant”
// SQL Server限定同一張表中只能有一個時間戳(timestamp)列
//------------------------------------------------------------------------------

using System;
using System.Collections.Generic;

public partial class TypeTest
{
    public Nullable<long> bigint_Null { get; set; }
    public long bigint { get; set; }
    public byte[] binary_Null { get; set; }
    public byte[] binary { get; set; }
    public Nullable<bool> bit_Null { get; set; }
    public bool bit { get; set; }
    public string char_Null { get; set; }
    public string @char { get; set; }
    public Nullable<System.DateTime> date_Null { get; set; }
    public System.DateTime date { get; set; }
    public Nullable<System.DateTime> datetime_Null { get; set; }
    public System.DateTime datetime { get; set; }
    public Nullable<System.DateTime> datetime2_Null { get; set; }
    public System.DateTime datetime2 { get; set; }
    public Nullable<System.DateTimeOffset> datetimeoffset_Null { get; set; }
    public System.DateTimeOffset datetimeoffset { get; set; }
    public Nullable<decimal> decimal_Null { get; set; }
    public decimal @decimal { get; set; }
    public Nullable<double> float_Null { get; set; }
    public double @float { get; set; }
    public System.Data.Spatial.DbGeography geography_Null { get; set; }
    public System.Data.Spatial.DbGeography geography { get; set; }
    public System.Data.Spatial.DbGeometry geometry_Null { get; set; }
    public System.Data.Spatial.DbGeometry geometry { get; set; }
    public byte[] image_Null { get; set; }
    public byte[] image { get; set; }
    public Nullable<int> int_Null { get; set; }
    public int @int { get; set; }
    public Nullable<decimal> money_Null { get; set; }
    public decimal money { get; set; }
    public string nchar_Null { get; set; }
    public string nchar { get; set; }
    public string ntext_Null { get; set; }
    public string ntext { get; set; }
    public Nullable<decimal> numeric_Null { get; set; }
    public decimal numeric { get; set; }
    public string nvarchar_Null { get; set; }
    public string nvarchar { get; set; }
    public Nullable<float> real_Null { get; set; }
    public float real { get; set; }
    public Nullable<System.DateTime> smalldatetime_Null { get; set; }
    public System.DateTime smalldatetime { get; set; }
    public Nullable<short> smallint_Null { get; set; }
    public short smallint { get; set; }
    public Nullable<decimal> smallmoney_Null { get; set; }
    public decimal smallmoney { get; set; }
    public string text_Null { get; set; }
    public string text { get; set; }
    public Nullable<System.TimeSpan> time_Null { get; set; }
    public System.TimeSpan time { get; set; }
    public byte[] timestamp_Null { get; set; }
    public Nullable<byte> tinyint_Null { get; set; }
    public byte tinyint { get; set; }
    public Nullable<System.Guid> uniqueidentifier_Null { get; set; }
    public System.Guid uniqueidentifier { get; set; }
    public byte[] varbinary_Null { get; set; }
    public byte[] varbinary { get; set; }
    public string varchar_Null { get; set; }
    public string varchar { get; set; }
    public string xml_Null { get; set; }
    public string xml { get; set; }
}
CREATE TABLE [dbo].[TypeTest](
    [bigint_Null] [bigint] NULL,
    [bigint] [bigint] NOT NULL,
    [binary_Null] [binary](50) NULL,
    [binary] [binary](50) NOT NULL,
    [bit_Null] [bit] NULL,
    [bit] [bit] NOT NULL,
    [char_Null] [char](10) NULL,
    [char] [char](10) NOT NULL,
    [date_Null] [date] NULL,
    [date] [date] NOT NULL,
    [datetime_Null] [datetime] NULL,
    [datetime] [datetime] NOT NULL,
    [datetime2_Null] [datetime2](7) NULL,
    [datetime2] [datetime2](7) NOT NULL,
    [datetimeoffset_Null] [datetimeoffset](7) NULL,
    [datetimeoffset] [datetimeoffset](7) NOT NULL,
    [decimal_Null] [decimal](18, 0) NULL,
    [decimal] [decimal](18, 0) NOT NULL,
    [float_Null] [float] NULL,
    [float] [float] NOT NULL,
    [geography_Null] [geography] NULL,
    [geography] [geography] NOT NULL,
    [geometry_Null] [geometry] NULL,
    [geometry] [geometry] NOT NULL,
    [hierarchyid_Null] [hierarchyid] NULL,
    [hierarchyid] [hierarchyid] NOT NULL,
    [image_Null] [image] NULL,
    [image] [image] NOT NULL,
    [int_Null] [int] NULL,
    [int] [int] NOT NULL,
    [money_Null] [money] NULL,
    [money] [money] NOT NULL,
    [nchar_Null] [nchar](10) NULL,
    [nchar] [nchar](10) NOT NULL,
    [ntext_Null] [ntext] NULL,
    [ntext] [ntext] NOT NULL,
    [numeric_Null] [numeric](18, 0) NULL,
    [numeric] [numeric](18, 0) NOT NULL,
    [nvarchar_Null] [nvarchar](max) NULL,
    [nvarchar] [nvarchar](max) NOT NULL,
    [real_Null] [real] NULL,
    [real] [real] NOT NULL,
    [smalldatetime_Null] [smalldatetime] NULL,
    [smalldatetime] [smalldatetime] NOT NULL,
    [smallint_Null] [smallint] NULL,
    [smallint] [smallint] NOT NULL,
    [smallmoney_Null] [smallmoney] NULL,
    [smallmoney] [smallmoney] NOT NULL,
    [sql_variant_Null] [sql_variant] NULL,
    [sql_variant] [sql_variant] NOT NULL,
    [text_Null] [text] NULL,
    [text] [text] NOT NULL,
    [time_Null] [time](7) NULL,
    [time] [time](7) NOT NULL,
    [timestamp_Null] [timestamp] NULL,
    [tinyint_Null] [tinyint] NULL,
    [tinyint] [tinyint] NOT NULL,
    [uniqueidentifier_Null] [uniqueidentifier] NULL,
    [uniqueidentifier] [uniqueidentifier] NOT NULL,
    [varbinary_Null] [varbinary](max) NULL,
    [varbinary] [varbinary](max) NOT NULL,
    [varchar_Null] [varchar](max) NULL,
    [varchar] [varchar](max) NOT NULL,
    [xml_Null] [xml] NULL,
    [xml] [xml] NOT NULL,
 CONSTRAINT [PK_TypeTest] PRIMARY KEY CLUSTERED 
(
    [bigint] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

 以下是用於生成實體類(C#)的SQL腳本:

-- 表名
DECLARE @TableName NVARCHAR(50)
SET @TableName = 'SettlementStatistics'

-- 用於控制生成的屬於是否區分Null 
-- 例:@IgnoreNull為TRUE時 public int Id { get; set; }
-- 例:@IgnoreNull為False時 public int? Id { get; set; }
DECLARE @IgnoreNull NVARCHAR(50)
SET @IgnoreNull = 'FALSE' -- 'TRUE/FALSE'

DECLARE @ObjectId BIGINT
SET @ObjectId = OBJECT_ID(@TableName,N'U')

IF OBJECT_ID(N'Tempdb..#Model',N'U') IS NOT NULL
DROP TABLE #Model
CREATE TABLE #Model(Field NVARCHAR(200))

DECLARE @MaxColumnIndex INT
SELECT @MaxColumnIndex = Max(column_id) FROM sys.columns WHERE object_id = @ObjectId

DECLARE @Index INT = 1

WHILE @Index <= @MaxColumnIndex
BEGIN
    INSERT INTO #Model(Field) VALUES('/// <summary>')
    
    IF EXISTS(SELECT * FROM sys.extended_properties WHERE major_id = @ObjectId AND minor_id = @Index)
    BEGIN
        INSERT INTO #Model(Field)
        SELECT '/// ' + CONVERT(NVARCHAR(200),value) FROM sys.extended_properties WHERE major_id = @ObjectId AND minor_id = @Index
    END
    ELSE
    BEGIN
        INSERT INTO #Model(Field) VALUES('///')
    END
    
    INSERT INTO #Model(Field) VALUES('/// </summary>')
    
    INSERT INTO #Model(Field)
    SELECT 'public ' + (CASE [Types].name 
                        WHEN 'image'            THEN 'byte[]'
                        WHEN 'text'             THEN 'string'
                        WHEN 'uniqueidentifier' THEN 'Guid'
                        WHEN 'date'             THEN 'DateTime'
                        WHEN 'time'             THEN 'TimeSpan'
                        WHEN 'datetime2'        THEN 'DateTime'
                        WHEN 'datetimeoffset'   THEN 'DateTimeOffset'
                        WHEN 'tinyint'          THEN 'byte'
                        WHEN 'smallint'         THEN 'short'
                        WHEN 'int'              THEN 'int'
                        WHEN 'smalldatetime'    THEN 'DateTime'
                        WHEN 'real'             THEN 'float'
                        WHEN 'money'            THEN 'decimal'
                        WHEN 'datetime'         THEN 'DateTime'
                        WHEN 'float'            THEN 'double'
                        WHEN 'ntext'            THEN 'string'
                        WHEN 'bit'              THEN 'bool'
                        WHEN 'decimal'          THEN 'decimal'
                        WHEN 'numeric'          THEN 'decimal'
                        WHEN 'smallmoney'       THEN 'decimal'
                        WHEN 'bigint'           THEN 'long'
                        WHEN 'geometry'         THEN 'System.Data.Spatial.DbGeometry'
                        WHEN 'geography'        THEN 'System.Data.Spatial.DbGeography'
                        WHEN 'varbinary'        THEN 'byte[]'
                        WHEN 'varchar'          THEN 'string'
                        WHEN 'binary'           THEN 'byte[]'
                        WHEN 'char'             THEN 'string'
                        WHEN 'timestamp'        THEN 'byte[]'
                        WHEN 'nvarchar'         THEN 'string'
                        WHEN 'nchar'            THEN 'string'
                        WHEN 'xml'              THEN 'string'                        
                        ELSE 'string' END)
           + (CASE WHEN 'FALSE'=@IgnoreNull AND [Columns].is_nullable=1 
              AND ',bigint,bit,date,datetime,datetime2,datetimeoffset,decimal,float,int,money,numeric,real,smalldatetime,smallint,smallmoney,time,tinyint,uniqueidentifier,' LIKE '%,'+[Types].name+',%' 
              THEN '?' ELSE '' END)
           + ' ' + [Columns].name + ' { get; set; }'    
    FROM sys.columns AS [Columns] 
    INNER JOIN sys.types AS [Types] ON [Columns].user_type_id = [Types].user_type_id
    WHERE  [Columns].object_id = @ObjectId AND [Columns].column_id = @Index

    IF @Index < @MaxColumnIndex INSERT INTO #Model(Field) VALUES('')
    
    SET @Index = @Index + 1
END

SELECT * FROM #Model
DROP TABLE #Model

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM