适用范围: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,SqlStringSQLChars 是数据传输和访问的更好匹配项,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 数据类型