6 Replies Latest reply: Jan 30, 2013 3:13 AM by 983702 RSS

    VisualStudioで開発したWebシステムのデータベース接続について、あれこれ

    983702
      Microsoftのフォーラムオペレータより、Oracle側で掲載すべきとのご見解を頂きましたので、利用させて頂きました。
      たらい回しにならないと、いいのですが。(MSのフォーラムへ掲載したもの そのまま掲載致します)

      ここでいうWebシステムは 自らVisualStudio2005上で開発したものですが、恥ずかしながら質問させて下さい。
      自分の開発環境(端末x86)は現在VisualStudioが2012になり、継続して当該Webシステムのメンテナンスにあたっています。
      実務=本番環境のWebサーバーはServer2008R2(x64)です。

      開発環境と本番環境 各々のWeb.configに書かれた当該OracleDBのConnctionString部分:ProviderNameは、System.Data.OracleClientで同一です。

      但し、assembliesの部分(参照設定の部分だと思う)は
      開発環境のWeb.configにOracle.DataAccessの記述があるのに対し、本番環境のWeb.configにはその記述がありません。

      あるページ中のDropDownListに、OracleDBの内容を収めて表示することを達成していますが、そのSQLDataSoureになっているのは

      ProviderName=System.Data.OracleClientの先ほどのConnectionStringで達成されたSelect結果です。(.aspx上、当該SQLDatasourceのProviderNameに接続文字列に続いて".ProviderName"という文字が付加されている、いつの間にか。ま、これはいいか)


      また同ページでは、ユーザ入力値の妥当性を確認するため、OracleDBのあるテーブルへ入力内容の存在チェックを図るロジックが組まれています。

      当該ページの頭にOracle.Dataaccess.clientとOracle.DataAccess.TypesのImportsが記述され、実際のデータ取得部分では

      Using _cn As New OracleConnection(CnString)という記述がなされています。



      【質問①】
      上記背景から、画面コントロール部分はSystem.Data.OracleClientの接続、内部ロジックはODP.Netでの接続で達成されている認識です。(あってる?)

      本番環境でも、Web.Configに参照の記述がないに関わらずODP.NETを活かしたロジックの動作が達成されている理由はなぜですか?
      本番環境には、稼動当初インストールしたODAC(旧Ver)がインストールがされています。



      開発当初、自らの端末にOracleのODACをインストールしたに関わらず、ツールボックスへODP.NETを活かすアイコンが現れず やむなく
      .NetFramework Oracle用プロバイダを選択して接続文字列を作り、先に進めた記憶があります。これが上記で言及したDropDownListなどの成果物だと思います。本来ロジックだけでなく、画面設計(DropDownList等)にもODP.NETを駆使した開発を行いたかったのですが、断念してこの回避策をとりました。

      今回VisualStudioを2005から2012にVerUPしたことを受け、OracleDBは10gのままであるものの、新たなODACを開発環境へインストールしました。
      2005時代はODACをインストールしたところで、サーバーエクスプローラーにODP.NETのプロバイダが現れることはありませんでしたが
      今回は表示されるようになりました。だいぶいい感じで...した。


      【質問②】
      言及した過去に作ったWebページ内のロジック:New OracleConnection部分でエラーになるようになってしまいました。(すみません、具体性なく)
      Ver違いのODACをインストールしたことが災いした、と考え(...ビビリ)、即 後にいれたODAC(1120320)をアンインストールしました。
      なぜ、エラーになったのでしょうか? 慌てて作業して覚えていないのですが、ODAC(1120320)をアンインストール後 WebConfigも従来動作していたバックアップから戻して復旧にこぎつけました。不用意な参照設定が書かれていたのかも知れません。
      後VerのODACをインストールし、一端末中で旧Verと共存させ、かつて開発したODP.NETを駆使したWebページを無事動作させるには如何したらよろしいでしょうか?




      【質問③】
      一番お聞きしたいことです。開発環境のODACを最新化して、VS上でそれを駆使して何かを作り 本番に移行を果たそうとする場合
      本番環境も同VerのODACをインストールする必要がありますか?

      インストールが必要な場合、本番環境でもODACのVer違いの共存で悩まされたりしないか?解決策はありますか?



      長々とすみません、お手透きの方 ご見解をよろしくお願い致します。
        • 1. Re: VisualStudioで開発したWebシステムのデータベース接続について、あれこれ
          hamadeguchi
          System.Data.OracleClientはMS製のADO.NETに含まれていたもので、今後廃止予定です
          http://www.infoq.com/jp/news/2009/06/oracleclient_deprecated

          Oracle.DataAcess.ClientはODP.NETのコンポーネントでインストール時に
          machie.configというファイルに記載されるので
          正しくインストールされていればWeb.configに記載しなくても動作します
          http://msdn.microsoft.com/ja-jp/library/ms178685%28v=vs.80%29.aspx

          VS2008でほかにいろいろコンポーネントがある状態での経験ですが
          開発環境(デバッグ)は32bit,運用は64bitでないと動作しないことがありました。
          (Mixed Platformになってるせいかな)

          バージョン違いについては11以降であれば実行環境のほうが新しい場合は動作すると思いますが
          同じほうがいいのはいうまでもありません
          http://d.hatena.ne.jp/atsukanrock/20090519/1242721158
          • 2. Re: VisualStudioで開発したWebシステムのデータベース接続について、あれこれ
            983702
            hamadeguchiさん、ご見解頂いたに関わらず長い間の放置大変申し訳ございませんでした。

            仰られるとおりSystem.DataOracleClientに限りがあることに着目した問い合わせです...
            また背景にはこれらがあります。

            ・現在既にこれを駆使して開発されたWebサイト(Odp.Netも一部ロジック内で使用もOracletDataAccess.dllのVerは古い)が
            本番Webサーバーで運用されていること

            ・上記Webサーバーで、別サイトを立ち上げる計画が持ち上がり、新たなサイトはOdp.Netを最大限に駆使した方針でいきたいこと

            ・従来の開発端末はVS2005で、10gとの相性か、妥当なODACのVerをインストールしなかったかの影響で
            ODP.NETを駆使した開発ができなかった。
            しかし昨今リニュアルされた開発端末がVS2012となり、ODP.NETを駆使した開発がイけそうな雰囲気であること

            ・開発端末がリニュアルされたが、こちらで既に運用されているサイト(一番最初に書いた運用済みのサイト)のメンテナンスを行っていかなればならないこと

            ・開発端末がリニュアルされても、接続するDBサーバー自体は10gのまま、VerUPの予定はないこと


            さて、価値のある情報をありがとうございました。
            初歩的なことで申し訳ございませんが、教えてください。
            machie.configというファイルに記載されるので
            正しくインストールされていればWeb.configに記載しなくても動作します
            VS2012上で確認したのですが、Web.config上のOracleDataAccessの参照部分をコメントアウトすると、Importsしている画面が「デバッグモード」で実行させた場合
            動作しなくなります。(そもそもOracleConnetion部分がdllを参照できなく、ロジック上でエラーになっている)

            この実態からすと、デバッグモードの動作と実サイトの動作で、Web.Configの扱われ方が違う、ということなのでしょうか?
            具体的に言うと、開発環境=デバッグモード及びコードを構築していく上で、参照設定がWeb.configに記載されていることがMust、ということでしょうか??


            しかし、Binフォルダを用意すれば...という見解を別サイトで頂いているし 困ったなぁ
            たぶん私はOdp.net以前に参照設定というものが、よく分かっていないのだと思います。
            ここを理解するうえでの出てくるのが、Machine.config BINフォルダ Web.configなのでしょうかねぇ

            まとまりのない話ですみません。MS側にポストしたURLを一応に記載しておきます。マルチポスト何卒ご容赦下さい。
            http://social.msdn.microsoft.com/Forums/ja-JP/vsgeneralja/thread/384722b5-767b-4c13-8216-3b22af62ca56
            • 3. Re: VisualStudioで開発したWebシステムのデータベース接続について、あれこれ
              hamadeguchi
              ODACはどのようにインストールされたのでしょうか
              Oracle Client/ODT/ODAC XCopy

              正しくインストールされた場合
              ・GACにファイルがコピーされる
              ・対応バージョンのmachine.configにGACへの登録内容が追記される
              ・Web.configではmachine.configの内容を継承する
              という手順になっています。
              Web.configのassemliesセクションで<clear />とかしていませんか?
              http://msdn.microsoft.com/ja-jp/library/bfyb45k1%28v=vs.80%29.aspx

              本番と開発のGACおよび対象フレームワーク(2/4)のmachine.configを覗いてみてください
              http://www.atmarkit.co.jp/fdotnet/dotnettips/846extratfromgac/extratfromgac.html
              http://sofud.blog45.fc2.com/blog-entry-6.html

              なお、他のサイトのWeb.configのconnectionStringセクションで<clear />を使っていると
              ODACインストール後にエラーになります。
              ※<clear />は継承をやめる印です
              • 4. Re: VisualStudioで開発したWebシステムのデータベース接続について、あれこれ
                983702
                hamadeguchi様
                長い間の放置失礼致しました。
                Oracle社のサイトからダウンロードしたODACの媒体からSetup.Exeを起動しました。OUIなどではありません。
                バージョン違いのODACを一端末で、共存させる方法は何となく理解できました、ありがとうございます。

                質問が変わってきてしまい申し訳ないのですが...ご存知であれば教えて頂けませんか?

                現在私の開発環境(Win7)はGACに最新のODACと以前のODACが登録された状況です。

                VS2012上は、かつてから存在していたWebサイトに旧VerのODACが参照設定され(Web.config)、
                先日新設のWebサイトは、最新のODACが参照設定された状態です。


                かつてのWebサイトでも、今回新設したサイトでもそうなのですが、
                VS2012上のツールボックスに OracleDataAdapter、OracleConnection、OracleCommandBuilder、OracleCommandといった定番の4アイテムが現れてきません。
                「次のコントロールはツールボックスへ正常に追加されましたが、アクティブなデザイナーで有効になっていません"というメッセージが表示されてしまいました。

                一体何が原因で 私のツールボックスに これら4点が表示されてこないのでしょうか?
                解決に向けたヒントを頂けないでしょうか、よろしくお願い致します。
                • 5. Re: VisualStudioで開発したWebシステムのデータベース接続について、あれこれ
                  983702
                  前回のメッセージの中で、方向性の異なる質問を追記してしまいましたが、当初問い合わせた
                  バージョン違いのODACを一端末で共存させる方法(サイト違いで)は解決に至りましたので
                  本件をクローズさせていただきます、ありがとうございました。
                  =BINフォルダを用意するか、参照設定で片方だけを記述する。
                  • 6. Re: VisualStudioで開発したWebシステムのデータベース接続について、あれこれ
                    983702
                    一機器で異なるバージョンのODACを共存させ、各サイトを運用する、というテーマで問い合わせた本件、
                    開発環境(VisualStudio2012のデバッグモードでの動作のはなし)で無事達成できたのを喜び、一度クローズさせて頂きました。

                    しかし、VisualStudioから本番環境へ今回構築したサイトをBinフォルダも含め移行したところ、
                    『要求された .Net Framework データ プロバイダが見つかりません。これは、インストールされていない可能性があります。』とのエラーが発せられ、再度頭を悩ましております。

                    本番環境には運用済みサイトがあり、それが旧バージョンのODACを駆使したつくりになっていますから、
                    最新バージョンのODACのインストールで不具合を招かないか危惧しました。

                    これを受け、インストールでなく今回移行した新サイトのBinフォルダに
                    最新バージョンのOracle.DataAccessClient.dllを配置して、いざ~と思ったわけですが
                    上記エラーが発せられました。


                    GUCに最新バージョンのOracle.DataAccessClientも記述された上で、各サイト上のBinフォルダに該当dllを配置することが必要ということでしょうか?

                    どなたかご見解を頂けないでしょうか?