Mappage des données de paramètres CLR

Le tableau suivant dresse la liste des types de données MicrosoftSQL Server, de leurs équivalents dans le CLR pour SQL Server dans l'espace de noms System.Data.SqlTypes et de leurs équivalents de CLR natifs dans le Microsoft.NET Framework.

Type de données SQL Server

Type de données CLR (SQL Server)

Type de données CLR (.NET Framework)

bigint

SqlInt64

Int64, Nullable<Int64>

binary

SqlBytes, SqlBinary

Byte[]

bit

SqlBoolean

Boolean, Nullable<Boolean>

char

Aucun

Aucun

cursor

Aucun

Aucun

date

SqlDateTime

DateTime, Nullable<DateTime>

datetime

SqlDateTime

DateTime, Nullable<DateTime>

datetime2

SqlDateTime

DateTime, Nullable<DateTime>

DATETIMEOFFSET

None

DateTimeOffset, Nullable<DateTimeOffset>

decimal

SqlDecimal

Decimal, Nullable<Decimal>

float

SqlDouble

Double, Nullable<Double>

geography

SqlGeography

SqlGeography est défini dans Microsoft.SqlServer.Types.dll, qui est installée avec SQL Server et peut être téléchargée à partir de la page SQL Server 2008 Feature Pack.

Aucun

geometry

SqlGeometry

SqlGeometry est défini dans Microsoft.SqlServer.Types.dll, qui est installée avec SQL Server et peut être téléchargée à partir de la page SQL Server 2008 Feature Pack.

Aucun

hierarchyid

SqlHierarchyId

SqlHierarchyId est défini dans Microsoft.SqlServer.Types.dll, qui est installée avec SQL Server et peut être téléchargée à partir de la page SQL Server 2008 Feature Pack.

Aucun

image

Aucun

Aucun

int

SqlInt32

Int32, Nullable<Int32>

money

SqlMoney

Decimal, Nullable<Decimal>

nchar

SqlChars, SqlString

String, Char[]

ntext

Aucun

Aucun

numeric

SqlDecimal

Decimal, Nullable<Decimal>

nvarchar

SqlChars, SqlString

SQLChars est une meilleure correspondance pour le transfert de données et leur accès, et SQLString est une meilleure correspondance pour effectuer des opérations sur une chaîne.

String, Char[]

nvarchar(1), nchar(1)

SqlChars, SqlString

Char, String, Char[], Nullable<char>

real

SqlSingle

Single, Nullable<Single>

rowversion

Aucun

Byte[]

smallint

SqlInt16

Int16, Nullable<Int16>

smallmoney

SqlMoney

Decimal, Nullable<Decimal>

sql_variant

Aucun

Object

table

Aucun

Aucun

text

Aucun

Aucun

time

TimeSpan

TimeSpan, Nullable<TimeSpan>

timestamp

Aucun

Aucun

tinyint

SqlByte

Byte, Nullable<Byte>

uniqueidentifier

SqlGuid

Guid, Nullable<Guid>

User-defined type(UDT)

Aucun

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

Aucun

xml

SqlXml

Aucun

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

Une méthode CLR peut retourner des informations au programme ou code 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 de 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 type de données CLR SqlInt32 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

Après que l'assembly a été 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 Serverint comme 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 converti automatiquement en un type de données int et retourné au programme appelant.

Cependant, certains types de données CLR ne peuvent pas être convertis automatiquement en leurs types de données SQL Server équivalents via un paramètre de sortie. 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

Historique des modifications

Mise à jour du contenu

Ajout de types SqlGeography, SqlGeometry et SqlHierarchyId à la table de mappage.