Megosztás:


Nagy UDT-k

A felhasználó által definiált típusok (UDT-k) lehetővé teszik a fejlesztők számára a kiszolgáló skaláris típusrendszerének kiterjesztését azáltal, hogy közös nyelvi futtatókörnyezeti (CLR-) objektumokat tárolnak egy SQL Server-adatbázisban. Az UDT-k több elemet tartalmazhatnak, és viselkedésük is lehet, ellentétben a hagyományos alias adattípusokkal, amelyek egyetlen SQL Server-rendszer adattípusból állnak.

Feljegyzés

A .NET-keretrendszer 3.5 SP1 -et (vagy újabb verziót) telepítenie kell a nagyobb UDT-k továbbfejlesztett SqlClient-támogatásának kihasználásához.

Korábban az UDT-k maximális mérete 8 kilobájt volt. Az SQL Server 2008-ban ez a korlátozás el lett távolítva az olyan UDT-k esetében, amelyek formátuma UserDefined.

A felhasználó által definiált típusok teljes dokumentációját a FELHASZNÁLÓ által definiált CLR-típusok című témakörben találja.

UDT-sémák lekérése a GetSchema használatával

A GetSchema metódus az SqlConnection adatbázisséma adatait adja vissza egy DataTable. További információ: SQL Server-sémagyűjtemények.

GetSchemaTable oszlopértékek UDT-khez

A GetSchemaTable metódus egy oszlop metaadatait SqlDataReader leíró értéket DataTable ad vissza. Az alábbi táblázat az SQL Server 2005 és az SQL Server 2008 közötti nagy UDT-k oszlop metaadatainak különbségeit ismerteti.

SqlDataReader oszlop SQL Server 2005 SQL Server 2008 és újabb verziók
ColumnSize Eltérő Eltérő
NumericPrecision 255 255
NumericScale 255 255
DataType Byte[] UDT-példány
ProviderSpecificDataType SqlTypes.SqlBinary UDT-példány
ProviderType 21 (SqlDbType.VarBinary) 29 (SqlDbType.Udt)
NonVersionedProviderType 29 (SqlDbType.Udt) 29 (SqlDbType.Udt)
DataTypeName SqlDbType.VarBinary A Database.SchemaName.TypeName néven megadott három résznév.
IsLong Eltérő Eltérő

Az SqlDataReader szempontjai

Az SqlDataReader SQL Server 2008-tól kezdve kiterjesztették a nagy UDT-értékek lekérésének támogatására. Az UDT-értékek feldolgozása SqlDataReader a használt SQL Server verziójától és a Type System Version kapcsolati sztring megadotttól függ. További információ: ConnectionString.

Az alábbi metódusok SqlDataReader az SQL Server 2005-höz beállított UDT SqlBinary helyett egy értéket adnak visszaType System Version:

Az alábbi metódusok az SQL Server 2005 beállításakor Byte[] az UDT helyett egy tömböt Type System Version adnak vissza:

Vegye figyelembe, hogy a ADO.NET jelenlegi verziójához nem történik átalakítás.

SqlParameterek megadása

A következő SqlParameter tulajdonságok ki lettek terjesztve a nagy UDT-k használatához.

SqlParameter tulajdonság Leírás
Value Lekéri vagy beállítja a paraméter értékét képviselő objektumot. Az alapértelmezett érték null. A tulajdonság lehet SqlBinary, Byte[]vagy felügyelt objektum.
SqlValue Lekéri vagy beállítja a paraméter értékét képviselő objektumot. Az alapértelmezett érték null. A tulajdonság lehet SqlBinary, Byte[]vagy felügyelt objektum.
Size Lekéri vagy beállítja a feloldandó paraméterérték méretét. Az alapértelmezett érték 0. A tulajdonság lehet egész szám, amely a paraméterérték méretét jelöli. Nagy UDT-k esetén ez lehet az UDT tényleges mérete, ismeretlen esetén pedig -1.

Példa adatlekérésre

Az alábbi kódrészlet bemutatja, hogyan lehet nagy UDT-adatokat lekérni. A connectionString változó érvényes kapcsolatot feltételez egy SQL Server-adatbázissal, és a commandString változó egy érvényes SELECT utasítást feltételez az elsődleges kulcs oszlopával.

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

Lásd még