Mapping dei dati dei parametri CLR
Si applica a: SQL Server
La tabella seguente elenca i tipi di dati di Microsoft 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 Microsoft .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, Boolean Nullable<> |
char | None | None |
cursor | None | None |
date | SqlDateTime | DateTime, Nullable<DateTime> |
datetime | SqlDateTime | DateTime, Nullable<DateTime> |
datetime2 | None | DateTime, Nullable<DateTime> |
DATETIMEOFFSET | Nessuno | DateTimeOffset, Nullable<DateTimeOffset> |
decimal | SqlDecimal | Decimal, Decimalable<Decimal> |
float | SqlDouble | Double, Nullable<Double> |
geography | SqlGeography SqlGeography è definito in Microsoft.SqlServer.Types.dll, installato con SQL Server e può essere scaricato dal Feature Pack di SQL Server. |
None |
geometry | SqlGeometry SqlGeometry è definito in Microsoft.SqlServer.Types.dll, installato con SQL Server e può essere scaricato dal Feature Pack di SQL Server. |
None |
hierarchyid | SqlHierarchyId SqlHierarchyId è definito in Microsoft.SqlServer.Types.dll, installato con SQL Server e può essere scaricato dal Feature Pack di SQL Server. |
None |
Immagine | None | None |
int | SqlInt32 | Int32, Nullable<Int32> |
money | SqlMoney | Decimal, Decimalable<Decimal> |
nchar | SqlChars, SqlString | String, Char[] |
ntext | None | None |
numeric | SqlDecimal | Decimal, Decimalable<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 stringhe. |
String, Char[] |
nvarchar(1), nchar(1) | SqlChars, SqlString | Char, String, Char[], Nullable<char> |
real | SqlSingle (l'intervallo di SqlSingle, tuttavia, è maggiore di real) | Single, Nullable<Single> |
rowversion | None | Byte[] |
smallint | SqlInt16 | Int16, Nullable<Int16> |
smallmoney | SqlMoney | Decimal, Decimalable<Decimal> |
sql_variant | None | Oggetto |
table | None | None |
Testo | None | None |
time | None | TimeSpan, Intervallo di tempo nullable<> |
timestamp | None | None |
tinyint | SqlByte | Byte, Byte nullable<> |
uniqueidentifier | SqlGuid | Guid, Guid Nullable<> |
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[], byte nullable<byte> |
varchar | None | None |
xml | SqlXml | None |
Conversione automatica dei tipi di dati con parametri Out
Un metodo CLR può restituire informazioni al codice o al 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 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 del tipo di dati CLR SqlInt32 contrassegnato con 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 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 tipo di dati int 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 |
---|---|
Decimale | smallmoney |
SqlMoney | smallmoney |
Decimale | money |
DateTime | smalldatetime |
SQLDateTime | smalldatetime |
Cronologia delle modifiche
Contenuto aggiornato |
---|
Sono stati aggiunti tipi SqlGeography, SqlGeometry e SqlHierarchyId alla tabella di mapping. |