Zuordnen von CLR-Parameterdaten
In der folgenden Tabelle sind die MicrosoftSQL Server-Datentypen, ihre Entsprechungen in CLR (Common Language Runtime) für SQL Server im System.Data.SqlTypes-Namespace und ihre systemeigenen CLR-Entsprechungen in Microsoft .NET Framework aufgeführt.
SQL Server-Datentyp |
CLR-Datentyp (SQL Server) |
CLR-Datentyp (.NET Framework) |
bigint |
SqlInt64 |
Int64, Nullable<Int64> |
binary |
SqlBytes, SqlBinary |
Byte[] |
bit |
SqlBoolean |
Boolean, Nullable<Boolean> |
char |
Nicht vorhanden |
Nicht vorhanden |
cursor |
Nicht vorhanden |
Nicht vorhanden |
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 ist in der zusammen mit SQL Server installierten Bibliothek Microsoft.SqlServer.Types.dll definiert und kann über das SQL Server 2008 Feature Pack heruntergeladen werden. |
Nicht vorhanden |
geometry |
SqlGeometry SqlGeometry ist in der zusammen mit SQL Server installierten Bibliothek Microsoft.SqlServer.Types.dll definiert und kann über das SQL Server 2008 Feature Pack heruntergeladen werden. |
Nicht vorhanden |
hierarchyid |
SqlHierarchyId SqlHierarchyId ist in der zusammen mit SQL Server installierten Bibliothek Microsoft.SqlServer.Types.dll definiert und kann über das SQL Server 2008 Feature Pack heruntergeladen werden. |
Nicht vorhanden |
image |
Nicht vorhanden |
Nicht vorhanden |
int |
SqlInt32 |
Int32, Nullable<Int32> |
money |
SqlMoney |
Decimal, Nullable<Decimal> |
nchar |
SqlChars, SqlString |
String, Char[] |
ntext |
Nicht vorhanden |
Nicht vorhanden |
numeric |
SqlDecimal |
Decimal, Nullable<Decimal> |
nvarchar |
SqlChars, SqlString SQLChars ist für Datenübertragungen und den Datenzugriff eine bessere Entsprechung, SQLString ist für die Durchführung von Zeichenfolgenoperationen eine bessere Entsprechung. |
String, Char[] |
nvarchar(1), nchar(1) |
SqlChars, SqlString |
Char, String, Char[], Nullable<char> |
real |
SqlSingle |
Single, Nullable<Single> |
rowversion |
Nicht vorhanden |
Byte[] |
smallint |
SqlInt16 |
Int16, Nullable<Int16> |
smallmoney |
SqlMoney |
Decimal, Nullable<Decimal> |
sql_variant |
Nicht vorhanden |
Object |
table |
Nicht vorhanden |
Nicht vorhanden |
text |
Nicht vorhanden |
Nicht vorhanden |
time |
TimeSpan |
TimeSpan, Nullable<TimeSpan> |
timestamp |
Nicht vorhanden |
Nicht vorhanden |
tinyint |
SqlByte |
Byte, Nullable<Byte> |
uniqueidentifier |
SqlGuid |
Guid, Nullable<Guid> |
User-defined type(UDT) |
Nicht vorhanden |
Dieselbe Klasse, die in derselben Assembly oder einer abhängigen Assembly an den benutzerdefinierten Typ gebunden ist |
varbinary |
SqlBytes, SqlBinary |
Byte[] |
varbinary(1), binary(1) |
SqlBytes, SqlBinary |
byte, Byte[], Nullable<byte> |
varchar |
Nicht vorhanden |
Nicht vorhanden |
xml |
SqlXml |
Nicht vorhanden |
Automatische Datentypkonvertierung mit Out-Parametern
Eine CLR-Methode kann Informationen an den aufrufenden Code oder das aufrufende Programm zurückgeben, indem sie einen Eingabeparameter mit dem out-Modifizierer (Microsoft Visual C#) oder <Out()> ByRef (Microsoft Visual Basic) markiert. Wenn der Eingabeparameter ein CLR-Datentyp im System.Data.SqlTypes-Namespace ist und ein aufrufendes Programm seinen entsprechenden SQL Server-Datentyp als Eingabeparameter angibt, wird automatisch eine Typkonvertierung durchgeführt, wenn die CLR-Methode den Datentyp zurückgibt.
Beispielsweise verfügt die folgende CLR-gespeicherte Prozedur über einen Eingabeparameter von SqlInt32 und einen CLR-Datentyp, der mit out (C#) oder <Out()> ByRef (Visual Basic) markiert ist:
[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
Nachdem die Assembly in der Datenbank erstellt wurde, wird die gespeicherte Prozedur in SQL Server mit dem folgenden Transact-SQL erstellt, das einen SQL Server-Datentyp von int als einen OUTPUT-Parameter angibt:
CREATE PROCEDURE PriceSum (@sum int OUTPUT)
AS EXTERNAL NAME TestStoredProc.StoredProcedures.PriceSum
Wenn die CLR-gespeicherte Prozedur aufgerufen wird, wird der SqlInt32-Datentyp automatisch in einen int-Datentyp konvertiert und an das aufrufende Programm zurückgegeben.
Allerdings können nicht alle CLR-Datentypen automatisch durch einen Out-Parameter in ihre entsprechenden SQL Server-Datentypen konvertiert werden. In der folgenden Tabelle werden diese Ausnahmen aufgeführt.
CLR-Datentyp (SQL Server) |
SQL Server-Datentyp |
Decimal |
smallmoney |
SqlMoney |
smallmoney |
Decimal |
money |
DateTime |
smalldatetime |
SQLDateTime |
smalldatetime |
Änderungsverlauf
Aktualisierter Inhalt |
---|
Der Zuordnungstabelle wurden die Typen SqlGeography, SqlGeometry und SqlHierarchyId hinzugefügt. |