「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>データアクセスのいろいろ]]

* 目次 [#w7c9c6de]
#contents

*概要 [#dc8f6d02]
クロスDB対応のポイントをまとめた。

*詳細 [#x7479230]

**SQL [#j079a683]
以下の様に差異があるため、

クロスDBの際は、

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

等の方式が良い。

***基本的な構文 [#mf762dca]
-DELETE FROMのFROMがあるとエラーになるケース

-JOINの構文が異なるケース
--INNER JOINが使えない。
--RIGHT OUTER JOINが使えない。

***ヒント [#wf0963d2]
-ロックヒント
-クエリヒント(プラン

***ストアド・関数 [#ycbb9896]

-Transact-SQL、PL/SQLなどの~
ストアド・関数の定義や手続き記述の構文

-バインド変数の記号
--Oracle  :「:」
--その他DB :「@」

**データプロバイダ [#o8636aaf]

***インターフェイス [#y4e7cf5c]
現ADOであるADO.NETでは、

-旧ADO
-OLE
-ODBC
-JDBC

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

***切替方式 [#v84a84dc]
-ベンダ毎に別々のデータプロバイダ(バイナリ)を提供している。

-このため、切替方式は、
--内部で使用するドライバを切り替えるスタイルではなく、
--使用するデータプロバイダ(バイナリ)事態を切り替えるスタイル。

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

***実装の差異 [#v0572201]
-インターフェイス~
そもそも、インターフェイスの非互換がある。

--型指定、サイズ指定が必須~
>サイズ指定は渡すデータのサイズではなく~
DDLで定義したスキーマのサイズを指定

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

>などがある。

-機能~
JDBCと比べるとADO.NETの方が、

--標準化されていないスコープや
--ベンダ独自機能の実装
---フェッチ・サイズ(DataReader)
---配列バインド

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

***汎用型 [#f53785e3]
-System.Data.Common 名前空間~
http://msdn.microsoft.com/ja-jp/library/9tahwysy.aspx

--System.Data.Common.DbConnection クラス~
http://msdn.microsoft.com/ja-jp/library/system.data.common.dbconnection.aspx

--System.Data.Common.DbConnectionStringBuilder クラス~
http://msdn.microsoft.com/ja-jp/library/system.data.common.dbconnectionstringbuilder.aspx

--System.Data.Common.DbTransaction クラス~
http://msdn.microsoft.com/ja-jp/library/system.data.common.dbtransaction.aspx

--System.Data.Common.DbCommand クラス~
http://msdn.microsoft.com/ja-jp/library/system.data.common.dbcommand.aspx

--System.Data.Common.DbParameter クラス~
http://msdn.microsoft.com/ja-jp/library/system.data.common.dbparameter.aspx

--System.Data.Common.DbDataReader クラス~
http://msdn.microsoft.com/ja-jp/library/system.data.common.dbdatareader.aspx

--System.Data.CommonDbDataAdapter クラス~
http://msdn.microsoft.com/ja-jp/library/system.data.common.dbdataadapter.aspx

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

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

***数値型 [#v23e8924]
-short
-int
-long
-float
-double
-decimal

***日付 [#af8f7d0f]
-DateTime
-TimeSpan

***例 [#l1f52ae8]
例えば、

-ODP.NETなどでは、OracleのNumber型のサイズによって~
.NETのネイティブ型へのマッピングが変わってくる。~

-型変換の方法

--DataReaderについては、~
Get[型名](int index)という~
メソッドがあるためこれを使用できる。

--DataRowについては、~
上記に対応するメソッドがないため自前で~
キャストやコンバートをする必要がある。

**分離レベル [#rb5f59d8]
DBMSによって[[ロック・分離戦略>#qbc8c640]]が異なるので注意する。

*参考 [#fa5ee85a]
**[[ADO.NETデータプロバイダ]] [#ya0d9a63]
**[[DBMSのロック・分離戦略と同時実行制御]] [#qbc8c640]

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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS