UDT volumineux dans SQL Server 2008 (ADO.NET)

Mise à jour : November 2007

Les types définis par l'utilisateur (UDT, User-Defined Types) introduits dans SQL Server 2005 permettent à un développeur d'étendre le système de type scalaire du serveur, en stockant des objets CLR (Common Language Runtime) dans une base de données SQL Server. Les UDT peuvent contenir plusieurs éléments et, contrairement aux types de données alias traditionnels, avoir des comportements qui consistent en un unique type de données système SQL Server.

Remarque :

Vous devez installer le .NET Framework 3.5 SP1 (ou version ultérieure) pour tirer parti de la prise en charge améliorée de SqlClient pour les UDT volumineux.

Auparavant, les UDT étaient limités à une taille maximale de 8 Ko. Dans SQL Server 2008, cette restriction a été supprimée pour les UDT ayant un format UserDefined.

Pour la documentation complète relative aux types définis par l'utilisateur, consultez la version de la documentation en ligne de SQL Server correspondant à la version de SQL Server que vous utilisez.

SQL Server 2005

SQL Server 2008

CLR User-Defined Types (en anglais)

CLR User-Defined Types (en anglais)

Récupération de schémas UDT à l'aide de GetSchema

La méthode GetSchema de SqlConnection retourne les informations de schéma de base de données dans un objet DataTable. Pour plus d'informations, consultez Collections de schémas SQL Server (ADO.NET).

Valeurs de colonne GetSchemaTable Column pour les UDT

La méthode GetSchemaTable d'un objet SqlDataReader retourne un objet DataTable qui décrit les métadonnées des colonnes. Le tableau suivant décrit les différences dans les métadonnées des colonnes pour les UDT volumineux entre SQL Server 2005 et SQL Server 2008.

Colonne SqlDataReader

SQL Server 2005

SQL Server 2008

ColumnSize

Variable

Variable

NumericPrecision

255

255

NumericScale

255

255

DataType

Byte[]

Instance UDT

ProviderSpecificDataType

SqlTypes.SqlBinary

Instance UDT

ProviderType

21 (SqlDbType.VarBinary)

29 (SqlDbType.Udt)

NonVersionedProviderType

29 (SqlDbType.Udt)

29 (SqlDbType.Udt)

DataTypeName

SqlDbType.VarBinary

Nom en trois parties spécifié sous la forme Database.SchemaName.TypeName.

IsLong

Variable

Variable

Considérations relatives à SqlDataReader

L'objet SqlDataReader a été étendu dans SQL Server 2008 pour prendre en charge la récupération des valeurs UDT volumineuses. La manière dont un [SqlDataReader] traite les valeurs UDT volumineuses par dépend de la version de SQL Server que vous utilisez, ainsi que du Type System Version spécifié dans la chaîne de connexion. Pour plus d'informations, consultez la section « Modifications de la version de système de type » dans Nouvelles fonctionnalités de SQL Server 2008 (ADO.NET).

Les méthodes suivantes de SqlDataReader retournent un objet SqlBinary au lieu d'une instance UDT dans les versions antérieures de SQL Server, ou lorsque le Type System Version ne spécifie pas SQL Server 2008 :

Les méthodes suivantes retournent un tableau de Byte[] au lieu d'une instance UDT dans les versions antérieures de SQL Server, ou lorsque le Type System Version ne spécifie pas SQL Server 2008 :

Notez qu'aucune conversion n'est effectuée pour la version actuelle d'ADO.NET.

Spécification de SqlParameters

Les propriétés SqlParameter suivantes ont été étendues pour fonctionner avec des UDT volumineux.

Propriété SqlParameter

Description

Value

Obtient ou définit un objet qui représente la valeur du paramètre. La valeur par défaut est null. La propriété peut être de type SqlBinary, Byte[] ou un objet managé.

SqlValue

Obtient ou définit un objet qui représente la valeur du paramètre. La valeur par défaut est null. La propriété peut être de type SqlBinary, Byte[] ou un objet managé.

Size

Obtient ou définit la taille de la valeur de paramètre à résoudre. La valeur par défaut est 0. La propriété peut être un nombre entier qui représente la taille de la valeur de paramètre. Pour les UDT volumineux, il peut s'agir de la taille réelle de l'UDT ou -1 pour inconnu.

Exemple d'extraction de données

Le fragment de code suivant montre comment extraire des données UDT volumineuses. La variable connectionString suppose une connexion valide à une base de données SQL Server, et la variable commandString suppose une instruction SELECT valide avec la colonne de clé primaire apparaissant en premier.

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

Voir aussi

Concepts

Configuration des paramètres et des types de données de paramètre (ADO.NET)

Mappages de types de données SQL Server (ADO.NET)

Autres ressources

Récupération d'informations de schéma de base de données (ADO.NET)

Données binaires et de valeur élevée SQL Server (ADO.NET)