Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Typy zdefiniowane przez użytkownika umożliwiają deweloperowi rozszerzenie systemu typów skalarnych serwera przez przechowywanie obiektów środowiska uruchomieniowego języka wspólnego (CLR) w bazie danych programu SQL Server. Typy zdefiniowane przez użytkownika (UDT) mogą składać się z wielu elementów i mogą posiadać określone zachowania, w przeciwieństwie do tradycyjnych aliasowych typów danych, które składają się z jednego typu danych systemowych w SQL Server.
Uwaga
Aby uzyskać po stronie klienta dostęp do dużych typów zdefiniowanych przez użytkownika, zainstaluj pakiet NuGet Microsoft.Data.SqlClient i zaimportuj Microsoft.Data.SqlClient. Typy SQL CLR definiujące UDT po stronie serwera pozostają w Microsoft.SqlServer.Server; nie zamieniaj tych typów na typy dostawców klientów.
Wcześniej typy danych zdefiniowane przez użytkownika były ograniczone do maksymalnego rozmiaru 8 kilobajtów. W programie SQL Server 2008 to ograniczenie zostało usunięte dla typów zdefiniowanych przez użytkownika (UDT) o formacie UserDefined.
Aby uzyskać pełną dokumentację typów zdefiniowanych przez użytkownika, zobacz CLR User-Defined Types (Typy zdefiniowane przez użytkownika).
Pobieranie schematów UDT przy użyciu polecenia GetSchema
Metoda GetSchema zwraca informacje o schemacie bazy danych w obiekcie DataTable. Aby uzyskać więcej informacji, zobacz Kolekcje schematów programu SQL Server.
Wartości kolumn GetSchemaTable dla UDTs
Metoda GetSchemaTable zwraca metadane kolumny w DataTable obiekcie. W poniższej tabeli opisano różnice w metadanych kolumn dla dużych tras zdefiniowanych przez użytkownika między programem SQL Server 2005 i programem SQL Server 2008.
| Kolumna SqlDataReader | SQL Server 2005 | SQL Server 2008 i nowsze |
|---|---|---|
ColumnSize |
Różne | Różne |
NumericPrecision |
255 | 255 |
NumericScale |
255 | 255 |
DataType |
Byte[] |
Wystąpienie UDT |
ProviderSpecificDataType |
SqlTypes.SqlBinary |
Wystąpienie UDT |
ProviderType |
21 (SqlDbType.VarBinary) |
29 (SqlDbType.Udt) |
NonVersionedProviderType |
29 (SqlDbType.Udt) |
29 (SqlDbType.Udt) |
DataTypeName |
SqlDbType.VarBinary |
Trzyczęściowa nazwa określona jako Database.SchemaName.TypeName. |
IsLong |
Różne | Różne |
Zagadnienia dotyczące elementu SqlDataReader
Klasa SqlDataReader obsługuje duże wartości UDT w wersjach SQL Server 2008 i nowszych. Sposób przetwarzania tych wartości zależy od wersji SQL Server i parametrów połączenia Type System Version. Aby uzyskać więcej informacji, zobacz ConnectionString.
Gdy Type System Version jest SQL Server 2005, następujące SqlDataReader metody używają binarnej reprezentacji dużych UDT:
- GetProviderSpecificFieldType Zwraca obiekt Type dla SqlBinary.
- GetProviderSpecificValue i GetSqlValue zwracają wartości SqlBinary.
- GetProviderSpecificValues i GetSqlValues wypełniają podaną tablicę wartościami kolumn specyficznymi dla dostawcy i zwracają liczbę wypełnionych elementów. Duże wartości UDT w tej tablicy używają SqlBinary.
Przy tym samym ustawieniu systemu typów GetValue zwraca dużą wartość UDT jako Byte[].
GetValues Wypełnia podaną tablicę wartościami kolumn i zwraca liczbę wypełnionych elementów. Duże wartości UDT w tej tablicy używają Byte[].
Należy pamiętać, że dla bieżącej wersji ADO.NET nie są wykonywane żadne konwersje.
Określanie parametrów SqlParameters
Poniższe SqlParameter właściwości obsługują duże typy zdefiniowane przez użytkownika.
| SqlParameter, właściwość | opis |
|---|---|
| Value | Pobiera lub ustawia obiekt reprezentujący wartość parametru. Domyślny ma wartość null. Właściwość może mieć SqlBinarywartość, Byte[]lub obiekt zarządzany. |
| SqlValue | Pobiera lub ustawia obiekt reprezentujący wartość parametru. Domyślny ma wartość null. Właściwość może mieć SqlBinarywartość, Byte[]lub obiekt zarządzany. |
| Size | Pobiera lub ustawia rozmiar wartości parametru do rozpoznania. Wartość domyślna to 0. Właściwość może być liczbą całkowitą reprezentującą rozmiar wartości parametru. W przypadku dużych tras zdefiniowanych przez użytkownika może to być rzeczywisty rozmiar udT lub -1 dla nieznanego. |
Przykład pobierania danych
Poniższy fragment kodu przedstawia sposób pobierania dużych danych UDT. Zmienna connectionString zakłada prawidłowe połączenie z bazą danych SQL Server, a commandString zmienna przyjmuje prawidłową SELECT instrukcję z kolumną klucza podstawowego wymienioną jako pierwsza.
using (SqlConnection connection = new SqlConnection(
connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(commandString, connection);
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)
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