Große UDTsLarge UDTs

Benutzerdefinierte Typen (UDTs) gestatten Entwicklern, das Skalartypsystem durch das Speichern von CLR-Objekten (Common Language Runtime) in einer SQL Server-Datenbank zu erweitern.User-defined types (UDTs) allow a developer to extend the server's scalar type system by storing common language runtime (CLR) objects in a SQL Server database. UDTs können mehrere Elemente enthalten und Verhalten aufweisen, die sich von den herkömmlichen Aliasdatentypen unterscheiden, die aus einem einzigen SQL Server-Systemdatentyp bestehen.UDTs can contain multiple elements and can have behaviors, unlike the traditional alias data types, which consist of a single SQL Server system data type.

Hinweis

Sie müssen .NET Framework 3.5 SP1 (oder höher) installieren, um die Vorteile der erweiterten SqlClient-Unterstützung für große UDTs nutzen zu können.You must install the .NET Framework 3.5 SP1 (or later) to take advantage of the enhanced SqlClient support for large UDTs.

Vorher waren UDTs auf eine Dateigröße von maximal 8 Kilobyte beschränkt.Previously, UDTs were restricted to a maximum size of 8 kilobytes. In SQL Server 2008 besteht diese Beschränkung für UDTs mit dem UserDefined-Format nicht mehr.In SQL Server 2008, this restriction has been removed for UDTs that have a format of UserDefined.

Eine vollständige Dokumentation zu benutzerdefinierten Typen finden Sie in der SQL Server-Onlinedokumentation für die von Ihnen verwendete SQL Server-Version.For the complete documentation for user-defined types, see the version of SQL Server Books Online for the version of SQL Server you are using.

SQL Server-DokumentationSQL Server documentation

  1. Benutzerdefinierte CLR-TypenCLR User-Defined Types

Abrufen von UDT-Schemas mit 'GetSchema'Retrieving UDT Schemas Using GetSchema

Die GetSchema-Methode von SqlConnection gibt in einer DataTableInformationen zum Datenbankschema zurück.The GetSchema method of SqlConnection returns database schema information in a DataTable. Weitere Informationen finden Sie unter SQL Server-Schemasammlungen.For more information, see SQL Server Schema Collections.

'GetSchemaTable'-Spaltenwerte für UDTsGetSchemaTable Column Values for UDTs

Die GetSchemaTable-Methode von SqlDataReader gibt eine DataTable zurück, die Spaltenmetadaten beschreibt.The GetSchemaTable method of a SqlDataReader returns a DataTable that describes column metadata. In der folgenden Tabelle werden die Unterschiede bei SQL Server 2005 und SQL Server 2008 bei den Spaltenmetadaten für große UDTs beschrieben.The following table describes the differences in the column metadata for large UDTs between SQL Server 2005 and SQL Server 2008.

Spalte SqlDataReaderSqlDataReader column SQL Server 2005SQL Server 2005 SQL Server 2008 und höherSQL Server 2008 and later
ColumnSize VariesVaries VariesVaries
NumericPrecision 255255 255255
NumericScale 255255 255255
DataType Byte[] UDT-InstanzUDT instance
ProviderSpecificDataType SqlTypes.SqlBinary UDT-InstanzUDT instance
ProviderType 21 (SqlDbType.VarBinary)21 (SqlDbType.VarBinary) 29 (SqlDbType.Udt)29 (SqlDbType.Udt)
NonVersionedProviderType 29 (SqlDbType.Udt)29 (SqlDbType.Udt) 29 (SqlDbType.Udt)29 (SqlDbType.Udt)
DataTypeName SqlDbType.VarBinary Der dreiteilige, als Database.SchemaName.TypeName angegebene Name.The three part name specified as Database.SchemaName.TypeName.
IsLong VariesVaries VariesVaries

Überlegungen zu "SqlDataReader"SqlDataReader Considerations

Der SqlDataReader wurde beginnend in SQL Server 2008 erweitert und unterstützt nun das Abrufen großer UDT-Werte.The SqlDataReader has been extended beginning in SQL Server 2008 to support retrieving large UDT values. Wie große UDT-Werte von SqlDataReader verarbeitet werden, hängt von der verwendeten SQL Server-Version sowie von der in der Verbindungszeichenfolge angegebenen Type System Version ab.How large UDT values are processed by a SqlDataReader depends on the version of SQL Server you are using, as well as on the Type System Version specified in the connection string. Weitere Informationen finden Sie unter ConnectionString.For more information, see ConnectionString.

Die folgenden Methoden von SqlDataReader geben SqlBinary anstelle eines UDT zurück, wenn Type System Version auf SQL Server 2005 festgelegt ist:The following methods of SqlDataReader will return a SqlBinary instead of a UDT when the Type System Version is set to SQL Server 2005:

Die folgenden Methoden geben eine Array von Byte[] anstelle eines UDT zurück, wenn Type System Version auf SQL Server 2005 festgelegt ist:The following methods will return an array of Byte[] instead of a UDT when the Type System Version is set to SQL Server 2005:

Beachten Sie, dass für die aktuelle Version von ADO.NET keine Konvertierungen erfolgen.Note that no conversions are made for the current version of ADO.NET.

Angeben von SqlParametersSpecifying SqlParameters

Die folgenden SqlParameter-Eigenschaften wurden für das Arbeiten mit großen UDTs erweitert.The following SqlParameter properties have been extended to work with large UDTs.

SqlParameter-EigenschaftSqlParameter Property BeschreibungDescription
Value Ruft ein Objekt ab oder legt es fest, das den Wert des Parameters darstellt.Gets or sets an object that represents the value of the parameter. Der Standardwert ist NULL.The default is null. Die Eigenschaft kann SqlBinary, Byte[] oder ein verwaltetes Objekt sein.The property can be SqlBinary, Byte[], or a managed object.
SqlValue Ruft ein Objekt ab oder legt es fest, das den Wert des Parameters darstellt.Gets or sets an object that represents the value of the parameter. Der Standardwert ist NULL.The default is null. Die Eigenschaft kann SqlBinary, Byte[] oder ein verwaltetes Objekt sein.The property can be SqlBinary, Byte[], or a managed object.
Size Ruft die Größe des aufzulösenden Parameterwerts ab oder legt sie fest.Gets or sets the size of the parameter value to resolve. Der Standardwert ist 0.The default value is 0. Die Eigenschaft kann eine ganze Zahl sein, die die Größe des Parameterwerts darstellt.The property can be an integer that represents the size of the parameter value. Bei großen UDTs kann es sich um die tatsächliche Größe des UDT handeln, bei unbekannter Größe lautet der Wert -1.For large UDTs, it can be the actual size of the UDT, or -1 for unknown.

Abrufen eines DatenbeispielsRetrieving Data Example

Das folgende Codefragment zeigt, wie große UDT-Daten abgerufen werden können.The following code fragment demonstrates how to retrieve large UDT data. Die Variable connectionString setzt eine gültige Verbindung mit einer SQL Server-Datenbank voraus. Die Variable commandString setzt eine gültige SELECT-Anweisung mit an erster Stelle aufgeführter Primärschlüsselspalte voraus.The connectionString variable assumes a valid connection to a SQL Server database and the commandString variable assumes a valid SELECT statement with the primary key column listed first.

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  

Weitere InformationenSee also