映射 CLR 参数数据

适用于: 是SQL Server(所有支持的版本)

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

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

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

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

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

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

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

clr 方法可以通过使用 out 修饰符将输入参数标记 (microsoft Visual c # ) 或 <Out()> ByRef (Microsoft) Visual Basic 来将信息返回到调用代码或程序。如果输入参数是 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  

在数据库中生成并创建了程序集之后,将在中创建存储过程,其中 SQL Server 包含以下 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 数据类型
十进制 smallmoney
SqlMoney smallmoney
十进制 money
DateTime smalldatetime
SQLDateTime smalldatetime

更改历史记录

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

另请参阅

.NET Framework 中的 SQL Server 数据类型