Langue
Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 :
- GetProviderSpecificFieldType retourne l’objet Type pour SqlBinary.
- GetProviderSpecificValue et GetSqlValue renvoient des valeurs SqlBinary.
- GetProviderSpecificValues et GetSqlValues remplissent le tableau fourni avec des valeurs de colonne spécifiques au fournisseur et retournent le nombre d’éléments renseignés. Les valeurs UDT volumineuses dans ce tableau utilisent SqlBinary.
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