Partage via


Mapper les données des paramètres CLR

S'applique à :SQL Server

Le tableau suivant répertorie les types de données 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 le .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 Aucun(e) Aucun(e)
cursor Aucun(e) Aucun(e)
date SqlDateTime DateTime, Nullable<DateTime>
datetime SqlDateTime DateTime, Nullable<DateTime>
datetime2 Aucun(e) DateTime, Nullable<DateTime>
datetimeoffset None DateTimeOffset, Nullable<DateTimeOffset>
decimal SqlDecimal Decimal, Nullable<Decimal>
float SqlDouble Double, Nullable<Double>
Geography SqlGeography 1 Aucun(e)
geometry SqlGeometry 1 Aucun(e)
hierarchyid SqlHierarchyId 1 Aucun(e)
image Aucun(e) Aucun(e)
int SqlInt32 Int32, Nullable<Int32>
money SqlMoney Decimal, Nullable<Decimal>
nchar SqlChars, SqlString String, Char[]
ntext Aucun(e) Aucun(e)
numeric SqlDecimal Decimal, Nullable<Decimal>
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 de String.
String, Char[]
nvarchar(1), nchar(1) SqlChars, SqlString Char, String, Char[], Nullable<char>
real SqlSingle (cependant, la plage de SqlSingle est supérieure à réelle) Single, Nullable<Single>
rowversion Aucun(e) Byte[]
smallint SqlInt16 Int16, Nullable<Int16>
smallmoney SqlMoney Decimal, Nullable<Decimal>
sql_variant Aucun(e) Object
table Aucun(e) Aucun(e)
texte Aucun(e) Aucun(e)
time Aucun(e) TimeSpan, Nullable<TimeSpan>
timestamp Aucun(e) Aucun(e)
tinyint SqlByte Byte, Nullable<Byte>
uniqueidentifier SqlGuid Guid, Nullable<Guid>
Type défini par l’utilisateur (UDT) Aucun(e) 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[], Nullable<byte>
varchar Aucun(e) Aucun(e)
xml SqlXml Aucun(e)

1 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 .

Conversion automatique du type de données avec des 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 (C#) ou <Out()> ByRef (Visual Basic .NET). 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 type de données SQL Server équivalent comme 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 SqlInt32 type de données CLR marqué avec out (C#) ou <Out()> ByRef (Visual Basic) :

  • C#
  • Visual Basic .NET
[Microsoft.SqlServer.Server.SqlProcedure]
public static void PriceSum(out SqlInt32 value)
{ ... }

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 code 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 un 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
Decimal smallmoney
SqlMoney smallmoney
Decimal money
DateTime smalldatetime
SQLDateTime smalldatetime