Mappage des données de paramètres CLR

S’applique à :SQL Server

Le tableau suivant répertorie les types de données Microsoft SQL Server, leurs équivalents dans le Common Language Runtime (CLR) pour SQL Server dans l’espace de noms System.Data.SqlTypes et leurs équivalents CLR natifs dans Microsoft .NET Framework.

Type de données SQL Server Type (dans System.Data.SqlTypes ou Microsoft.SqlServer.Types) Type de données CLR (.NET Framework)
bigint SqlInt64 Int64, Nullable<Int64>
binary SqlBytes, SqlBinary Byte[]
bit SqlBoolean Boolean, Nullable<Boolean>
char None None
cursor None None
date SqlDateTime DateTime, DateTime nullable<>
datetime SqlDateTime DateTime, DateTime nullable<>
datetime2 None DateTime, DateTime nullable<>
DATETIMEOFFSET Aucun DateTimeOffset, DateTimeOffset nullable<>
decimal Sqldecimal Décimal, décimal nullable<>
float Sqldouble.op_implicit Double, Nullable<Double>
Geography SqlGeography

SqlGeography est défini dans Microsoft.SqlServer.Types.dll, qui est installé avec SQL Server et peut être téléchargé à partir du feature pack SQL Server.
None
geometry SqlGeometry

SqlGeometry est défini dans Microsoft.SqlServer.Types.dll, qui est installé avec SQL Server et peut être téléchargé à partir du feature pack SQL Server.
None
hierarchyid SqlHierarchyId

SqlHierarchyId est défini dans Microsoft.SqlServer.Types.dll, qui est installé avec SQL Server et peut être téléchargé à partir du pack de fonctionnalités SQL Server.
None
image None None
int SqlInt32 Int32, Nullable<Int32>
money SqlMoney Décimal, décimal nullable<>
nchar SqlChars, SqlString String, Char[]
ntext None None
numeric SqlDecimal Décimal, décimal nullable<>
nvarchar SqlChars, SqlString

SQLChars est une meilleure correspondance pour le transfert et l’accès aux données, et SQLString est une meilleure correspondance pour effectuer des opérations string.
String, Char[]
nvarchar(1), nchar(1) SqlChars, SqlString Char, String, Char[], Nullable<char>
real SqlSingle (la plage de SqlSingle, cependant, est plus grande que réelle) Single, Nullable<Single>
rowversion None Byte[]
smallint SqlInt16 Int16, Nullable<Int16>
smallmoney SqlMoney Décimal, décimal nullable<>
sql_variant None Object
table None None
text None None
time None TimeSpan, TimeSpan nullable<>
timestamp None None
tinyint SqlByte Octet, octet nullable<>
uniqueidentifier SqlGuid Guid, Guid pouvant avoir une valeur<Null>
Type défini par l’utilisateur (UDT) None La même classe liée au type défini par l'utilisateur dans le même assembly ou un assembly dépendant.
varbinary SqlBytes, SqlBinary Byte[]
varbinary(1), binary(1) SqlBytes, SqlBinary byte, Byte[], Octet Nullable<>
varchar None None
xml Sqlxml None

Conversion automatique de types de données avec les paramètres de sortie

Une méthode CLR peut retourner des informations au code ou au programme appelant en marquant un paramètre d’entrée avec le modificateur out (Microsoft Visual C#) ou <Out()> ByRef (Microsoft Visual Basic) Si le paramètre d’entrée est un type de données CLR dans l’espace de noms System.Data.SqlTypes et que le programme appelant spécifie son équivalent SQL Server type de données en tant que paramètre d’entrée, une conversion de type se produit automatiquement lorsque la méthode CLR retourne le type de données.

Par exemple, la procédure stockée CLR suivante a un paramètre d’entrée de type de données SQLInt32 CLR marqué avec out (C#) ou <Out()> ByRef (Visual Basic) :

[Microsoft.SqlServer.Server.SqlProcedure]  
public static void PriceSum(out SqlInt32 value)  
{ ... }  
\<Microsoft.SqlServer.Server.SqlProcedure> _  
Public Shared Sub PriceSum( \<Out()> ByRef value As SqlInt32)  
...  
End Sub  

Une fois l’assembly généré et créé dans la base de données, la procédure stockée est créée dans SQL Server avec le transact-SQL suivant, qui spécifie un type de données SQL Server int en tant que paramètre OUTPUT :

CREATE PROCEDURE PriceSum (@sum int OUTPUT)  
AS EXTERNAL NAME TestStoredProc.StoredProcedures.PriceSum  

Lorsque la procédure stockée CLR est appelée, le type de données SqlInt32 est automatiquement converti en type de données int et retourné au programme appelant.

Toutefois, tous les types de données CLR ne peuvent pas être convertis automatiquement en types de données SQL Server équivalents via un paramètre out. Le tableau suivant répertorie ces exceptions.

Type de données CLR (SQL Server) Type de données SQL Server
Décimal SMALLMONEY
SqlMoney SMALLMONEY
Décimal money
DateTime smalldatetime
SQLDateTime smalldatetime

Historique des modifications

Mise à jour du contenu
Ajout des types SqlGeography, SqlGeometry et SqlHierarchyId à la table de mappage.

Voir aussi

Types de données SQL Server dans le .NET Framework