Сопоставление данных о параметрах 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 |