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

Применимо к:SQL Server

В следующей таблице перечислены типы данных 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, Int64, допускающий<значение NULL>
binary SqlBytes, SqlBinary Byte[]
bit SqlBoolean Логическое значение, логическое значение, допускающее значение<NULL>
char Нет Нет
курсор Нет Нет
date SqlDateTime DateTime, DateTime, допускающий значение<NULL>
datetime SqlDateTime DateTime, DateTime, допускающий значение<NULL>
datetime2 Нет DateTime, DateTime, допускающий значение<NULL>
DATETIMEOFFSET None DateTimeOffset, DateTimeOffset, допускающий значение<NULL>
decimal SqlDecimal Decimal, Decimal, допускающий значение<NULL>
float SqlDouble Double, Double, допускающий<значение NULL>
geography 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.
Нет
image Нет Нет
int SqlInt32 Int32, Int32, допускающий значение<NULL>
money SqlMoney Decimal, Decimal, допускающий значение<NULL>
nchar SqlChars, SqlString String, Char[]
ntext Нет Нет
numeric SqlDecimal Decimal, Decimal, допускающий значение<NULL>
nvarchar SqlChars, SqlString

SQLChars лучше подходит для передачи данных и доступа, а SQLString лучше подходит для выполнения строковых операций.
String, Char[]
nvarchar(1), nchar(1) SqlChars, SqlString Char, String, Char[], символ, допускающий значение<NULL>
real SqlSingle (диапазон SqlSingle, однако, больше , чем реальный) Одинарный, одиночный, допускающий<значение NULL>
rowversion Нет Byte[]
smallint SqlInt16 Int16, Int16, допускающий<значение NULL>
smallmoney SqlMoney Decimal, Decimal, допускающий значение<NULL>
sql_variant Нет Объект
table Нет Нет
text Нет Нет
time Нет TimeSpan, timespan, допускающий значение<NULL>
timestamp Нет Нет
tinyint SqlByte Байт, байт, допускающий значение<NULL>
uniqueidentifier SqlGuid Guid, GUID, допускающий значение<NULL>
Определяемый пользователем тип (определяемый пользователем тип) Нет Тот же класс связывается с определяемым пользователем типом данных в той же сборке или в зависимой сборке.
varbinary SqlBytes, SqlBinary Байт[]
varbinary(1), binary(1) SqlBytes, SqlBinary byte, Byte[], байт, допускающий значение<NULL>
varchar Нет Нет
xml Sqlxml Нет

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

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

После сборки и создания сборки в базе данных хранимая процедура создается в 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
Десятичное число smallmoney
SqlMoney smallmoney
Десятичное число money
DateTime smalldatetime
SQLDateTime smalldatetime

Журнал изменений

Обновленное содержимое
Добавлены типы SqlGeography, SqlGeometry и SqlHierarchyId в таблицу сопоставления.

См. также:

Типы данных SQL Server в платформе .NET Framework