Open棟梁Project - マイクロソフト系技術情報 Wiki

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

* 目次 [#w7c9c6de]
#contents

*SQL [#j079a683]
DBMS独自の
-ヒント
--ロックヒント
--クエリヒント(プラン
-ストアド
-関数

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

基本的な構文でも

-DELETE FROMのFROMがあるとエラーになるケース

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

などがあります。

また、

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

などに違いがあります。

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

*ADO.NET [#o8636aaf]
ADO.NETは、
-旧ADO
-OLE
-ODBC
-JDBC

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

ただし、

-旧ADO
-OLE
-ODBC
-JDBC

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

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

-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.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

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

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

-型指定、サイズ指定が必須~
#ちなみに、サイズ指定は渡すデータのサイズではなくDDLで定義したスキーマのサイズ
-名前バインドをサポートしていない

などがあります。

-参考情報
--[[ADO.NETデータプロバイダ]]

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

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

-数値型
--short
--int
--long
--float
--double
--decimal

-日付
--DateTime
--TimeSpan

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

-型変換の方法としては、

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

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

*分離レベル [#rb5f59d8]
-DBMSによってロック・分離戦略が異なるので注意する。
-詳しくは、[[DBMSのロック・分離戦略と同時実行制御]]を参照。

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS