CLR パラメータ データのマッピング
次の表は、MicrosoftSQL Server データ型と、それぞれに対応する System.Data.SqlTypes 名前空間の SQL Server CLR (共通言語ランタイム) データ型および Microsoft .NET Framework のネイティブ CLR データ型を示します。
SQL Server データ型 |
CLR データ型 (SQL Server) |
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 |
SqlDateTime |
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 |
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 |
変更履歴
変更内容 |
---|
マッピング テーブルに SqlGeography 型、SqlGeometry 型、および SqlHierarchyId 型を追加しました。 |