Zuordnen von CLR-Parameterdaten

In der folgenden Tabelle sind die Microsoft SQL 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

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

Keiner

Keiner

cursor

Keiner

Keiner

date

SqlDateTime

DateTime, Nullable<DateTime>

datetime

SqlDateTime

DateTime, Nullable<DateTime>

datetime2

Keiner

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.

Keine

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.

Keine

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.

Keiner

image

Keiner

Keiner

int

SqlInt32

Int32, Nullable<Int32>

money

SqlMoney

Decimal, Nullable<Decimal>

nchar

SqlChars, SqlString

String, Char[]

ntext

Keiner

Keiner

numeric

SqlDecimal

Decimal, Nullable<Decimal>

nvarchar

SqlChars, SqlString

SQLChars bietet eine bessere Übereinstimmung für Datenübertragungen und Datenzugriff, und SQLString bietet eine bessere Übereinstimmung für die Durchführung von Zeichenfolgenvorgängen.

String, Char[]

nvarchar(1), nchar(1)

SqlChars, SqlString

Char, String, Char[], Nullable<char>

real

SqlSingle

Single, Nullable<Single>

rowversion

Keiner

Byte[]

smallint

SqlInt16

Int16, Nullable<Int16>

smallmoney

SqlMoney

Decimal, Nullable<Decimal>

sql_variant

Keiner

Object

table

Keiner

Keiner

text

Keiner

Keiner

time

Keiner

TimeSpan, Nullable<TimeSpan>

timestamp

Keiner

Keiner

tinyint

SqlByte

Byte, Nullable<Byte>

uniqueidentifier

SqlGuid

Guid, Nullable<Guid>

User-defined type(UDT)

Keiner

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

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

Siehe auch

Andere Ressourcen