映射 CLR 参数数据

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

SQL Server 数据类型

类型(在 System.Data.SqlTypes 或 Microsoft.SqlServer.Types 中)

CLR 数据类型 (.NET Framework)

bigint

SqlInt64

Int64, Nullable<Int64>

binary

SqlBytes, SqlBinary

Byte[]

bit

SqlBoolean

Boolean, Nullable<Boolean>

char

cursor

date

SqlDateTime

DateTime, Nullable<DateTime>

datetime

SqlDateTime

DateTime, Nullable<DateTime>

datetime2

DateTime, Nullable<DateTime>

DATETIMEOFFSET

None

DateTimeOffset, Nullable<DateTimeOffset>

decimal

SqlDecimal

Decimal, Nullable<Decimal>

float

SqlDouble

Double, Nullable<Double>

geography

SqlGeography

SqlGeography 在 Microsoft.SqlServer.Types.dll 中定义,该文件随 SQL Server 一起安装,并且可以从 SQL Server 2008 功能包下载。

geometry

SqlGeometry

SqlGeometry 在 Microsoft.SqlServer.Types.dll 中定义,该文件随 SQL Server 一起安装,并且可以从 SQL Server 2008 功能包下载。

hierarchyid

SqlHierarchyId

SqlHierarchyId 在 Microsoft.SqlServer.Types.dll 中定义,该文件随 SQL Server 一起安装,并且可以从 SQL Server 2008 功能包下载。

image

int

SqlInt32

Int32, Nullable<Int32>

money

SqlMoney

Decimal, Nullable<Decimal>

nchar

SqlChars, SqlString

String, Char[]

ntext

numeric

SqlDecimal

Decimal, Nullable<Decimal>

nvarchar

SqlChars, SqlString

SQLChars 更适合用于数据传输和访问,而 SQLString 更适合用于执行字符串运算。

String, Char[]

nvarchar(1), nchar(1)

SqlChars, SqlString

Char, String, Char[], Nullable<char>

real

SqlSingle

Single, Nullable<Single>

rowversion

Byte[]

smallint

SqlInt16

Int16, Nullable<Int16>

smallmoney

SqlMoney

Decimal, Nullable<Decimal>

sql_variant

Object

table

text

time

TimeSpan, Nullable<TimeSpan>

timestamp

tinyint

SqlByte

Byte, Nullable<Byte>

uniqueidentifier

SqlGuid

Guid, Nullable<Guid>

User-defined type(UDT)

绑定到相同程序集或依赖程序集中的用户定义类型的相同类。

varbinary

SqlBytes, SqlBinary

Byte[]

varbinary(1), binary(1)

SqlBytes, SqlBinary

byte, Byte[], Nullable<byte>

varchar

xml

SqlXml

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

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

例如,以下 CLR 存储过程具有以 out (C#) 或 <Out()> ByRef (Visual Basic) 进行标记的 SqlInt32 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

在数据库中生成和创建程序集之后,将用以下 Transact-SQL 在 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