UDT volumineux dans SQL Server 2008 (ADO.NET)
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 |
---|---|
Récupération de schémas UDT à l'aide de GetSchema
La méthode GetSchema de SqlConnection retourne les informations de schéma de la 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 |
---|---|
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é. |
|
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é. |
|
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)