Langue

UDT volumineux

Les types définis par l’utilisateur (UDT) permettent au 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 avoir des comportements, contrairement aux types de données alias traditionnels, qui ne comprennent qu’un seul type de données système SQL Server.

Note

Pour l’accès du client aux grands UDT, installez le package NuGet Microsoft.Data.SqlClient et importez Microsoft.Data.SqlClient. Les types CLR SQL qui définissent l'UDT côté serveur restent dans Microsoft.SqlServer.Server; ne remplacez pas ces types par les types de fournisseur client.

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

Pour obtenir la documentation complète sur les types définis par l’utilisateur, consultez Types CLR définis par l’utilisateur.

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

La GetSchema méthode retourne des informations de schéma de base de données dans l’objet DataTable . Pour plus d’informations, consultez Collections de schémas SQL Server.

Valeurs de colonne GetSchemaTable Column pour les UDT

La GetSchemaTable méthode retourne les métadonnées de colonne dans l’objet DataTable . La table suivante décrit les différences dans les métadonnées de colonne pour les UDT volumineux entre SQL Server 2005 et SQL Server 2008.

Colonne de SqlDataReader SQL Server 2005 SQL Server 2008 et versions ultérieures
ColumnSize Variable Variable
NumericPrecision 2:55 2:55
NumericScale 2:55 2:55
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

La SqlDataReader classe prend en charge les valeurs UDT volumineuses dans SQL Server 2008 et versions ultérieures. La façon dont le lecteur traite ces valeurs dépend de la version de SQL Server et de la Type System Versionchaîne de connexion. Pour plus d’informations, consultez ConnectionString.

Quand Type System Version est SQL Server 2005, les méthodes SqlDataReader suivantes utilisent la représentation binaire des grands UDT :

Pour le même paramètre de système de type, GetValue retourne la valeur UDT volumineuse en tant que Byte[]. GetValues remplit le tableau fourni avec des valeurs de colonne et retourne le nombre d’éléments renseignés. Les valeurs UDT volumineuses dans ce tableau utilisent Byte[].

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

Spécification de SqlParameters

Les propriétés suivantes SqlParameter prennent en charge les UDT volumineux.

Propriété SqlParameter Descriptif
Value Obtient ou définit un objet représentant la valeur du paramètre. La valeur par défaut est null. La propriété peut être SqlBinary, Byte[] ou un objet managé.
SqlValue Obtient ou définit un objet représentant la valeur du paramètre. La valeur par défaut est null. La propriété peut être SqlBinary, Byte[] ou un objet managé.
Size Obtient ou définit la taille de la valeur du paramètre à résoudre. La valeur par défaut est 0. La propriété peut être un entier qui représente la taille de la valeur du paramètre. Pour les UDT volumineux, elle peut être la taille réelle de l’UDT, ou -1 pour inconnu.

Exemple d'extraction de données

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

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

Voir aussi