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

適用対象:SQL Server

次の表は、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、Null 許容<Int64>
[バイナリ] SqlBytes、SqlBinary Byte[]
bit SqlBoolean Boolean、Null 許容<ブール値>
char なし なし
cursor なし なし
date Sqldatetime DateTime、Null 許容<DateTime>
datetime Sqldatetime DateTime、Null 許容<DateTime>
datetime2 なし DateTime、Null 許容<DateTime>
DATETIMEOFFSET なし DateTimeOffset、Null 許容<DateTimeOffset>
decimal SqlDecimal Decimal、Null 許容<10 進数>
float SqlDouble Double、Null 許容<倍精度浮動小数点型 (Double)>
geography SqlGeography

SqlGeography は、SQL Serverと共にインストールされ、SQL Server機能パックからダウンロードできるMicrosoft.SqlServer.Types.dllで定義されています。
なし
geometry SqlGeometry

SqlGeometry は、SQL Serverと共にインストールされ、SQL Server機能パックからダウンロードできるMicrosoft.SqlServer.Types.dllで定義されています。
なし
hierarchyid SqlHierarchyId

SqlHierarchyId は Microsoft.SqlServer.Types.dll で定義され、SQL Serverと共にインストールされ、SQL Server機能パックからダウンロードできます。
なし
image なし なし
int SqlInt32 Int32、Null 許容<Int32>
money Sqlmoney Decimal、Null 許容<10 進数>
nchar SqlChars、SqlString String, Char[]
ntext なし なし
numeric SqlDecimal Decimal、Null 許容<10 進数>
nvarchar SqlChars、SqlString

SQLChars はデータ転送とアクセスに適しており、 SQLString は文字列操作の実行に適しています。
String, Char[]
nvarchar(1), nchar(1) SqlChars、SqlString Char、String、Char[]、Null 許容<char>
real SqlSingle (ただし、 SqlSingle の範囲は 実際よりも大きい) Single、Nullable<Single>
rowversion なし Byte[]
smallint SqlInt16 Int16、Null 許容<Int16>
smallmoney Sqlmoney Decimal、Null 許容<10 進数>
sql_variant なし Object
テーブル なし なし
text なし なし
time なし TimeSpan、Null 許容<TimeSpan>
timestamp なし なし
tinyint SqlByte Byte、Null 許容<バイト>
uniqueidentifier Sqlguid Guid、Null 許容<Guid>
User-defined type(UDT) なし 同じアセンブリまたは依存アセンブリ内のユーザー定義型にバインドされている同じクラス
varbinary SqlBytes、SqlBinary Byte[]
varbinary(1)、binary(1) SqlBytes、SqlBinary byte、Byte[]、Null 許容<バイト>
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 に作成され、次の Transact-SQL が使用されます。これは、int のSQL Serverデータ型を OUTPUT パラメーターとして指定します。

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

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

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

CLR データ型 (SQL Server) SQL Server のデータ型
10 進数 smallmoney
Sqlmoney smallmoney
10 進数 money
DateTime smalldatetime
Sqldatetime smalldatetime

変更履歴

変更内容
マッピング テーブルに SqlGeographySqlGeometryおよび SqlHierarchyId 型を追加しました。

参照

.NET Framework での SQL Server データ型