Tipi UDT di grandi dimensioni in SQL Server 2008 (ADO.NET)
L'introduzione dei tipi definiti dall'utente (UDT) in Microsoft SQL Server 2005 consente agli sviluppatori di estendere il sistema di tipi scalari del server archiviando oggetti CLR (Common Language Runtime) in un database di SQL Server. I tipi UDT possono contenere più elementi e presentare comportamenti diversi dai tipi di dati alias tradizionali, costituiti da un singolo tipo di dati di sistema SQL Server.
Nota |
---|
Per sfruttare il supporto SqlClient migliorato per i tipi UDT di grandi dimensioni, è necessario installare .NET Framework 3.5 SP1 (o versione successiva). |
In precedenza, i tipi UDT avevano una dimensione massima di 8 kilobyte. In SQL Server 2008 questa limitazione è stata rimossa per i tipi UDT che hanno un formato UserDefined.
Per informazioni complete sui tipi definiti dall'utente, vedere la documentazione online di SQL Server relativa alla versione di SQL Server in uso.
SQL Server 2005 |
SQL Server 2008 |
---|---|
Recupero di schemi UDT tramite GetSchema
Il metodo GetSchema di SqlConnection restituisce informazioni sullo schema di database in un oggetto DataTable. Per ulteriori informazioni, vedere Raccolte di schemi di SQL Server (ADO.NET).
Valori della colonna GetSchemaTable per i tipi UDT
Il metodo GetSchemaTable di SqlDataReader restituisce un oggetto DataTable che descrive i metadati della colonna. Nella tabella seguente sono descritte le differenze tra i metadati della colonna per i tipi UDT di grandi dimensioni tra SQL Server 2005 e SQL Server 2008.
Colonna SqlDataReader |
SQL Server 2005 |
SQL Server 2008 |
---|---|---|
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
SqlDataReader è stato esteso in SQL Server 2008 per supportare il recupero di valori UDT di grandi dimensioni. La modalità di elaborazione dei valori UDT di grandi dimensioni da parte di [SqlDataReader] dipende dalla versione di SQL Server in uso, nonché dal valore di Type System Version specificato nella stringa di connessione. Per ulteriori informazioni, vedere la sezione "Modifiche alla versione del sistema di tipi" in Nuove funzionalità di SQL Server 2008 (ADO.NET).
I metodi seguenti di SqlDataReader restituiscono un oggetto SqlBinary anziché un'istanza UDT nelle versioni precedenti di SQL Server o quando tramite Type System Version non viene specificato SQL Server 2008:
I metodi seguenti restituiscono una matrice di Byte[] anziché un'istanza UDT nelle versioni precedenti di SQL Server o quando tramite Type System Version non viene specificato SQL Server 2008:
Si noti che per la versione corrente di ADO.NET non vengono eseguite conversioni.
Impostazione di SqlParameters
Le proprietà SqlParameter seguenti sono state estese per l'utilizzo con i tipi UDT di grandi dimensioni.
Proprietà SqlParameter |
Descrizione |
---|---|
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. |
|
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. |
|
Ottiene o imposta la dimensione del valore del parametro da risolvere. Il valore predefinito è 0. La proprietà può essere un valore integer che rappresenta la dimensione del valore del parametro. Per i tipi UDT di grandi dimensioni, può trattarsi delle dimensioni effettive del tipo UDT oppure può essere pari a -1 per i tipi sconosciuti. |
Esempio di recupero di dati
Nel frammento di codice seguente viene illustrato come recuperare i dati UDT di grandi dimensioni. La variabile connectionString presuppone una connessione valida a un database di SQL Server e la variabile commandString presuppone un'istruzione SELECT valida con la colonna della chiave primaria elencata per prima.
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
Vedere anche
Concetti
Configurazione di parametri e di tipi di dati dei parametri (ADO.NET)
Mapping dei tipi di dati SQL Server (ADO.NET)
Altre risorse
Recupero di informazioni sullo schema di database (ADO.NET)
Dati binari e con valori di grandi dimensioni SQL Server (ADO.NET)