Поделиться через


Определяемые пользователем типы большого размера в SQL Server 2008 (ADO.NET)

Обновлен: November 2007

Определяемые пользователем типы данных, представленные в SQL Server 2005, позволяют разработчику расширить систему скалярных типов путем сохранения в базе данных SQL Server объектов среды CLR. Определяемые пользователем типы могут содержать несколько элементов в отличие от традиционных псевдонимов типов данных, состоящих из одного системного типа данных SQL Server.

Cc668762.alert_note(ru-ru,VS.90).gifПримечание.

Чтобы воспользоваться расширенной поддержкой SqlClient определяемых пользователем типов данных большого размера, необходимо установить .NET Framework 3.5 с пакетом обновления 1 (SP1) или более поздней версии.

Ранее максимальный размер определяемых пользователем типов данных был ограничен 8 килобайтами. В SQL Server 2008 это ограничение было снято для определяемых пользователем типов данных в формате UserDefined.

Полную документацию по определяемым пользователем типам данных см. в электронной документации по SQL Server для используемой версии SQL Server.

SQL Server 2005

SQL Server 2008

Определяемые пользователем типы данных CLR

Определяемые пользователем типы данных CLR

Загрузка схем определяемых пользователем типов данных с помощью метода 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

Описание

Value

Возвращает или задает объект, представляющий собой значение параметра. Значение по умолчанию — NULL. Свойство может принимать значения SqlBinary, Byte[] или управляемого объекта.

SqlValue

Возвращает или задает объект, представляющий собой значение параметра. Значение по умолчанию — NULL. Свойство может принимать значения SqlBinary, Byte[] или управляемого объекта.

Size

Возвращает или задает размер значения параметра для разрешения. Значение по умолчанию равно 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)