映射 CLR 参数数据

适用范围:SQL Server

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

SQL Server 数据类型 类型(System.Data.SqlTypesMicrosoft.SqlServer.Types CLR 数据类型 (.NET Framework)
bigint SqlInt64 Int64Nullable<Int64>
binary SqlBytesSqlBinary Byte[]
bit SqlBoolean BooleanNullable<Boolean>
char
cursor
date SqlDateTime DateTimeNullable<DateTime>
datetime SqlDateTime DateTimeNullable<DateTime>
datetime2 DateTimeNullable<DateTime>
datetimeoffset None DateTimeOffsetNullable<DateTimeOffset>
decimal SqlDecimal DecimalNullable<Decimal>
float SqlDouble DoubleNullable<Double>
地理 SqlGeography 1
geometry SqlGeometry 1
hierarchyid SqlHierarchyId 1
image
int SqlInt32 Int32Nullable<Int32>
money SqlMoney DecimalNullable<Decimal>
nchar SqlCharsSqlString StringChar[]
ntext
numeric SqlDecimal DecimalNullable<Decimal>
nvarchar SqlCharsSqlString

SQLChars 是数据传输和访问的更好匹配项,SQLString 是执行 String 操作的更好匹配项。
StringChar[]
nvarchar(1)nchar(1) SqlCharsSqlString CharStringChar[]Nullable<char>
real (但是, 的范围大于实际 SingleNullable<Single>
rowversion Byte[]
smallint SqlInt16 Int16Nullable<Int16>
smallmoney SqlMoney DecimalNullable<Decimal>
sql_variant Object
table
text
time TimeSpanNullable<TimeSpan>
timestamp
tinyint SqlByte ByteNullable<Byte>
uniqueidentifier SqlGuid GuidNullable<Guid>
用户定义的类型 (UDT) 绑定到相同程序集或依赖程序集中的用户定义类型的相同类。
varbinary SqlBytesSqlBinary Byte[]
varbinary(1)binary(1) SqlBytesSqlBinary byteByte[]Nullable<byte>
varchar
xml SqlXml

Microsoft.SqlServer.Types.dll中定义的 1 个,它随 SQL Server 一起安装,可从 SQL Server 功能包下载。

使用输出参数进行自动数据类型转换

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

在数据库中生成和创建程序集后,存储过程将使用以下 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 数据类型
Decimal smallmoney
SqlMoney smallmoney
Decimal money
DateTime smalldatetime
SQLDateTime smalldatetime