映射 CLR 参数数据

适用于:SQL Server

下表列出了 Microsoft SQL Server 数据类型,它们在公共语言运行时 (CLR) system.Data.SqlTypes 命名空间中SQL Server的等效项,以及它们在 Microsoft .NET Framework中的本机 CLR 等效项。

SQL Server 数据类型 类型(在 System.Data.SqlTypes 或 Microsoft.SqlServer.Types 中) CLR 数据类型 (.NET Framework)
bigint SqlInt64 Int64、可为空的<Int64>
binary SqlBytes、SqlBinary Byte[]
bit SqlBoolean 布尔值、可为 Null 布尔<值>
char
cursor
date SqlDateTime DateTime,可为 Null 的<DateTime>
datetime SqlDateTime DateTime,可为 Null 的<DateTime>
datetime2 DateTime,可为 Null 的<DateTime>
DATETIMEOFFSET DateTimeOffset,可为 Null 的<DateTimeOffset>
decimal SqlDecimal Decimal,可以为 Null 的<Decimal>
float SqlDouble Double、Nullable<Double>
地理 SqlGeography

SqlGeography 在 Microsoft.SqlServer.Types.dll 中定义,它随 SQL Server 一起安装,可以从 SQL Server 功能包下载。
geometry SqlGeometry

SqlGeometry 在 Microsoft.SqlServer.Types.dll 中定义,它随 SQL Server 一起安装,可以从 SQL Server 功能包下载。
hierarchyid SqlHierarchyId

SqlHierarchyId 在 Microsoft.SqlServer.Types.dll 中定义,它随 SQL Server 一起安装,可以从 SQL Server 功能包下载。
图像
int SqlInt32 Int32,可为 Null 的<Int32>
money SqlMoney Decimal,可以为 Null 的<Decimal>
nchar SqlChars、SqlString String, Char[]
ntext
numeric SqlDecimal Decimal,可以为 Null 的<Decimal>
nvarchar SqlChars、SqlString

SQLChars 更适合数据传输和访问, SQLString 更适合执行字符串操作。
String, Char[]
nvarchar (1) ,nchar (1) SqlChars、SqlString Char、String、Char[]、可以为 Null 的<char>
real 但是,SqlSingle (SqlSingle 的范围大于实际) 单一、可为 Null 的<单个>
rowversion Byte[]
smallint SqlInt16 Int16,可为 Null 的<Int16>
smallmoney SqlMoney Decimal,可以为 Null 的<Decimal>
sql_variant Object
table
text
time TimeSpan、可为<Null 的 TimeSpan>
timestamp
tinyint SqlByte Byte、可为 Null 的<字节>
uniqueidentifier SqlGuid Guid,可为 Null Guid<>
用户定义类型 (UDT) 绑定到相同程序集或依赖程序集中的用户定义类型的相同类。
varbinary SqlBytes、SqlBinary Byte[]
varbinary (1) ,binary (1) SqlBytes、SqlBinary byte、Byte[]、可为 Null 的<字节>
varchar
xml SqlXml

使用 Out 参数的自动数据类型转换

CLR 方法可以通过使用 out 修饰符 (Microsoft Visual C#) 或 <Out () > ByRef (Microsoft Visual Basic) 如果输入参数是 System.Data.SqlTypes 命名空间中的 CLR 数据类型,并且调用程序指定其等效SQL Server 数据类型作为输入参数,当 CLR 方法返回数据类型时,类型转换会自动发生。

例如,以下 CLR 存储过程的输入参数为 SqlInt32 CLR 数据类型,该参数标记为 out (C#) 或 <Out () > ByRef (Visual Basic) :

[Microsoft.SqlServer.Server.SqlProcedure]  
public static void PriceSum(out SqlInt32 value)  
{ ... }  
\<Microsoft.SqlServer.Server.SqlProcedure> _  
Public Shared Sub PriceSum( \<Out()> ByRef value As SqlInt32)  
...  
End Sub  

在数据库中生成并创建程序集后,存储过程将使用以下 Transact-SQL 在 SQL Server 中创建,后者将 int 的SQL Server数据类型指定为 OUTPUT 参数:

CREATE PROCEDURE PriceSum (@sum int OUTPUT)  
AS EXTERNAL NAME TestStoredProc.StoredProcedures.PriceSum  

调用 CLR 存储过程时, SqlInt32 数据类型会自动转换为 int 数据类型,并返回到调用程序。

但是,并非所有 CLR 数据类型都可以通过 out 参数自动转换为其等效SQL Server数据类型。 下表列出了这些例外类型。

CLR 数据类型 (SQL Server) SQL Server 数据类型
十进制 smallmoney
SqlMoney smallmoney
十进制 money
DateTime smalldatetime
SQLDateTime smalldatetime

更改历史记录

更新的内容
向映射表添加了 SqlGeographySqlGeometrySqlHierarchyId 类型。

另请参阅

.NET Framework 中的 SQL Server 数据类型