データ型の扱い

S2ADO.NETの場合

.NET 1.1までの基本 .NET Framework データ型(int, decimalなど)では、nullを代入するとキャスト例外が発生します。
そのため、S2Container.NETのS2ADO.NETでは、
データベースのデータ取得時にDBNullの値が戻ってくる場合、
nullを代入できるデータ型を定義します。

  • NHibernateContribのNullables型
  • System.Data.SqlTypes
  • System.Nullable (.NET 2.0以降 and S2Container.NET 1.2以降)

例えば、データベースのデータ型がBIGINTの場合、

  • Nullables.NullableInt64
  • System.Data.SqlTypes.SqlInt64
  • System.Nullable

を変数のデータ型に定義します。

S2Unit.NETの場合

S2Unit.NETにはオブジェクトをDataSetと比較する機能があります。
このとき、オブジェクトをDataSetに変換して比較しています。
DataColumn.DataTypeにSystem.Nullableを指定できないため
(System.Data.SqlTypesは.NET 2.0から指定可能らしい)
nullを代入できるデータ型が対応している基本 .NET Framework データ型を使用します。
値がnullの場合、DBNull.Valueを代入します。

このとき、数値型では情報が失われたり例外が発生する可能性があります。
例えば、System.Data.SqlTypes.SqlDecimalの精度は38桁ですがdecimalの精度は28桁のため
SqlDecimalからdecimalに変換するとOverflowExceptionが発生します。

同様に、S2Unit.NETのExcelデータ読込み機能では、Excelの数値型の有効桁数が15桁のため、
Excelファイルの読み書き時に情報が失われたり例外が発生する可能性があります。
※S2Container.Javaだと15桁を超えてもいけたかも…

IDENTITYを使っていると15桁を超えそうですねぇ。