Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Определяемые пользователем типы призваны дать разработчику возможность расширить серверную систему скалярных типов путем хранения объектов среды CLR в базе данных SQL Server. Определяемые пользователем типы данных могут содержать несколько элементов и иметь уникальное поведение в отличие от псевдонимных типов данных, которые состоят из одного системного типа данных SQL Server.
Примечание.
Чтобы воспользоваться расширенной поддержкой SqlClient определяемых пользователем типов данных большого размера, необходимо установить .NET Framework 3.5 с пакетом обновления 1 (SP1) или более поздней версии.
Ранее размеры UDT были ограничены 8 килобайтами. В SQL Server 2008 это ограничение было снято для UDT, которые имеют формат UserDefined.
Полная документация по определяемым пользователем типам см. в разделе CLR Определяемые пользователем типы.
Загрузка схем пользовательских типов данных с помощью метода GetSchema
Метод GetSchemaSqlConnection возвращает сведения о схеме базы данных в DataTable. Дополнительные сведения см. в разделе "Коллекции схем SQL Server".
Значения столбцов GetSchemaTable для UDTs
Метод GetSchemaTableSqlDataReader возвращает DataTable, описывающее метаданные столбца. В следующей таблице описаны различия в метаданных столбцов для больших пользовательских типов данных (UDT) между SQL Server 2005 и SQL Server 2008.
| Колонка SqlDataReader | SQL Server 2005 г. | SQL Server 2008 и более поздние версии |
|---|---|---|
ColumnSize |
Разные | Разные |
NumericPrecision |
255 | 255 |
NumericScale |
255 | 255 |
DataType |
Byte[] |
Экземпляр UDT |
ProviderSpecificDataType |
SqlTypes.SqlBinary |
Экземпляр UDT |
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, указанного в строке подключения. Дополнительные сведения см. в разделе ConnectionString.
Следующие методы SqlDataReader будут возвращать SqlBinary вместо типа, определяемого пользователем (UDT), если для Type System Version установлено значение SQL Server 2005:
- GetProviderSpecificFieldType
- GetProviderSpecificValue
- GetProviderSpecificValues
- GetSqlValue
- GetSqlValues
Следующие методы будут возвращать массив Byte[] вместо пользовательского определяемого типа данных, если для Type System Version установлено значение SQL Server 2005:
Обратите внимание, что для текущей версии ADO.NET никакие преобразования не выполняются.
Указание SqlParameters
Следующие свойства SqlParameter были расширены для работы с большими пользовательскими типами данных.
| Свойство SqlParameter | Описание |
|---|---|
| Value | Возвращает или задает объект, представляющий значение параметра. Значение по умолчанию — NULL. Свойством может быть SqlBinary, Byte[] или управляемый объект. |
| SqlValue | Возвращает или задает объект, представляющий значение параметра. Значение по умолчанию — NULL. Свойством может быть SqlBinary, Byte[] или управляемый объект. |
| Size | Возвращает или задает размер значения параметра для обработки. Значение по умолчанию равно 0. Свойство может быть целым числом, представляющим размер значения параметра. Для больших определяемых пользователем типов оно может равняться действительному размеру определяемого пользователем типа или иметь значение –1 — для неизвестных. |
Пример извлечения данных
В следующем фрагменте кода показано, как получить большие данные UDT (пользовательского типа данных). Переменная 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