По возможности, вы должны использовать типы SqlTypes
для параметров метода SQLCLR. Существует только 4 типа данных SQL Server, которые не имеют типа Sql*****
:
TIME
: используйте TimeSpan
или TimeSpan?
DATETIME2
: используйте DateTime
или DateTime?
DATETIMEOFFSET
: используйте TimeZoneOffset
или TimeZoneOffset?
SQL_VARIANT
: используйте object
(NULL
приходит как DbNull.Value
)
Для получения дополнительной информации см. Следующую страницу MSDN: Отображение данных параметров CLR
Некоторые различия между SqlString
и string
(которые важны в определенных ситуациях) заключаются в том, что SqlString
:
- сохраняет кодировку, определенную по умолчанию COLLATION базы данных, в которой существует сборка, и
- содержит свойства, описывающие
LCID
и SqlCompareOptions
(то есть чувствительность к регистру, чувствительность к акценту и т. Д.), Как это определено по умолчанию COLLATION базы данных, в которой существует сборка. Использование string
(или даже SqlChars
) потеряло бы эту информацию.
- имеет методы для возврата
byte[]
- GetUnicodeBytes и GetNonUnicodeBytes - тогда как string
имеет ToCharArray
. NVARCHAR
исходные данные кодируются как UTF-16
, который будет использовать либо 2 байта, либо 4 байта для каждого символа, в зависимости от символа.
- правильно обрабатывает T-SQL
NULL
с. Это можно проверить с помощью логического свойства IsNull
(которое есть у всех типов Sql*
). При возврате в качестве возвращаемого значения или значения столбца для TVF используйте статическое свойство SqlString.Null
(которое имеется во всех типах Sql*
).
Когда дело доходит до отправки больших значений в параметрах NVARCHAR(MAX)
и VARBINARY(MAX)
, вы можете фактически передавать значения из SQL Server в CLR SQL Server, используя типы SqlChars
и SqlBytes
соответственно. В некоторых случаях использование потоковой передачи намного эффективнее (при условии, что вам не нужно все значение одновременно). Кроме того, если к параметру никогда не обращаются, то никакие данные не передаются вообще, в отличие от использования SqlString
и SqlBinary
, соответственно.
Соответствующую информацию можно найти в статье, которую я написал для серии по SQLCLR: Лестница к SQLCLR Уровень 5: Разработка (Использование .NET в SQL Server) (требуется бесплатная регистрация).