Delen via


Grote UDT's

Met door de gebruiker gedefinieerde typen (UDT's) kan een ontwikkelaar het scalaire typesysteem van de server uitbreiden door CLR-objecten (Common Language Runtime) op te slaan in een SQL Server-database. UDT's kunnen meerdere elementen bevatten en kunnen gedrag hebben, in tegenstelling tot de traditionele aliasgegevenstypen, die bestaan uit één sql Server-systeemgegevenstype.

Notitie

U moet .NET Framework 3.5 SP1 (of hoger) installeren om te profiteren van de verbeterde SqlClient-ondersteuning voor grote UDT's.

Voorheen werden UDT's beperkt tot een maximale grootte van 8 kilobytes. In SQL Server 2008 is deze beperking verwijderd voor UDT's met een indeling van UserDefined.

Zie CLR Door de gebruiker gedefinieerde typen voor de volledige documentatie voor door de gebruiker gedefinieerde typen.

UDT-schema's ophalen met GetSchema

De GetSchema methode voor het retourneren van SqlConnection databaseschemagegevens in een DataTable. Zie SQL Server-schemaverzamelingen voor meer informatie.

GetSchemaTable-kolomwaarden voor UDF's

De GetSchemaTable methode van een SqlDataReader retourneert een DataTable die kolommetagegevens beschrijft. In de volgende tabel worden de verschillen in de kolommetagegevens voor grote UDT's tussen SQL Server 2005 en SQL Server 2008 beschreven.

SqlDataReader-kolom SQL Server 2005 SQL Server 2008 en hoger
ColumnSize Varieert Varieert
NumericPrecision 255 255
NumericScale 255 255
DataType Byte[] UDT-exemplaar
ProviderSpecificDataType SqlTypes.SqlBinary UDT-exemplaar
ProviderType 21 (SqlDbType.VarBinary) 29 (SqlDbType.Udt)
NonVersionedProviderType 29 (SqlDbType.Udt) 29 (SqlDbType.Udt)
DataTypeName SqlDbType.VarBinary De driedelige naam die is opgegeven als Database.SchemaName.TypeName.
IsLong Varieert Varieert

Overwegingen voor SqlDataReader

Het SqlDataReader is uitgebreid vanaf SQL Server 2008 ter ondersteuning van het ophalen van grote UDT-waarden. Hoe groot UDT-waarden worden verwerkt door eenSqlDataReader, hangt af van de versie van SQL Server die u gebruikt, evenals van de Type System Version opgegeven in de verbindingsreeks. Zie ConnectionString voor meer informatie.

De volgende methoden retourneren SqlDataReader een SqlBinary in plaats van een UDT wanneer de Type System Version waarde is ingesteld op SQL Server 2005:

De volgende methoden retourneren een matrix van Byte[] in plaats van een UDT wanneer de Type System Version waarde is ingesteld op SQL Server 2005:

Houd er rekening mee dat er geen conversies worden uitgevoerd voor de huidige versie van ADO.NET.

SqlParameters opgeven

De volgende SqlParameter eigenschappen zijn uitgebreid voor gebruik met grote UDT's.

Eigenschap SqlParameter Beschrijving
Value Hiermee wordt een object opgehaald of ingesteld dat de waarde van de parameter vertegenwoordigt. De standaardwaarde is null. De eigenschap kan , Byte[]of een beheerd object zijnSqlBinary.
SqlValue Hiermee wordt een object opgehaald of ingesteld dat de waarde van de parameter vertegenwoordigt. De standaardwaarde is null. De eigenschap kan , Byte[]of een beheerd object zijnSqlBinary.
Size Hiermee wordt de grootte van de parameterwaarde opgehaald of ingesteld die moet worden omgezet. De standaardwaarde is 0. De eigenschap kan een geheel getal zijn dat de grootte van de parameterwaarde aangeeft. Voor grote UDT's kan dit de werkelijke grootte van de UDT zijn of -1 voor onbekend.

Voorbeeld van het ophalen van gegevens

Het volgende codefragment laat zien hoe u grote UDT-gegevens ophaalt. In connectionString de variabele wordt ervan uitgegaan dat er een geldige verbinding met een SQL Server-database is en dat de commandString variabele ervan uitgaat dat er eerst een geldige SELECT-instructie wordt gebruikt met de primaire-sleutelkolom die als eerste wordt vermeld.

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

Zie ook