映射 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 中创建,后者将 int 的 SQL 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 |
更改历史记录
更新的内容 |
---|
向映射表添加了 SqlGeography、 SqlGeometry 和 SqlHierarchyId 类型。 |