映射 CLR 参数数据

下表列出了 Microsoft SQL Server 数据类型、它们在公共语言运行时 (CLR) 中用于命名空间中SQL ServerSystem.Data.SqlTypes的等效项,以及它们在 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 None DateTimeOffset,可为 Null 的<DateTimeOffset>
decimal SqlDecimal Decimal,可以为 Null 的<Decimal>
float SqlDouble Double、Nullable<Double>
geography SqlGeography

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

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

SqlHierarchyId在 Microsoft.SqlServer.Types.dll 中定义,它随 SQL Server 一起安装,可以从 SQL Server 2014功能包下载。
image
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 SqlSingleSqlSingle 的范围,但大于 real 单一、可为 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>
User-defined type(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 (C#) 或 out (Visual Basic) 进行标记的 <Out()> ByRef CLR 数据类型的输入参数:

[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  

在数据库中生成并创建程序集后,存储过程在 SQL Server 中使用以下 Transact-SQL 创建,后者将 SQL Server 数据类型int指定为 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 数据类型
Decimal smallmoney
SqlMoney smallmoney
Decimal money
DateTime smalldatetime
SQLDateTime smalldatetime

更改历史记录

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

另请参阅

.NET Framework 中的 SQL Server 数据类型