- - PR -
ASP.NET から Oracle 10g へ OLEDB接続で予期しないエラー
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-12-28 13:21
お世話になります。
今までASP.NETからSQLServer2000に接続するWebアプリを開発していましたが、 諸般の事情によりDBをOracle10gに移行することになりました。 OLEDBを使用してOracleに接続しようとしたところ、ご多分に漏れず、 「System.Data.OleDb.OleDbException: エラー情報 : REGDB_E_CLASSNOTREG(0x80040154) がありません。・・・プロバイダはローカルのコンピュータに登録されていません。」 となり、皆さんの投稿を参考にORACLE_HOMEのフォルダセキュリティに IUSER_xxxとASPNETを追加しましたが、予期しないエラーとなってしまいます。 「予期しないエラーです : E_FAIL(0x80004005)」 上記エラーとなった後、再度接続しようとすると以降は全てメッセージがデタラメに化けて表示されます。文字化けはWWWサービスを再起動すると解消されますが、Oracleに接続できないことに変わりありません。 どなたかこのような現象の解決方法をご存知ないでしょうか? 当方の環境は以下の通りです。 <環境>端末A (テスト用DBサーバー) Windows XP Pro SP1 Oracle Database 10g Release 1 (10.1.0.2) <環境>端末B (Webサーバー兼 開発クライアント) Windows XP Pro SP1 IIS 5.1 Visual Studio .NET 2003 .NET Framework 1.1.4322 SP1 Oracle Database 10g Client Release 1 (10.1.0.2) ちなみに、SQL*PlusやODBC経由でMSAccessからの接続は出来ています。 またVB.NETによるWindowsアプリからの接続も成功し、 さらにWindows2000サーバーで同じASP.NETを実行してもエラーにはなりません。 どうかよろしくお願いします。 | ||||||||
|
投稿日時: 2005-01-04 06:42
OLEDBの代わりにOracleさんお勧めのODP.NETを利用されてはどうでしょうか。Oracle 10g+ODP.NETの環境でWebアプリを開発していますが、問題なく動作しています。 http://www.atmarkit.co.jp/fdb/rensai/odpdotnet02/odpdotnet02_1.html _________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 | ||||||||
|
投稿日時: 2005-01-06 09:58
Accessさん 返事が遅くなって申し訳ありません。
本日、新年初出社しました。
OleDBではどうしようもないのでしょうか? 今回Oracleに移行されるDBとSQLServerのまま残るDBと両方に接続するプログラムがあって、独自に作成した接続クラスを使用しています。 今までSQLServer接続にはSqlClientを使用していたのですが、プログラムを変換するにあたって、こっちのDBの時はOracleClient、あっちのDBにはSqlClientと判断しながら変換するのが大変(既に140近くの機能を開発済みで、プログラム数にすると400を超えてしまいますので...)なので、どのDBに接続するのにもOleDBを使用しようかと考えています。 ODPはまだテストしていませんが、問題が解決しなかった場合の押さえとして、これからテストしてみようと思います。 | ||||||||
|
投稿日時: 2005-01-06 15:01
/_/_/_/_/_/_/_/_/
/_/ 自己レス /_/_/ /_/_/_/_/_/_/_/_/ テスト経過です。 ・DELLのノート(INSPIRON) ・TOSHIBAのノート(EX/522CME) では、Oracleに接続できました。 ・IBMのノート(THINKPAD R51) ・IBMのノート(THINKPAD T42) ですと「予期しないエラー」になるようです。 ちなみに上記4つの端末のOSは全てWin XPです。 ・IBMのデスクトトップ(PC300) では、うまくいっているのですが、OSがWin2000 Serverです。 どこかのサイトで「THINKPADだとエラー」みたいなことを 見たような気がするのですが、そんなことってあるのでしょうか? | ||||||||
|
投稿日時: 2005-01-11 06:39
OleDBでも可能ですが、ODP.NETはOracleにネイティブに対応していますのでかなり高速化されています。
バックエンドDBを移行するとき、単純にSqlConnectionをOracleConnectionに変換すれば動作するとはかぎりません。SQL文の変更、SQL ServerのTransact-SQLをOracleのPL/SQLに書き換えるなどの作業が必要になります。 Webアプリケーションを開発するときには、すくなくともプレゼンテーション層、データアクセス層の2階層に分離すべきではないでしょうか。この場合、データアクセス層を置換するだけで、WebのバックエンドDBをMySQL->SQL Server->Oracleのように自由に選択できます。 _________________ ASP.NETサンプル集(Web Matrix版) [ メッセージ編集済み 編集者: Access 編集日時 2005-01-11 06:40 ] | ||||||||
|
投稿日時: 2005-01-11 13:16
テスト経過2です。
ODPでもダメでした。 <--- エラー内容 ---> オブジェクト参照がオブジェクト インスタンスに設定されていません。 説明 : 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。 例外の詳細: System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。 ソース エラー: 現在の Web 要求の実行中にハンドルされていない例外が生成されました。障害の原因および発生場所に関する情報については、下の例外スタック トレースを使って確認できます。 スタック トレース: [NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。] Oracle.DataAccess.Client.OracleException.get_Message() +24 WadaWebOdp.ConnectTest1.Button1_Click(Object sender, EventArgs e) +140 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33 System.Web.UI.Page.ProcessRequestMain() +1292 | ||||||||
|
投稿日時: 2005-01-11 14:46
配下のフォルダ・ファイルにも設定を継承しましたか? # たしか、OCI.DLLは継承していなかったような... SysinternalsのFilemonでファイルアクセスエラーが 発生しているか確認していただけませんか? [ メッセージ編集済み 編集者: なな 編集日時 2005-01-11 14:56 ] | ||||||||
|
投稿日時: 2005-01-12 15:16
ななさん こんにちわ。
セキュリティを追加する画面の詳細設定で「適用先」が「このフォルダ、サブフォルダおよびファイル」となっているので継承されているかと思います。 BINフォルダにあるOCI.DLLには、権限が設定されていました。
教えていただいたFilemonというソフトを起動してエラーになるプログラムを実行してみましたが、どのようになればファイルアクセスエラーなのか私には判断できませんでした。(英語の読解能力が乏しいので...) 申し訳有りませんが、Filemonでどのように調査すれば良いか、教えていただけませんか? | ||||||||
