映射 CLR 参数数据

适用于:SQL Server

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

SQL Server 数据类型 类型(在 System.Data.SqlTypes 或 Microsoft.SqlServer.Types 中) CLR 数据类型 (.NET Framework)
bigint SqlInt64 Int64、可以为 Null 的<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 的<十进制数>
float SqlDouble Double、Nullable<Double>
地理 SqlGeography

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

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

SqlHierarchyId 在 Microsoft.SqlServer.Types.dll 中定义,该 dll 随 SQL Server 一起安装,可从 SQL Server 功能包下载。
image
int SqlInt32 Int32、可以为 Null 的<Int32>
money SqlMoney Decimal、可为 Null 的<十进制数>
nchar SqlChars、SqlString 字符串,Char[]
ntext
numeric SqlDecimal Decimal、可为 Null 的<十进制数>
nvarchar SqlChars、SqlString

SQLChars 是数据传输和访问的更好匹配项, SQLString 是执行字符串操作的更好匹配项。
字符串,Char[]
nvarchar(1),nchar(1) SqlChars、SqlString Char、String、Char[]、可以为 Null 的<字符>
real SqlSingle (但 SqlSingle 的范围大于实际 单个、可为<Null 的单一>
rowversion Byte[]
smallint SqlInt16 Int16、可以为 Null 的<Int16>
smallmoney SqlMoney Decimal、可为 Null 的<十进制数>
sql_variant Object
table
text
time TimeSpan、可为<Null 的时间跨度>
timestamp
tinyint SqlByte 字节、可为 Null 的<字节>
uniqueidentifier SqlGuid Guid、可为 Null 的<Guid>
用户定义的类型(UDT) 绑定到相同程序集或依赖程序集中的用户定义类型的相同类。
varbinary SqlBytes、SqlBinary Byte[]
varbinary(1), binary(1) SqlBytes、SqlBinary byte、Byte[]、Nullable<字节>
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 中创建,后者将 intSQL 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 数据类型