映射 CLR 参数数据
适用于:SQL Server
下表列出了 Microsoft SQL Server 数据类型,它们在公共语言运行时 (CLR) system.Data.SqlTypes 命名空间中SQL Server的等效项,以及它们在 Microsoft .NET Framework中的本机 CLR 等效项。
SQL Server 数据类型 | 类型(在 System.Data.SqlTypes 或 Microsoft.SqlServer.Types 中) | CLR 数据类型 (.NET Framework) |
---|---|---|
bigint | SqlInt64 | Int64、可为空的<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 的<Decimal> |
float | SqlDouble | Double、Nullable<Double> |
地理 | SqlGeography SqlGeography 在 Microsoft.SqlServer.Types.dll 中定义,它随 SQL Server 一起安装,可以从 SQL Server 功能包下载。 |
无 |
geometry | SqlGeometry SqlGeometry 在 Microsoft.SqlServer.Types.dll 中定义,它随 SQL Server 一起安装,可以从 SQL Server 功能包下载。 |
无 |
hierarchyid | SqlHierarchyId SqlHierarchyId 在 Microsoft.SqlServer.Types.dll 中定义,它随 SQL Server 一起安装,可以从 SQL Server 功能包下载。 |
无 |
图像 | 无 | 无 |
int | SqlInt32 | Int32,可为 Null 的<Int32> |
money | SqlMoney | Decimal,可以为 Null 的<Decimal> |
nchar | SqlChars、SqlString | String, Char[] |
ntext | 无 | 无 |
numeric | SqlDecimal | Decimal,可以为 Null 的<Decimal> |
nvarchar | SqlChars、SqlString SQLChars 更适合数据传输和访问, SQLString 更适合执行字符串操作。 |
String, Char[] |
nvarchar (1) ,nchar (1) | SqlChars、SqlString | Char、String、Char[]、可以为 Null 的<char> |
real | 但是,SqlSingle (SqlSingle 的范围大于实际) | 单一、可为 Null 的<单个> |
rowversion | 无 | Byte[] |
smallint | SqlInt16 | Int16,可为 Null 的<Int16> |
smallmoney | SqlMoney | Decimal,可以为 Null 的<Decimal> |
sql_variant | 无 | Object |
table | 无 | 无 |
text | 无 | 无 |
time | 无 | TimeSpan、可为<Null 的 TimeSpan> |
timestamp | 无 | 无 |
tinyint | SqlByte | Byte、可为 Null 的<字节> |
uniqueidentifier | SqlGuid | Guid,可为 Null Guid<> |
用户定义类型 (UDT) | 无 | 绑定到相同程序集或依赖程序集中的用户定义类型的相同类。 |
varbinary | SqlBytes、SqlBinary | Byte[] |
varbinary (1) ,binary (1) | SqlBytes、SqlBinary | byte、Byte[]、可为 Null 的<字节> |
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 类型。 |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈