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 |