Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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:
- GetProviderSpecificFieldType
- GetProviderSpecificValue
- GetProviderSpecificValues
- GetSqlValue
- GetSqlValues
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