Сопоставление данных о параметрах CLR

В следующей таблице содержится перечень типов данных Microsoft SQL Server, их эквивалентов в среде CLR для SQL Server в пространстве имен System.Data.SqlTypes и их собственные эквиваленты CLR в платформе Microsoft .NET Framework.

Тип данных SQL Server

Тип (в System.Data.SqlTypes or 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

Отсутствует

Автоматическое преобразование типов данных для выходных параметров

Метод CLR может возвращать данные вызывающему коду или программе, сопровождая входной параметр модификатором out (Microsoft Visual C#) или <Out()> ByRef (Microsoft Visual Basic). Если входной параметр принадлежит типу данных CLR в пространстве имен System.Data.SqlTypes, и вызывающая программа указывает свой соответствующий тип данных SQL Server как входной параметр, преобразование типов осуществляется автоматически, когда метод CLR возвращает тип данных.

Так, следующая хранимая процедура CLR имеет входной параметр с типом данных CLR SqlInt32, помеченный модификатором 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

После формирования сборки в базе данных хранимая процедура создается в SQL Server со следующим кодом Transact-SQL, который указывает тип данных SQL Serverint для параметра OUTPUT:

CREATE PROCEDURE PriceSum (@sum int OUTPUT)
AS EXTERNAL NAME TestStoredProc.StoredProcedures.PriceSum

При вызове хранимой процедуры CLR тип данных SqlInt32 автоматически преобразуется в тип данных int и возвращается вызывающей программе.

Однако не все типы данных CLR могут автоматически преобразовываться в эквивалентные им типы данных SQL Server с помощью выходного параметра. В следующей таблице перечислены эти исключения.

Тип данных CLR (SQL Server)

Тип данных SQL Server

Decimal

smallmoney

SqlMoney

smallmoney

Decimal

money

DateTime

smalldatetime

SQLDateTime

smalldatetime

См. также

Другие ресурсы