Udostępnij za pośrednictwem


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:

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ć 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 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

Zobacz też