Jazyk

Velké uživatelsky definované typy

Uživatelem definované typy (UDT) umožňují vývojáři rozšířit skalární systém serveru uložením objektů CLR (Common Language Runtime) do databáze SQL Serveru. UDT mohou obsahovat více prvků a mohou mít chování, na rozdíl od tradičních datových typů aliasů, které se skládají z jednoho systémového datového typu SQL Serveru.

Poznámka:

Pro klientský přístup k velkým UDT nainstalujte balíček NuGet Microsoft.Data.SqlClient a importujte Microsoft.Data.SqlClient. Typy SQL CLR, které definují UDT na straně serveru, zůstanou v Microsoft.SqlServer.Server; nenahrazujte tyto typy typy zprostředkovatele na straně klienta.

Dříve byly UDT omezeny na maximální velikost 8 kilobajtů. V SYSTÉMU SQL Server 2008 bylo toto omezení odebráno pro UDT, které mají formát UserDefined.

Kompletní dokumentaci k uživatelsky definovaným typům najdete v tématu Typy definované uživatelem CLR.

Načítání schémat UDT pomocí GetSchema

Metoda GetSchema vrátí informace o schématu databáze v objektu DataTable . Další informace naleznete v tématu Kolekce schémat SQL Serveru.

GetSchemaTable - hodnoty sloupce pro uživatelsky definované typy

Metoda GetSchemaTable vrátí metadata sloupců v objektu DataTable . Následující tabulka popisuje rozdíly v metadatech sloupců pro velké UDT mezi SQL Serverem 2005 a SQL Serverem 2008.

Sloupec SqlDataReader SQL Server 2005 SQL Server 2008 a novější
ColumnSize Je to různé. Je to různé.
NumericPrecision 255 255
NumericScale 255 255
DataType Byte[] Instance typu UDT
ProviderSpecificDataType SqlTypes.SqlBinary Instance typu UDT
ProviderType 21 (SqlDbType.VarBinary) 29 (SqlDbType.Udt)
NonVersionedProviderType 29 (SqlDbType.Udt) 29 (SqlDbType.Udt)
DataTypeName SqlDbType.VarBinary Název tří částí zadaný jako Database.SchemaName.TypeName.
IsLong Je to různé. Je to různé.

Důležité informace o SqlDataReader

Třída SqlDataReader podporuje velké hodnoty UDT v SQL Server 2008 a novějších verzích. Jak čtenář zpracovává tyto hodnoty, závisí na verzi SQL Server a na Type System Version v připojovacím řetězci. Další informace najdete na webu ConnectionString.

Pokud Type System Version je SQL Server 2005, následující SqlDataReader metody používají binární reprezentaci velkých UDT:

Pro stejné nastavení systému typů vrací GetValue velkou hodnotu UDT jako Byte[]. GetValues vyplní zadané pole hodnotami sloupců a vrátí počet vyplněných prvků. Velké hodnoty UDT v tomto poli používají Byte[].

Upozorňujeme, že pro aktuální verzi ADO.NET nejsou provedeny žádné převody.

Určení parametrů SqlParameters

Následující SqlParameter vlastnosti podporují velké UDTy.

SqlParameter – vlastnost Popis
Value Získá nebo nastaví objekt, který představuje hodnotu parametru. Výchozí hodnota je null. Vlastnost může být SqlBinary, Byte[]nebo spravovaný objekt.
SqlValue Získá nebo nastaví objekt, který představuje hodnotu parametru. Výchozí hodnota je null. Vlastnost může být SqlBinary, Byte[]nebo spravovaný objekt.
Size Získá nebo nastaví velikost hodnoty parametru k vyřešení. Výchozí hodnota je 0. Vlastnost může být celé číslo, které představuje velikost hodnoty parametru. U velkých UDT může být skutečná velikost UDT nebo -1, pokud je velikost neznámá.

Příklad načítání dat

Následující fragment kódu ukazuje, jak načíst velká data UDT. Proměnná connectionString předpokládá platné připojení k databázi SQL Server a commandString proměnná předpokládá platný SELECT příkaz se sloupcem primárního klíče uvedeným jako první.

using (SqlConnection connection = new SqlConnection(
    connectionString))
{
  connection.Open();
  SqlCommand command = new SqlCommand(commandString, connection);
  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)
    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

Viz také