映射 CLR 参数数据
适用范围:SQL Server
下表列出了 SQL Server 数据类型、System.Data.SqlTypes
命名空间中 SQL Server 的公共语言运行时 (CLR)中的等效项,以及 .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> |
地理 |
SqlGeography
1 |
无 |
geometry |
SqlGeometry
1 |
无 |
hierarchyid |
SqlHierarchyId
1 |
无 |
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 操作的更好匹配项。 |
String ,Char[] |
nvarchar(1), nchar(1) |
SqlChars ,SqlString |
Char 、String 、Char[] 、Nullable<char> |
real |
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> |
用户定义的类型 (UDT) | 无 | 绑定到相同程序集或依赖程序集中的用户定义类型的相同类。 |
varbinary |
SqlBytes ,SqlBinary |
Byte[] |
varbinary(1), binary(1) |
SqlBytes ,SqlBinary |
byte 、Byte[] 、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 中创建,后者将 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 数据类型 |
---|---|
Decimal |
smallmoney |
SqlMoney |
smallmoney |
Decimal |
money |
DateTime |
smalldatetime |
SQLDateTime |
smalldatetime |
相关内容
- .NET Framework 中的 SQL Server 数据类型