Freigeben über


Zuordnen von CLR-Parameterdaten

Gilt für:SQL Server

In der folgenden Tabelle sind SQL Server-Datentypen, ihre Entsprechungen in der Common Language Runtime (CLR) für SQL Server im System.Data.SqlTypes-Namespace und deren native CLR-Entsprechungen im .NET Framework aufgeführt.

SQL Server-Datentyp Typ (in System.Data.SqlTypes oder Microsoft.SqlServer.Types) CLR-Datentyp (.NET Framework)
bigint SqlInt64 Int64, Nullable<Int64>
binary SqlBytes, SqlBinary Byte[]
bit SqlBoolean Boolean, Nullable<Boolean>
char Keine Keine
Cursor Keine Keine
date SqlDateTime DateTime, Nullable<DateTime>
datetime SqlDateTime DateTime, Nullable<DateTime>
datetime2 Keine DateTime, Nullable<DateTime>
datetimeoffset- None DateTimeOffset, Nullable<DateTimeOffset>
decimal SqlDecimal Decimal, Nullable<Decimal>
float SqlDouble Double, Nullable<Double>
geography SqlGeography 1 Keine
geometry SqlGeometry 1 Keine
hierarchyid SqlHierarchyId 1 Keine
Abbildung Keine Keine
int SqlInt32 Int32, Nullable<Int32>
money SqlMoney Decimal, Nullable<Decimal>
nchar SqlChars, SqlString String, Char[]
ntext Keine Keine
numeric SqlDecimal Decimal, Nullable<Decimal>
nvarchar SqlChars, SqlString

SQLChars ist eine bessere Übereinstimmung für die Datenübertragung und den Zugriff, und SQLString ist eine bessere Übereinstimmung für die Ausführung von String Vorgängen.
String, Char[]
nvarchar(1), nchar(1) SqlChars, SqlString Char, String, Char[], Nullable<char>
real SqlSingle (der Bereich der SqlSingle ist jedoch größer als reale) Single, Nullable<Single>
rowversion Keine Byte[]
smallint SqlInt16 Int16, Nullable<Int16>
smallmoney SqlMoney Decimal, Nullable<Decimal>
sql_variant Keine Object
Tabelle Keine Keine
text Keine Keine
time Keine TimeSpan, Nullable<TimeSpan>
timestamp Keine Keine
tinyint SqlByte Byte, Nullable<Byte>
uniqueidentifier SqlGuid Guid, Nullable<Guid>
Benutzerdefinierter Typ (UDT) Keine 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 Keine Keine
xml SqlXml Keine

1 Definiert in Microsoft.SqlServer.Types.dll, das mit SQL Server installiert ist und aus dem SQL Server Feature Packheruntergeladen werden kann.

Automatische Datentypkonvertierung mit Ausgabeparametern

Eine CLR-Methode kann Informationen an den aufrufenden Code oder das Programm zurückgeben, indem sie einen Eingabeparameter mit dem out Modifizierer (C#) oder <Out()> ByRef (Visual Basic .NET) markieren. Wenn der Eingabeparameter ein CLR-Datentyp im System.Data.SqlTypes-Namespace ist und das aufrufende Programm den entsprechenden SQL Server-Datentyp als Eingabeparameter angibt, tritt automatisch eine Typkonvertierung auf, wenn die CLR-Methode den Datentyp zurückgibt.

Die folgende gespeicherte CLR-Prozedur verfügt beispielsweise über einen Eingabeparameter SqlInt32 CLR-Datentyps, der mit out (C#) oder <Out()> ByRef (Visual Basic) gekennzeichnet ist:

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

Nachdem die Assembly in der Datenbank erstellt und erstellt wurde, wird die gespeicherte Prozedur in SQL Server mit dem folgenden Transact-SQL-Code erstellt, der einen SQL Server-Datentyp von int als OUTPUT-Parameter angibt:

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

Wenn die gespeicherte CLR-Prozedur aufgerufen wird, wird der SqlInt32 Datentyp automatisch in einen int Datentyp konvertiert und an das aufrufende Programm zurückgegeben.

Nicht alle CLR-Datentypen können über einen out Parameter automatisch 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