Große UDTs
Benutzerdefinierte Typen (UDTs) gestatten Entwicklern, das Skalartypsystem durch das Speichern von CLR-Objekten (Common Language Runtime) in einer SQL Server-Datenbank zu erweitern. 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.
Vorher waren UDTs auf eine Dateigröße von maximal 8 Kilobyte beschränkt. In SQL Server 2008 besteht diese Beschränkung für UDTs mit dem UserDefined-Format nicht mehr.
Die vollständige Dokumentation zu benutzerdefinierten Typen finden Sie in der SQL Server-Onlinedokumentation unter Benutzerdefinierte CLR-Typen.
Abrufen von UDT-Schemas mithilfe von GetSchema
Die GetSchema-Methode von SqlConnection gibt in einer DataTableInformationen zum Datenbankschema zurück.
Werte in der Spalte GetSchemaTable für UDTs
Die GetSchemaTable-Methode von SqlDataReader gibt eine DataTable zurück, die Spaltenmetadaten beschreibt. In der folgenden Tabelle werden die Unterschiede bei SQL Server 2005 und SQL Server 2008 bei den Spaltenmetadaten für große UDTs beschrieben.
Spalte SqlDataReader | SQL Server 2005 | SQL Server 2008 und höher |
---|---|---|
ColumnSize |
Varies | Varies |
NumericPrecision |
255 | 255 |
NumericScale |
255 | 255 |
DataType |
Byte[] |
UDT-Instanz |
ProviderSpecificDataType |
SqlTypes.SqlBinary |
UDT-Instanz |
ProviderType |
21 (SqlDbType.VarBinary ) |
29 (SqlDbType.Udt ) |
NonVersionedProviderType |
29 (SqlDbType.Udt ) |
29 (SqlDbType.Udt ) |
DataTypeName |
SqlDbType.VarBinary |
Der dreiteilige, als Database.SchemaName.TypeName angegebene Name. |
IsLong |
Varies | Varies |
Aspekte bei der Spalte SqlDataReader
Der SqlDataReader wurde beginnend in SQL Server 2008 erweitert und unterstützt nun das Abrufen großer UDT-Werte. 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. Weitere Informationen finden Sie unter ConnectionString.
Die folgenden Methoden von SqlDataReader geben SqlBinary anstelle eines UDT zurück, wenn Type System Version
auf SQL Server 2005 festgelegt ist:
Die folgenden Methoden geben eine Array von Byte[]
anstelle eines UDT zurück, wenn Type System Version
auf SQL Server 2005 festgelegt ist:
Beachten Sie, dass für die aktuelle Version von ADO.NET keine Konvertierungen erfolgen.
Angeben von SqlParameters
Die folgenden SqlParameter-Eigenschaften wurden für das Arbeiten mit großen UDTs erweitert.
SqlParameter-Eigenschaft | Beschreibung |
---|---|
Value | Ruft ein Objekt ab oder legt es fest, das den Wert des Parameters darstellt. Der Standardwert ist NULL. Die Eigenschaft kann SqlBinary , Byte[] oder ein verwaltetes Objekt sein. |
SqlValue | Ruft ein Objekt ab oder legt es fest, das den Wert des Parameters darstellt. Der Standardwert ist NULL. Die Eigenschaft kann SqlBinary , Byte[] oder ein verwaltetes Objekt sein. |
Size | Ruft die Größe des aufzulösenden Parameterwerts ab oder legt sie fest. Der Standardwert ist 0. Die Eigenschaft kann eine ganze Zahl sein, die die Größe des Parameterwerts darstellt. Bei großen UDTs kann es sich um die tatsächliche Größe des UDT handeln, bei unbekannter Größe lautet der Wert -1. |
Beispiel des Abrufens von Daten
Das folgende Codefragment zeigt, wie große UDT-Daten abgerufen werden können. 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.
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
}
Nächste Schritte
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für