Duże UDT
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. Trasy zdefiniowane przez użytkownika mogą zawierać wiele elementów i mogą mieć zachowania, w przeciwieństwie do tradycyjnych typów danych aliasu, które składają się z jednego typu danych systemowych programu SQL Server.
Uwaga
Aby móc korzystać z rozszerzonej obsługi dużych jednostek ZDEFINIOWANYch przez klienta SQL, należy zainstalować program .NET Framework 3.5 z dodatkiem SP1 (lub nowszym).
Wcześniej trasy 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 tras ZDEFINIOWANYch w 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 SqlConnection bazy danych w obiekcie DataTable. Aby uzyskać więcej informacji, zobacz Kolekcje schematów programu SQL Server.
GetSchemaTable Column Values for UDTs
GetSchemaTable Metoda zwraca SqlDataReader wartość DataTable , która opisuje metadane kolumny. 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
Rozszerzenie SqlDataReader zostało rozszerzone począwszy od programu SQL Server 2008 w celu obsługi pobierania dużych wartości UDT. Sposób przetwarzania dużych wartości UDT przez SqlDataReader element zależy od używanej wersji programu SQL Server, a także od Type System Version
określonej w parametry połączenia. Aby uzyskać więcej informacji, zobacz ConnectionString.
Następujące metody SqlDataReader funkcji zwracają wartość SqlBinary zamiast funkcji UDT, gdy Type System Version
parametr jest ustawiony na program SQL Server 2005:
- GetProviderSpecificFieldType
- GetProviderSpecificValue
- GetProviderSpecificValues
- GetSqlValue
- GetSqlValues
Następujące metody zwracają tablicę Byte[]
zamiast funkcji UDT, gdy Type System Version
parametr jest ustawiony na program SQL Server 2005:
Należy pamiętać, że dla bieżącej wersji ADO.NET nie są wykonywane żadne konwersje.
Określanie parametrów SqlParameters
Następujące SqlParameter właściwości zostały rozszerzone w celu pracy z dużymi funkcjami ZDEFINIOWANYmi 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ć SqlBinary wartość , 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ć SqlBinary wartość , 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 programu SQL Server, a commandString
zmienna zakłada prawidłową instrukcję SELECT z pierwszą kolumną klucza podstawowego.
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