Condividi tramite


Mapping dei dati dei parametri CLR

Nella tabella seguente sono elencati i tipi di dati Microsoft SQL Server, gli equivalenti in Common Language Runtime (CLR) per SQL Server nello spazio dei nomi System.Data.SqlTypes e gli equivalenti CLR nativi in Microsoft .NET Framework.

Tipo di dati SQL Server

Tipo (in System.Data.SqlTypes o Microsoft.SqlServer.Types)

Tipo di dati CLR (.NET Framework)

bigint

SqlInt64

Int64, Nullable<Int64>

binary

SqlBytes, SqlBinary

Byte[]

bit

SqlBoolean

Boolean, Nullable<Boolean>

char

Nessuno

Nessuno

cursor

Nessuno

Nessuno

date

SqlDateTime

DateTime, Nullable<DateTime>

datetime

SqlDateTime

DateTime, Nullable<DateTime>

datetime2

Nessuno

DateTime, Nullable<DateTime>

DATETIMEOFFSET

None

DateTimeOffset, Nullable<DateTimeOffset>

decimal

SqlDecimal

Decimal, Nullable<Decimal>

float

SqlDouble

Double, Nullable<Double>

geography

SqlGeography

SqlGeography è definito in Microsoft.SqlServer.Types.dll, che viene installato con SQL Server e che è possibile scaricare dal feature pack di SQL Server 2008.

Nessuno

geometry

SqlGeometry

SqlGeometry è definito in Microsoft.SqlServer.Types.dll, la cui installazione viene eseguita con SQL Server e che è possibile scaricare dal Feature Pack di SQL Server 2008.

Nessuno

hierarchyid

SqlHierarchyId

SqlHierarchyId è definito in Microsoft.SqlServer.Types.dll, la cui installazione viene eseguita con SQL Server e che è possibile scaricare dal Feature Pack di SQL Server 2008.

Nessuno

image

Nessuno

Nessuno

int

SqlInt32

Int32, Nullable<Int32>

money

SqlMoney

Decimal, Nullable<Decimal>

nchar

SqlChars, SqlString

String, Char[]

ntext

Nessuno

Nessuno

numeric

SqlDecimal

Decimal, Nullable<Decimal>

nvarchar

SqlChars, SqlString

SQLChars rappresenta la soluzione migliore per il trasferimento dei dati e l'accesso ai dati, mentre SQLString è preferibile per l'esecuzione di operazioni di stringa.

String, Char[]

nvarchar(1), nchar(1)

SqlChars, SqlString

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

real

SqlSingle

Single, Nullable<Single>

rowversion

Nessuno

Byte[]

smallint

SqlInt16

Int16, Nullable<Int16>

smallmoney

SqlMoney

Decimal, Nullable<Decimal>

sql_variant

Nessuno

Object

table

Nessuno

Nessuno

text

Nessuno

Nessuno

time

Nessuno

TimeSpan, Nullable<TimeSpan>

timestamp

Nessuno

Nessuno

tinyint

SqlByte

Byte, Nullable<Byte>

uniqueidentifier

SqlGuid

Guid, Nullable<Guid>

User-defined type(UDT)

Nessuno

La stessa classe associata al tipo definito dall'utente nello stesso assembly o un assembly dipendente.

varbinary

SqlBytes, SqlBinary

Byte[]

varbinary(1), binary(1)

SqlBytes, SqlBinary

byte, Byte[], Nullable<byte>

varchar

Nessuno

Nessuno

xml

SqlXml

Nessuno

Conversione automatica dei tipi di dati con parametri Out

Un metodo CLR può restituire informazioni al codice o programma chiamante contrassegnando un parametro di input con il modificatore out (Microsoft Visual C#) o <Out()> ByRef (Microsoft Visual Basic). Se il parametro di input è un tipo di dati CLR nello spazio dei nomi System.Data.SqlTypes e il programma chiamante ne specifica il tipo di dati SQL Server equivalente come parametro di input, una conversione dei tipi avviene automaticamente quando il metodo CLR restituisce il tipo di dati.

La stored procedure CLR seguente, ad esempio, include un parametro di input dei dati CLR SqlInt32 contrassegnato da out (C#) o <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

Dopo che l'assembly è stato compilato e creato nel database, la stored procedure viene creata in SQL Server con l'istruzione Transact-SQL seguente che specifica un tipo dei dati SQL Server di int come parametro OUTPUT:

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

Quando la stored procedure CLR viene chiamata, il tipo di dati SqlInt32 viene convertito automaticamente in un tipo di dati int e restituito al programma chiamante.

Non tutti i tipi di dati CLR possono essere convertiti automaticamente nei tipi dei dati SQL Server equivalenti tramite un parametro out. Nella seguente tabella vengono descritte queste eccezioni.

Tipo di dati CLR (SQL Server)

Tipo di dati SQL Server

Decimal

smallmoney

SqlMoney

smallmoney

Decimal

money

DateTime

smalldatetime

SQLDateTime

smalldatetime