Сопоставление данных о параметрах CLR
В следующей таблице содержится перечень типов данных MicrosoftSQL Server, их эквивалентов в среде CLR для SQL Server в пространстве имен System.Data.SqlTypes и их собственные эквиваленты CLR в Microsoft .NET Framework.
Тип данных SQL Server |
Тип данных CLR (SQL Server) |
Тип данных среды 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 |
SqlDateTime |
DateTime, Nullable<DateTime> |
DATETIMEOFFSET |
None |
DateTimeOffset, Nullable<DateTimeOffset> |
decimal |
SqlDecimal |
Decimal, Nullable<Decimal> |
float |
SqlDouble |
Double, Nullable<Double> |
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 |
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 Server выражения int как ВЫХОДНОГО параметра:
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 |