Jazyk
Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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:
- GetProviderSpecificFieldType vrátí objekt Type pro SqlBinary.
- GetProviderSpecificValue a GetSqlValue vracejí hodnoty SqlBinary.
- GetProviderSpecificValues a GetSqlValues vyplní zadané pole hodnotami sloupců specifickými pro zprostředkovatele a vrátí počet vyplněných prvků. Velké hodnoty UDT v tomto poli používají SqlBinary.
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