Freigeben über


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.

HinweisHinweis

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

Benutzerdefinierte CLR-Typen

Benutzerdefinierte CLR-Typen

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

Value

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.

SqlValue

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.

Size

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)