CLR パラメーター データのマッピング

次の表は、Microsoft SQL Server データ型と、それぞれに対応する System.Data.SqlTypes 名前空間の SQL Server CLR (共通言語ランタイム) データ型および Microsoft .NET Framework のネイティブ CLR データ型を示します。

SQL Server データ型

型 (System.Data.SqlTypes または Microsoft.SqlServer.Types)

CLR データ型 (.NET Framework)

bigint

SqlInt64

Int64, Nullable<Int64>

binary

SqlBytes, SqlBinary

Byte[]

bit

SqlBoolean

Boolean, Nullable<Boolean>

char

なし

なし

cursor

なし

なし

date

SqlDateTime

DateTime, Nullable<DateTime>

datetime

SqlDateTime

DateTime, Nullable<DateTime>

datetime2

なし

DateTime, Nullable<DateTime>

DATETIMEOFFSET

None

DateTimeOffset, Nullable<DateTimeOffset>

decimal

SqlDecimal

Decimal, Nullable<Decimal>

float

SqlDouble

Double, Nullable<Double>

geography

SqlGeography

SqlGeography は、Microsoft.SqlServer.Types.dll に定義されています。この DLL は、SQL Server と共にインストールされ、SQL Server 2008 用の Feature Pack からダウンロードできます。

なし

geometry

SqlGeometry

SqlGeometry は、Microsoft.SqlServer.Types.dll に定義されています。この DLL は、SQL Server と共にインストールされ、SQL Server 2008 用の Feature Pack からダウンロードできます。

なし

hierarchyid

SqlHierarchyId

SqlHierarchyId は、Microsoft.SqlServer.Types.dll に定義されています。この DLL は、SQL Server と共にインストールされ、SQL Server 2008 用の Feature Pack からダウンロードできます。

なし

image

なし

なし

int

SqlInt32

Int32, Nullable<Int32>

money

SqlMoney

Decimal, Nullable<Decimal>

nchar

SqlChars, SqlString

String, Char[]

ntext

なし

なし

numeric

SqlDecimal

Decimal, Nullable<Decimal>

nvarchar

SqlChars, SqlString

SQLChars はデータの転送とアクセスに適しています。また、SQLString は文字列操作に適しています。

String, Char[]

nvarchar(1), nchar(1)

SqlChars, SqlString

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

real

SqlSingle

Single, Nullable<Single>

rowversion

なし

Byte[]

smallint

SqlInt16

Int16, Nullable<Int16>

smallmoney

SqlMoney

Decimal, Nullable<Decimal>

sql_variant

なし

Object

table

なし

なし

text

なし

なし

time

なし

TimeSpan, Nullable<TimeSpan>

timestamp

なし

なし

tinyint

SqlByte

Byte, Nullable<Byte>

uniqueidentifier

SqlGuid

Guid, Nullable<Guid>

User-defined type(UDT)

なし

同じアセンブリまたは依存アセンブリ内のユーザー定義型にバインドされている同じクラス

varbinary

SqlBytes, SqlBinary

Byte[]

varbinary(1), binary(1)

SqlBytes, SqlBinary

byte, Byte[], Nullable<byte>

varchar

なし

なし

xml

SqlXml

なし

out パラメーターによるデータ型の自動変換

CLR メソッドでは、入力パラメーターを out 修飾子 (Microsoft Visual C#) または <Out()> ByRef (Microsoft Visual Basic) でマークすることにより、呼び出し側のコードまたはプログラムに情報を返すことができます。System.Data.SqlTypes 名前空間での入力パラメーターが CLR データ型で、呼び出し側のプログラムがこれと同等な SQL Server データ型を入力パラメーターとして指定する場合、CLR メソッドがデータ型を返すと、自動的に型の変換が行われます。

たとえば、次の CLR ストアド プロシージャには、out (C#) または <Out()> ByRef (Visual Basic) でマークされている SqlInt32 CLR データ型の入力パラメーターがあります。

   [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

データベースでアセンブリがビルドおよび作成された後、SQL Server では、OUTPUT パラメーターとして int の SQL Server データ型を指定する、次の Transact-SQL によりストアド プロシージャが作成されます。

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

CLR ストアド プロシージャが呼び出されると、SqlInt32 データ型は自動的に int データ型に変換され、呼び出し側のプログラムに返されます。

ただし、out パラメーターにより自動的にすべての CLR データ型を同等な SQL Server データ型に変換できるとは限りません。次の表に、これらの例外を示します。

CLR データ型 (SQL Server)

SQL Server データ型

Decimal

smallmoney

SqlMoney

smallmoney

Decimal

money

DateTime

smalldatetime

SQLDateTime

smalldatetime

関連項目

その他の技術情報