Große UDTs in SQL Server 2008 (ADO.NET)
Seit der Einführung von benutzerdefinierten Typen (User-Defined Types, UDTs) in SQL Server 2005 können Entwickler das skalare Typsystem des Servers erweitern, indem sie CLR-Objekte in einer SQL Server-Datenbank speichern. UDTs können mehrere Elemente enthalten und Verhaltensweisen aufweisen, wodurch sie sich von den herkömmlichen Aliasdatentypen unterscheiden, die nur aus einem SQL Server-Systemdatentyp bestehen.
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. |
Bisher waren UDTs auf eine maximale Größe von 8 Kilobytes beschränkt. In SQL Server 2008 besteht diese Beschränkung für UDTs mit dem UserDefined-Format nicht mehr.
Eine vollständige Dokumentation zu benutzerdefinierten Typen finden Sie in der SQL Server-Onlinedokumentation für die von Ihnen verwendete SQL Server-Version.
SQL Server 2005 |
SQL Server 2008 |
---|---|
Abrufen von UDT-Schemas mit 'GetSchema'
Die GetSchema-Methode von SqlConnection gibt Informationen zum Datenbankschema in einer DataTable zurück. Weitere Informationen finden Sie unter SQL Server-Schemaauflistungen (ADO.NET).
'GetSchemaTable'-Spaltenwerte für UDTs
Die GetSchemaTable-Methode eines SqlDataReader gibt eine DataTable mit Beschreibungen der Spaltenmetadaten zurück. In der folgenden Tabelle werden die Unterschiede bezüglich der Spaltenmetadaten für große UDTs zwischen SQL Server 2005 und SQL Server 2008 erläutert.
SqlDataReader-Spalte |
SQL Server 2005 |
SQL Server 2008 |
---|---|---|
ColumnSize |
Unterschiedlich |
Unterschiedlich |
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 |
Unterschiedlich |
Unterschiedlich |
Überlegungen zu "SqlDataReader"
Der SqlDataReader wurde in SQL Server 2008 erweitert und unterstützt nun das Abrufen großer UDT-Werte. Die Verarbeitung großer UDT-Werte durch einen [SqlDataReader] ist von der verwendeten SQL Server-Version sowie der in der Verbindungszeichenfolge angegebenen Type System Version abhängig. Weitere Informationen finden Sie im Abschnitt "Änderungen an der Typsystemversion" in Neue Funktionen in SQL Server 2008 (ADO.NET).
Die folgenden Methoden von SqlDataReader geben in früheren Versionen von SQL Server statt einer UDT-Instanz eine SqlBinary-Instanz zurück. Dies ist auch dann der Fall, wenn für Type System Version nicht SQL Server 2008 angegeben ist.
Die folgenden Methoden geben in früheren Versionen von SQL Server statt einer UDT-Instanz ein Array von Byte[] zurück. Dies ist auch dann der Fall, wenn für Type System Version nicht SQL Server 2008 angegeben ist.
Beachten Sie, dass für die aktuelle Version von ADO.NET keine Konvertierungen vorgenommen werden.
Angeben von 'SqlParameters'
Die folgenden SqlParameter-Eigenschaften wurden für das Arbeiten mit großen UDTs erweitert.
SqlParameter-Eigenschaft |
Beschreibung |
---|---|
Ruft ein Objekt ab, das den Wert des Parameters darstellt, oder legt dieses fest. Der Standardwert ist NULL. Die Eigenschaft kann SqlBinary, Byte[] oder ein verwaltetes Objekt sein. |
|
Ruft ein Objekt ab, das den Wert des Parameters darstellt, oder legt dieses fest. Der Standardwert ist NULL. Die Eigenschaft kann SqlBinary, Byte[] oder ein verwaltetes Objekt sein. |
|
Ruft die Größe des aufzulösenden Parameterwerts ab oder legt diese fest. Der Standardwert ist 0. Die Eigenschaft kann eine ganze Zahl sein, die für die Größe des Parameterwerts steht. Bei großen UDTs kann es sich um die tatsächliche Größe des UDT handeln. Ist die Größe unbekannt, lautet der Wert "-1". |
Abrufen eines Datenbeispiels
Im folgenden Codefragment wird gezeigt, wie Daten großer UDTs abgerufen werden können. Die connectionString-Variable setzt eine gültige Verbindung mit einer SQL Server-Datenbank voraus. Die commandString-Variable setzt eine gültige SELECT-Anweisung voraus, in der die Primärschlüsselspalte zuerst aufgelistet ist.
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
Siehe auch
Konzepte
Konfigurieren von Parametern und Parameterdatentypen (ADO.NET)
SQL Server-Datentypmappings (ADO.NET)
Weitere Ressourcen
Abrufen von Schemainformationen aus einer Datenbank (ADO.NET)
Binäre Daten und Daten mit umfangreichen Werten in SQL Server (ADO.NET)