Condividi tramite


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.

NotaNota

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

Tipi CLR definiti dall'utente

Tipi CLR definiti dall'utente

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

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 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)