「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
クロスDB対応のポイントをまとめた。
詳細 †
SQL †
以下の様に差異があるため、
クロスDBの際は、
- SQLを外部ファイル化し、
- DBによって参照先のファイルを切り替える
等の方式が良い。
基本的な構文 †
- DELETE FROMのFROMがあるとエラーになるケース
- JOINの構文が異なるケース
- INNER JOINが使えない。
- RIGHT OUTER JOINが使えない。
ヒント †
ストアド・関数 †
- Transact-SQL、PL/SQLなどの
ストアド・関数の定義や手続き記述の構文
データプロバイダ †
インターフェイス †
現ADOであるADO.NETでは、
などと同じくAPIのインターフェイスは、ある程度標準化されている。
切替方式 †
- ベンダ毎に別々のデータプロバイダ(バイナリ)を提供している。
- このため、切替方式は、
- 内部で使用するドライバを切り替えるスタイルではなく、
- 使用するデータプロバイダ(バイナリ)事態を切り替えるスタイル。
- それぞれのデータプロバイダの、名前空間.クラス型が異なるため、
以下に列挙した汎用型等を使用してプログラミングする必要がある。
#若しくは、自前のDB部品等でラッピングする等の対策を取る必要がある。
実装の差異 †
- インターフェイス
そもそも、インターフェイスの非互換がある。
- 型指定、サイズ指定が必須
サイズ指定は渡すデータのサイズではなく
DDLで定義したスキーマのサイズを指定
などがある。
- 標準化されていないスコープや
- ベンダ独自機能の実装
- フェッチ・サイズ(DataReader?)
- 配列バインド
が多く、クロスDB対応には注意が必要。
汎用型 †
型のマッピング †
特に、SELECTした結果セットの取得時、
DBMS型と.NET(やJava)のネイティブ型とのマッピングが異なるので、
プログラム側でキャストやコンバートのコード記述が必要になる場合がある。
主に以下の型のマッピングが問題になることがある。
数値型 †
- short
- int
- long
- float
- double
- decimal
日付 †
例えば、
- ODP.NETなどでは、OracleのNumber型のサイズによって
.NETのネイティブ型へのマッピングが変わってくる。
- DataReader?については、
Get[型名](int index)という
メソッドがあるためこれを使用できる。
- DataRow?については、
上記に対応するメソッドがないため自前で
キャストやコンバートをする必要がある。
分離レベル †
DBMSによってロック・分離戦略が異なるので注意する。
参考 †
Tags: :データアクセス, :移行, :.NET開発, :ADO.NET