Open棟梁 wiki

[[戻る>FAQ]]

*目次 [#x3b425b1]
#contents

*FAQ [#u80a286b]

**パラメタライズド・クエリの初歩 [#rc098a86]
-Like検索は標準のパラメタライズド・クエリ、[[動的パラメタライズド・クエリ]]でサポートされています(パラメタにワイルドカードを含めたLikeの検索条件を渡す)。
-パラメタライズド・クエリのパラメタにnullを渡したい場合、DBNullを使用します([[動的パラメタライズド・クエリ]]では、nullは特殊な制御パラメタとして利用されます)。

**方法 [#q1581885]
***パラメタライズド・クエリのバインド変数へのバインド方法は? [#if1472b1]
名前バインドにのみ対応しています。このため、どのデータプロバイダであっても、順番バインドをサポートしません。
-ODP.NETのバインドは名前バインド固定になります。
-OLEDB、ODBC、HiRDBのデータプロバイダは 「?」パラメタの順番バインドにのみ対応しているためフレームワーク内部で名前バインド可能になる様に処理を加えています。なお、コメント中に パラメタ名と同じ文字列があると正しく動作しませんのでご注意ください。

***ストアド プロシジャ、無名PL/SQLブロックの実行や、戻り値の取得などは可能か? [#ncc8d73b]
ストアド プロシジャでも[[動的パラメタライズド・クエリ]]機能を使用できます。

***デッドロック、ロックタイムアウト、「ユニークキーの重複」などの例外をリトライしたい。 [#w447c35b]
B層[[ベースクラス2]]の例外処理をカスタマイズして、 左記のリトライ対象例外を業務例外に振り替え、P層に正常系の戻り値が戻るようにします。

***SetUserParameter()メソッドの利用ポリシーをどのように考えるべきか? [#vc9de8cf]
SetUserParameter()メソッドは、SQLインジェクションの可能性があるものの、DB部品の(僅かな)制約 / 制限などを解決するAPIでもあります。このため、SetUserParameter()メソッドの利用を制限せず、D層の[[ベースクラス2]]に実装するSQLトレースをカスタマイズしてSQLインジェクションの可能性があるSQLをチェック & Warningログを出力するなどの 対応をした方がプロジェクトとしては、スムーズに開発を遂行できると考えます。 [#oe0cc3be]

**性能 [#o9c7896f]
***コマンド タイムアウト値を設定するにはどうすれば良いか? [#g068683a]
共通のコマンド タイムアウト値をconfigファイルに設定できます。

***ODP.NET、HiRDBの配列バインドをサポートしているか? [#j377b5d9]
サポートしています。また、配列バインドをサポートしていないデータプロバイダのために、[[バッチクエリ作成支援機能]]を提供しています。

***SQLで暗黙の型変換が発生し、検索処理性能が大幅に劣化する。 [#nde5b65e]
SetParameter()メソッドに型、サイズ.etcを指定可能です。 後工程でのPG修正が難しい場合は、SQL定義ファイル中に型キャストを明示することでも対応可能です。

***[[動的パラメタライズド・クエリ]]を記述するXMLファイルのサイズなどにより性能が劣化しないか? [#s01d610b]
1つのXMLファイル中に150タグ以上あると性能が劣化が始まりますので、不要なタグは記述しないようにお願いします(XMLファイル サイズについては、問題ないようです)。 また、バッチ更新処理の場合は、ラウンド・トリップ軽減の観点も含め、配列バインド(ODP.NET、HiRDBでサポート)、[[バッチクエリ作成支援機能]]を併用下さい。なお、[[動的パラメタライズド・クエリ分析ツール]]を使用したテストのために記述する PARAMタグ、DIVタグなどXMLドキュメント オブジェクトの更新処理を伴わないタグについては、性能劣化の原因になりません。

**エラー [#yf74ea47]
***検索条件のIN句(副問合せ)を動的化したいがエラーとなる。 [#p64b05fa]
検索条件のIN句(副問合せ)を動的化する場合、[[動的パラメタライズド・クエリ]]のIFタグ ではなく、タグのネストが可能なSUBタグを使用頂けます。

***[[動的パラメタライズド・クエリ]]でXMLが編集されずに、そのまま実行される。 [#c1c6d08f]
DB部品の最も初めのチェック処理にXmlDocument.Load()メソッドを使用しているため、 XMLフォーマットとして正しいものは[[動的パラメタライズド・クエリ]]、不正であるものは[[静的パラメタライズド・クエリ]]として実行されるため、この現象は、不正なフォーマットのXMLを投げている事に起因します。XMLフォーマットの不正を確認するためには、[[動的パラメタライズド・クエリ分析ツール]]を使用するか、デバッグ時に、DB部品クラスのIsDPQプロパティ(動的SQLか静的SQLかを識別する)をチェックして下さい。

***自動生成Daoの Update処理で「ORA-00972 "識別子が長すぎます"」が発生する。 [#q26ad2ec]
[[D層自動生成ツール]]は、Update時に使用するパラメタ識別子にプレフィックス・サフィックスを1文字以上、追加する必要があります。この際、パラメタ識別子が30文字を越えてしまい、エラーが発生するケースがあります。プレフィックス・サフィックスは、[[D層自動生成ツール]]のコンフィグで設定可能です。この再設定と、再生成が面倒な場合は、文字列一括置換ツールなどを使ってパラメタ識別子を置換するなどして下さい(DaoとUpdate処理のSQL定義(XML)が置換対象ファイルになります)。

**サポート [#c83e88f1]
***Like句を使用した曖昧検索をサポートしているか? [#r8539de4]
サポートしています。パラメタライズド・クエリ自体がLike句を使用した曖昧検索をサポートしているため 文字列連結やSetUserParameter()メソッドを使用する必要はありません。

***LINQ to SQLやLINQ to Oracle、LINQ to Entities(ADO.NET Entity Framework)をサポートしているか? [#fe2f4a5d]
サポートしませんが、利用制限はしていません。D層フレームワーク(静/[[動的パラメタライズド・クエリ]]機能、[[D層自動生成ツール]])の使用を推奨しています。

***任意のDLL(Assembly)からの埋込SQLのロードをサポートしているか? [#f983c0cf]
-[[ベースクラス2]]のSetSqlByFile2メソッドを用いてExecutingAssemblyの埋込リソースから SQLをロードすることができますが、任意のDLL(Assembly)から埋込リソースをロードを行う場合は、SetSqlByFile2メソッドのカスタマイズが必要になります。
-カスタマイズ方法は、SetSqlByFile2メソッドで、EmbeddedResourceLoader.LoadAsStringメソッドを使用して 直接、埋込SQLをロードし、this.SetSqlByCommandメソッドでSQLを設定するようにします。
-問題は、EmbeddedResourceLoader.LoadAsStringメソッドの引数であるassemblyStringと、loadfileNameに組み込む名前空間情報の情報をどのように渡すかになりますが、この部分はプロジェクト毎に検討ください。



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