マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

クロスDB対応のポイントをまとめた。

詳細

SQL

以下の様に差異があるため、

クロスDBの際は、

  • SQLを外部ファイル化し、
  • DBによって参照先のファイルを切り替える

等の方式が良い。

基本的な構文

  • DELETE FROMのFROMがあるとエラーになるケース
  • JOINの構文が異なるケース
    • INNER JOINが使えない。
    • RIGHT OUTER JOINが使えない。

ヒント

  • ロックヒント
  • クエリヒント(プラン

ストアド・関数

  • Transact-SQL、PL/SQLなどの
    ストアド・関数の定義や手続き記述の構文
  • バインド変数の記号
    • Oracle  :「:」
    • その他DB :「@」

データプロバイダ

インターフェイス

現ADOであるADO.NETでは、

  • 旧ADO
  • OLE
  • ODBC
  • JDBC

などと同じくAPIのインターフェイスは、ある程度標準化されている。

切替方式

  • ベンダ毎に別々のデータプロバイダ(バイナリ)を提供している。
  • このため、切替方式は、
    • 内部で使用するドライバを切り替えるスタイルではなく、
    • 使用するデータプロバイダ(バイナリ)事態を切り替えるスタイル。
  • それぞれのデータプロバイダの、名前空間.クラス型が異なるため、
    以下に列挙した汎用型等を使用してプログラミングする必要がある。
    #若しくは、自前のDB部品等でラッピングする等の対策を取る必要がある。

実装の差異

  • インターフェイス
    そもそも、インターフェイスの非互換がある。
  • 型指定、サイズ指定が必須

    サイズ指定は渡すデータのサイズではなく
    DDLで定義したスキーマのサイズを指定

  • 名前バインドをサポートしていない

などがある。

  • 機能
    JDBCと比べるとADO.NETの方が、
  • 標準化されていないスコープや
  • ベンダ独自機能の実装
    • フェッチ・サイズ(DataReader?
    • 配列バインド

が多く、クロスDB対応には注意が必要。

汎用型

型のマッピング

特に、SELECTした結果セットの取得時、
DBMS型と.NET(やJava)のネイティブ型とのマッピングが異なるので、
プログラム側でキャストやコンバートのコード記述が必要になる場合がある。

主に以下の型のマッピングが問題になることがある。

数値型

  • short
  • int
  • long
  • float
  • double
  • decimal

日付

  • DateTime?
  • TimeSpan?

例えば、

  • ODP.NETなどでは、OracleのNumber型のサイズによって
    .NETのネイティブ型へのマッピングが変わってくる。
  • 型変換の方法
  • DataReader?については、
    Get[型名](int index)という
    メソッドがあるためこれを使用できる。
  • DataRow?については、
    上記に対応するメソッドがないため自前で
    キャストやコンバートをする必要がある。

分離レベル

DBMSによってロック・分離戦略が異なるので注意する。

参考

ADO.NETデータプロバイダ

DBMSのロック・分離戦略と同時実行制御


Tags: :データアクセス, :移行, :.NET開発, :ADO.NET


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-04-20 (火) 15:09:18 (26d)