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.

Siehe auch

Andere Ressourcen