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

目次

SQL

DBMS独自の

  • ヒント
    • ロックヒント
    • クエリヒント(プラン
  • ストアド
  • 関数

などが使用されている場合は修正が必要になります。

基本的な構文でも

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

などがあります。

また、

  • Transact-SQL、PL/SQLなどの
    ストアド・プロシージャの手続き記述の構文
  • バインド変数の記号
    • Oracle  :「:」
    • その他DB :「@」

などに違いがあります。

このため、クロスDBの際は、SQLを外部ファイル化し、
DBによって切り替える等の方式が良いかと思います。

ADO.NET

ADO.NETは、

  • 旧ADO
  • OLE
  • ODBC
  • JDBC

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

ただし、

  • 旧ADO
  • OLE
  • ODBC
  • JDBC

と異なり、内部で使用するドライバを切り替えるスタイルではなく、
ベンダ毎に別々のデータプロバイダ(バイナリ)を提供しています。

それぞれ名前空間.クラス型が異なるため、以下に列挙した
汎用型等を使用してプログラミングする必要があります。
#若しくは、自前のDB部品等でラッピングする等の対策を取る必要があります。

JDBCと比べるとADO.NETの方が、

  • 標準化されていない部分や
  • ベンダ独自機能の実装
    • フェッチ・サイズ(DataReader?
    • 配列バインド

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

  • 型指定、サイズ指定が必須

    #ちなみに、サイズ指定は渡すデータのサイズではなくDDLで定義したスキーマのサイズ

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

などがあります。

型のマッピング

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

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

  • 数値型
    • short
    • int
    • long
    • float
    • double
    • decimal
  • 日付
    • DateTime?
    • TimeSpan?

また、例えばODP.NETなどでは、
OracleのNumber型のサイズによって
.NETのネイティブ型へのマッピングが変わってきます。

  • 型変換の方法としては、
  • DataReader?については、
    Get[型名](int index)
    というメソッドがあるためこれを使用できます。
  • DataRow?については、
    上記に対応するメソッドがないため自前で
    キャストやコンバートをする必要があります。

分離レベル


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


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-03-27 (月) 10:47:39 (938d)