Condividi tramite


Eseguire il mapping dei dati dei parametri CLR

Si applica a:SQL Server

La tabella seguente elenca i tipi di dati di SQL Server, i relativi equivalenti in Common Language Runtime (CLR) per SQL Server nello spazio dei nomi System.Data.SqlTypes e i relativi equivalenti CLR nativi in .NET Framework.

Tipo di dati di 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 None None
cursor None None
date SqlDateTime DateTime, Nullable<DateTime>
datetime SqlDateTime DateTime, Nullable<DateTime>
datetime2 None DateTime, Nullable<DateTime>
datetimeoffset None DateTimeOffset, Nullable<DateTimeOffset>
decimal SqlDecimal Decimal, Nullable<Decimal>
float SqlDouble Double, Nullable<Double>
geography SqlGeography 1 None
geometry SqlGeometry 1 None
hierarchyid SqlHierarchyId 1 None
Immagine None None
int SqlInt32 Int32, Nullable<Int32>
money SqlMoney Decimal, Nullable<Decimal>
nchar SqlChars, SqlString String, Char[]
ntext None None
numeric SqlDecimal Decimal, Nullable<Decimal>
nvarchar SqlChars, SqlString

SQLChars è una corrispondenza migliore per il trasferimento e l'accesso ai dati e SQLString è una corrispondenza migliore per l'esecuzione di operazioni String.
String, Char[]
nvarchar(1), nchar(1) SqlChars, SqlString Char, String, Char[], Nullable<char>
real SqlSingle (tuttavia, l'intervallo di SqlSingle è maggiore di reale) Single, Nullable<Single>
rowversion None Byte[]
smallint SqlInt16 Int16, Nullable<Int16>
smallmoney SqlMoney Decimal, Nullable<Decimal>
sql_variant None Object
table None None
Testo None None
time None TimeSpan, Nullable<TimeSpan>
timestamp None None
tinyint SqlByte Byte, Nullable<Byte>
uniqueidentifier SqlGuid Guid, Nullable<Guid>
Tipo definito dall'utente (UDT) None La stessa classe associata al tipo definito dall'utente (UDT) nello stesso assembly o un assembly dipendente.
varbinary SqlBytes, SqlBinary Byte[]
varbinary(1), binary(1) SqlBytes, SqlBinary byte, Byte[], Nullable<byte>
varchar None None
xml SqlXml None

1 Definito in Microsoft.SqlServer.Types.dll, installato con SQL Server e può essere scaricato dal Feature Pack di SQL Server .

Conversione automatica dei tipi di dati con parametri di output

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

Ad esempio, la stored procedure CLR seguente ha un parametro di input di SqlInt32 tipo di dati CLR contrassegnato con out (C#) o <Out()> ByRef (Visual Basic):

[Microsoft.SqlServer.Server.SqlProcedure]
public static void PriceSum(out SqlInt32 value)
{ ... }

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

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

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

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

Tipo di dati CLR (SQL Server) Tipo di dati di SQL Server
Decimal smallmoney
SqlMoney smallmoney
Decimal money
DateTime smalldatetime
SQLDateTime smalldatetime