Определяемые пользователем типы большого размера в SQL Server 2008 (ADO.NET)
Определяемые пользователем типы данных, представленные в SQL Server 2005, позволяют разработчику расширить систему скалярных типов путем сохранения в базе данных SQL Server объектов среды CLR. Определяемые пользователем типы могут содержать несколько элементов в отличие от традиционных псевдонимов типов данных, состоящих из одного системного типа данных SQL Server.
Примечание |
---|
Чтобы воспользоваться расширенной поддержкой SqlClient определяемых пользователем типов данных большого размера, необходимо установить .NET Framework 3.5 с пакетом обновления 1 (SP1) или более поздней версии. |
Ранее максимальный размер определяемых пользователем типов данных был ограничен 8 килобайтами. В SQL Server 2008 это ограничение было снято для определяемых пользователем типов данных в формате UserDefined.
Полную документацию по определяемым пользователем типам данных см. в электронной документации по SQL Server для используемой версии SQL Server.
SQL Server 2005 |
SQL Server 2008 |
---|---|
Загрузка схем определяемых пользователем типов данных с помощью метода GetSchema
Метод GetSchema класса SqlConnection возвращает сведения о схеме базы данных в DataTable. Дополнительные сведения см. в разделе Коллекции схем SQL Server (ADO.NET).
Значения столбца GetSchemaTable для определяемых пользователем типов данных
Метод GetSchemaTable класса SqlDataReader возвращает объект DataTable с описанием метаданных столбцов. В приведенной ниже таблице описаны различия метаданных столбцов для определяемых пользователем типов данных в SQL Server 2005 и SQL Server 2008.
Столбец SqlDataReader |
SQL Server 2005 |
SQL Server 2008 |
---|---|---|
ColumnSize |
Меняется |
Меняется |
NumericPrecision |
255 |
255 |
NumericScale |
255 |
255 |
DataType |
Byte[] |
Экземпляр определяемого пользователем типа данных |
ProviderSpecificDataType |
SqlTypes.SqlBinary |
Экземпляр определяемого пользователем типа данных |
ProviderType |
21 (SqlDbType.VarBinary) |
29 (SqlDbType.Udt) |
NonVersionedProviderType |
29 (SqlDbType.Udt) |
29 (SqlDbType.Udt) |
DataTypeName |
SqlDbType.VarBinary |
Имя из трех частей, указанное как Database.SchemaName.TypeName. |
IsLong |
Меняется |
Меняется |
Вопросы, связанные с SqlDataReader
Объект SqlDataReader в SQL Server 2008 был расширен для поддержки загрузки значений определяемых пользователем типов данных большого размера. Способ обработки значений определяемых пользователем типов данных большого размера объектом [SqlDataReader] зависит от используемой версии SQL Server, а также от значения параметра Type System Version в строке подключения. Дополнительные сведения см. в подразделе «Изменения в ключевых словах Type System Version» раздела Новые возможности SQL Server 2008 (ADO.NET).
Приведенные ниже методы класса SqlDataReader возвращают объект SqlBinary, а не экземпляр определяемого пользователем типа данных в предыдущих версиях SQL Server, а также в случае, если значение параметра Type System Version отличается от SQL Server 2008.
Приведенные ниже методы возвращают массив объектов Byte[], а не экземпляр определяемого пользователем типа данных в предыдущих версиях SQL Server, а также в случае, если значение параметра Type System Version отличается от SQL Server 2008.
Обратите внимание, что для текущей версии ADO.NET преобразования не выполняются.
Указание параметров SqlParameters
Указанные ниже свойства SqlParameter были расширены для работы с определяемыми пользователем типами данных большого размера.
Свойство SqlParameter |
Описание |
---|---|
Возвращает или задает объект, представляющий собой значение параметра. Значение по умолчанию — NULL. Свойство может принимать значения SqlBinary, Byte[] или управляемого объекта. |
|
Возвращает или задает объект, представляющий собой значение параметра. Значение по умолчанию — NULL. Свойство может принимать значения SqlBinary, Byte[] или управляемого объекта. |
|
Возвращает или задает размер значения параметра для разрешения. Значение по умолчанию — 0. Свойство может быть целым числом, представляющим размер значения параметра. Для определяемых пользователем типов данных большого размера оно может равняться действительному размеру определяемого пользователем типа или принимать значение -1 — для неизвестных. |
Пример извлечения данных
В приведенном ниже фрагменте кода демонстрируется извлечение данных определяемого пользователем типа большого размера. Предполагается, что в переменной connectionString хранится допустимая строка подключения к базе данных SQL Server, а в переменной commandString — допустимая инструкция SELECT, в которой столбец первичного ключа указан первым.
using (SqlConnection connection = new SqlConnection(
connectionString, commandString))
{
connection.Open();
SqlCommand command = new SqlCommand(commandString);
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
// Retrieve the value of the Primary Key column.
int id = reader.GetInt32(0);
// Retrieve the value of the UDT.
LargeUDT udt = (LargeUDT)reader[1];
// You can also use GetSqlValue and GetValue.
// LargeUDT udt = (LargeUDT)reader.GetSqlValue(1);
// LargeUDT udt = (LargeUDT)reader.GetValue(1);
Console.WriteLine(
"ID={0} LargeUDT={1}", id, udt);
}
reader.close
}
Using connection As New SqlConnection( _
connectionString, commandString)
connection.Open()
Dim command As New SqlCommand(commandString, connection)
Dim reader As SqlDataReader
reader = command.ExecuteReader
While reader.Read()
' Retrieve the value of the Primary Key column.
Dim id As Int32 = reader.GetInt32(0)
' Retrieve the value of the UDT.
Dim udt As LargeUDT = CType(reader(1), LargeUDT)
' You can also use GetSqlValue and GetValue.
' Dim udt As LargeUDT = CType(reader.GetSqlValue(1), LargeUDT)
' Dim udt As LargeUDT = CType(reader.GetValue(1), LargeUDT)
' Print values.
Console.WriteLine("ID={0} LargeUDT={1}", id, udt)
End While
reader.Close()
End Using
См. также
Основные понятия
Настройка параметров и типов данных параметров (ADO.NET)
Сопоставления типов данных SQL Server (ADO.NET)
Другие ресурсы
Получение сведений о схеме базы данных (ADO.NET)
Двоичные данные и данные большого размера SQL Server (ADO.NET)