■23630 / ) |
Re[6]: オプティミスティック同時実行制御 Insert処理 |
□投稿者/ yan (13回)-(2008/08/19(Tue) 16:33:09)
|
■No23619 (魔界の仮面弁士 さん) に返信 > 2008/08/19(Tue) 14:24:11 編集(投稿者) > > ■No23617 (yan さん) に返信 >>ただOracleからSQLServerに変更される可能性があるため、 > あえて System.Data.Common を使うという事は、最初にファクトリからインスタンスが生成されるわけですよね。 > http://www.microsoft.com/japan/msdn/thisweek/300x10/Phase3/fact/vb.aspx > > そのとき、現在の接続が Oracle なのか SQL Server なのか それ以外なのかといった情報を、どこかで > 保持しておくのでしょうか? それとも、DB の違いは一切意識させたくないのでしょうか?
自作のDbクラスで保持しています。
>>OracleExceptionがコードのあちこちに散らばるのは避けたいので > 例外処理クラスを予め作っておき、それを呼び出してみては如何でしょうか。 > 他のデータベースに切り替えた際、必ずしも ex.Message から十分な情報が得られると言う保証は > 無いので、今の実装だと、移植性が損なわれてしまうように思えます。
Accessで確認したところex.messageには一意制約違反と判断できるエラー番号がありませんでした。 >>Const UNIQUE_ERR As String ="ORA-000001" > これは避けたほうが良いかと思いますよ。 > プロバイダを切り替えても対処できないので(再コンパイルが必要になってしまう)。 > >>DB更新があるたびに Catch句の内容を書くのも面倒なのでどうにか自作例外でできないかと思案中です。 > Exception を引数に取り、Catch 句の内容を代替するための補助メソッドを用意するとか。
今は補助メソッドを用意する方法で検討しているのですが、Accessでは何を基準に一意制約違反と判断させればいいのか・・・ SQLServerではエラー番号2601ですが、ex.Messageに含まれるのか環境がないためわかりません。
|
|