Lingua
Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I tipi definiti dall'utente (UDT) consentono agli sviluppatori di estendere il sistema di tipi scalare del server archiviando oggetti Common Language Runtime (CLR) in un database di SQL Server. I tipi definiti dall'utente (UDT) possono contenere più elementi e avere comportamenti, a differenza dei tradizionali tipi di dati alias che sono costituiti da un solo tipo di dati del sistema SQL Server.
Nota
Per l'accesso client a tipi definiti dall'utente di grandi dimensioni, installare il pacchetto NuGet Microsoft.Data.SqlClient e importare Microsoft.Data.SqlClient. I tipi CLR SQL che definiscono l'UDT lato server rimangono in Microsoft.SqlServer.Server; non sostituire tali tipi con tipi di provider client.
In precedenza, i tipi definiti dall'utente erano limitati a una dimensione massima di 8 kilobyte. In SQL Server 2008, questa limitazione è stata rimossa per i TDU che hanno un formato di UserDefined.
Per la documentazione completa relativa ai tipi definiti dall'utente, vedere Tipi CLR definiti dall'utente.
Recupero di schemi UDT tramite GetSchema
Il GetSchema metodo restituisce informazioni sullo schema del database nell'oggetto DataTable . Per altre informazioni, vedere Raccolte di schemi di SQL Server.
Valori della colonna GetSchemaTable per tipi UDT
Il GetSchemaTable metodo restituisce i metadati della colonna nell'oggetto DataTable . La seguente tabella descrive le differenze nei metadati delle colonne per grandi tipi di dati definiti dall'utente tra SQL Server 2005 e SQL Server 2008.
| Colonna SqlDataReader | SQL Server 2005 | SQL Server 2008 e versioni successive |
|---|---|---|
ColumnSize |
Variabile | Variabile |
NumericPrecision |
255 | 255 |
NumericScale |
255 | 255 |
DataType |
Byte[] |
Istanza UDT |
ProviderSpecificDataType |
SqlTypes.SqlBinary |
Istanza UDT |
ProviderType |
21 (SqlDbType.VarBinary) |
29 (SqlDbType.Udt) |
NonVersionedProviderType |
29 (SqlDbType.Udt) |
29 (SqlDbType.Udt) |
DataTypeName |
SqlDbType.VarBinary |
Nome in tre parti specificato come Database.SchemaName.TypeName. |
IsLong |
Variabile | Variabile |
Considerazioni su SqlDataReader
La SqlDataReader classe supporta valori UDT di grandi dimensioni in SQL Server 2008 e versioni successive. Il modo in cui il reader elabora questi valori dipende dalla versione di SQL Server e da Type System Version nella stringa di connessione. Per ulteriori informazioni, vedere ConnectionString.
Quando Type System Version è SQL Server 2005, i metodi seguenti SqlDataReader usano la rappresentazione binaria di UDT di grandi dimensioni:
- GetProviderSpecificFieldType restituisce l'oggetto Type per SqlBinary.
- GetProviderSpecificValue e GetSqlValue restituiscono SqlBinary valori.
- GetProviderSpecificValues e GetSqlValues riempiono la matrice fornita con valori di colonna specifici del provider e restituiscono il numero di elementi popolati. Valori UDT di grandi dimensioni in tale array usano SqlBinary.
Per la stessa impostazione del sistema di tipi, GetValue restituisce il valore definito dall'utente di grandi dimensioni come Byte[].
GetValues riempie l'array fornito con valori di colonna e restituisce il numero di elementi popolati. Valori UDT di grandi dimensioni in tale matrice usano Byte[].
Si noti che non viene eseguita alcuna conversione per la versione corrente di ADO.NET.
Specificare SqlParameters
Le proprietà seguenti SqlParameter supportano tipi definiti dall'utente di grandi dimensioni.
| Proprietà SqlParameter | Descrizione |
|---|---|
| Value | Ottiene o imposta un oggetto che rappresenta il valore del parametro. Il valore predefinito è Null. La proprietà può essere SqlBinary, Byte[] o un oggetto gestito. |
| SqlValue | Ottiene o imposta un oggetto che rappresenta il valore del parametro. Il valore predefinito è Null. La proprietà può essere SqlBinary, Byte[] o un oggetto gestito. |
| Size | Ottiene o imposta la dimensione del valore del parametro da risolvere. Il valore predefinito è 0. La proprietà può essere un numero intero che rappresenta la dimensione del valore del parametro. Per gli UDT di grandi dimensioni, può trattarsi delle dimensioni effettive dell'UDT oppure di -1 quando è sconosciuto. |
Esempio di recupero di dati
Il frammento di codice seguente illustra come recuperare dati UDT di grandi dimensioni. La connectionString variabile presuppone una connessione valida a un database SQL Server e la commandString variabile presuppone un'istruzione valida SELECT con la colonna chiave primaria elencata per prima.
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