- 追加された行はこの色です。
- 削除された行はこの色です。
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対応には注意が必要です。
特にHiRDBのプロバイダ(pddndp20.dll)が~
他のメジャーなDBMSのプロバイダと異なり、
-型指定、サイズ指定が必須~
#ちなみに、サイズ指定は渡すデータのサイズではなくDDLで定義したスキーマのサイズ
-名前バインドをサポートしていない
などがあり、クロスDB対応を困難にしています。
-参考情報
--[[データ プロバイダ>新アーキテクチャ設計ガイド補足(アプリケーション・アーキテクチャ)#ef5e85ce]]
*型のマッピング [#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によってロック・分離戦略が異なるので注意する。