アプリ版:「スタンプのみでお礼する」機能のリリースについて

VB.NET 2010でOracle11gに接続するプログラムを作っていますが、
接続方法がいまいちわからずに困っています。

プログラムを動かすサーバーはWindows Server 2008 R2の64bitだったので、
Oracle Clientも合わせた方がいいのかなと思い、64bit版をインストールしました。

ASP.NETのWEBアプリでは以下の接続文字列を用いてADO接続できました。
パラメータ値は例です。
(Web.configに記述)
<connectionStrings>
<add name="oracle" connectionString="Provider=OraOLEDB.Oracle;Data Source=db1;Password=pass1;User ID=user1"
providerName="System.Data.OleDb" />
</connectionStrings>


次に、コンソールプログラムを作成し、同じサーバーで上記と同様の接続文字列で
接続しようとしましたが、エラーとなり接続できませんでした。

いろいろ記述を変えても接続できませんでしたが、最終的にOracle Clientの
32bit版を64bit版と違うフォルダにインストールし、以下の接続文字列で接続
できました。(INIファイルに記載)
ConnectionString=Provider=OraOLEDB.Oracle;Data Source=db1;Password=pass1;User ID=user1

この状態でWEBアプリの方は何を使っているのかと思い、64bit版のインストールフォルダを
リネームしたところ、WEBアプリの方は接続できなくなりました。


現状では32bitと64bitのOracle Clientが両方必要な状況ですが、本来ならどちらかだけで
すむと思います。
32bitと64bitで接続文字列が変わるという情報は得られませんでした。
何がまずいのでしょうか?
最初から32bit版をインストールすれば良かったのでしょうか。

A 回答 (2件)

先ず、大前提として32bitプログラムのプロセス空間には


32bitのDLLしかロードできません。同様に64bitのそれは
64bitのDLLしかロードできません。
OLEの実装にはDLL型とEXE型があり、前者は同一の
プロセス空間にあるため、32bitプログラムからは32bitの、
64bitプログラムからは64bitのDLL実装でなければ動き
ません。

OLEをインスタンス化する時に使うクラス名はレジストリに
登録されており、最終的に処理を担うDLLかEXEのパスに
行き着くようになっています。互換性を保つため、クラス名は
以前から変わっていませんし、32/64の区別もありません。
OracleのOLEはDLL型実装なので、32bitか64bitのどちらか
一方しか処理できません。

ここでは”OraOLEDB.Oracle”が示す最終パスは後から
インストールした方に切り替えられているはずです。
サーバが64bitなら、64bit版で統一すべきでしょう。
32bit版をアンインストールして、もう一度、64bit版を
インストールした方がよいでしょう。
そして、コンソールプログラムの方を64bit版でリビルドする
ことを薦めます。Visual Studio 2012ならどちらでもビルド
できます。

この回答への補足

基礎からの詳しいご回答ありがとうございます。
非常に勉強になります。
まず64bitでビルドする方法を改めて調べて、それができたら
64bitのOracle Clientの状態だけにして試してみたいと思います。

補足日時:2014/01/09 08:45
    • good
    • 1
この回答へのお礼

ご指摘の通りでした。
32bit版をアンインストール(Deinstall.batを使用)すると、コンソールアプリだけでなく、
WEBアプリも接続できなくなりました。

64bit版も同様にアンインストールし、再度インストールしました。

コンソールアプリケーションをサーバーのVisualStudioで64bitでビルドし
接続できました。
WEBアプリでも接続できました。

現在は64bit版だけで動く状態になりました。

ありがとうございました。

お礼日時:2014/01/09 16:35

.NETのコンソールプログラムは64bitビルドです?

この回答への補足

ご回答ありがとうございます。
開発機がWin7の32bitなので、ビルドも32bitです。
それも思い当たって、サーバのVisualStudioで一応64bitビルドをしてみたつもりでしたが、
改善できませんでした。

補足日時:2014/01/08 12:10
    • good
    • 0
この回答へのお礼

もういちど64bitでビルドするよう調べてみます。
ありがとうございます。

お礼日時:2014/01/09 08:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す