Поделиться через


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

Область применения:SQL Server

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

Тип данных 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 нет нет
курсор нет нет
date SqlDateTime DateTime, Nullable<DateTime>
datetime SqlDateTime DateTime, Nullable<DateTime>
datetime2 нет DateTime, Nullable<DateTime>
datetimeoffset None DateTimeOffset, Nullable<DateTimeOffset>
десятичное SqlDecimal Decimal, Nullable<Decimal>
float SqlDouble Double, Nullable<Double>
geography SqlGeography 1 нет
geometry SqlGeometry 1 нет
hierarchyid SqlHierarchyId 1 нет
Изображение нет нет
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 SqlSingle (однако диапазон 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>
Определяемый пользователем тип (UDT) нет Тот же класс связывается с определяемым пользователем типом данных в той же сборке или в зависимой сборке.
varbinary SqlBytes, SqlBinary Byte[]
varbinary(1), binary(1) SqlBytes, SqlBinary byte, Byte[], Nullable<byte>
varchar нет нет
xml SqlXml нет

1, определенных в Microsoft.SqlServer.Types.dll, которая установлена с SQL Server и может быть загружена из пакета дополнительных компонентов SQL Server .

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

Метод CLR может возвращать сведения в вызывающий код или программу, помечая входной параметр с помощью модификатора out (C#) или <Out()> ByRef (Visual Basic .NET). Если входной параметр является типом данных 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)
{ ... }

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

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

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

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

Тип данных CLR (SQL Server) Тип данных SQL Server
Decimal smallmoney
SqlMoney smallmoney
Decimal money
DateTime smalldatetime
SQLDateTime smalldatetime