トップ回答者
.XSDに採用する接続文字列を動的に指定できませんか?

質問
-
開発環境上でOracle接続のプロバイダでデザインを仕上げたXSDがあるのですが、本番環境移行時に、開発環境にしか存在していないバージョンのプロバイダであったことが発覚しました。(本番環境でサイトを立ち上げると、当該プロバイダのdllを読み込めないエラーを招く。4.0のdllが本番環境にない為)
開発環境のプロバイダのバージョンを本番環境と合わせデバッグモードでたちあげてみると、今度は当該サイトが.NetFrameWork4.0で進めているために、該当プロバイダのdllを読み込めない事態を招いてしまいました。(4.0のdllが開発環境にもなくなったため)
Web.ConfigのConnection部分でプロバイダの定義が存在すると、エラーになってしまうことが分かりましたので(=データ接続の必要なページに接続文字列・プロバイダを記述するやり方ではデータセットを生成できることを把握している)、今回のXSDについても、Web.Configから接続文字列を参照する方式でなく、
外部から指定するなり、動的に指定する仕組みを採用したいです。こいったことができるのか、できないのかを教えてくださいませんか?ASP.NETではやはりWeb.Config上の記述が必須でしょうか?
いずれにしても、本番環境に移行しようとしているサイトは.NetFrameWork=4.0であり、その4.0用のOracle接続のためのdllが存在していない状況ですのでWeb.Configにプロバイダの記述は避けたい、というのが私の推察です。
皆様のご見解をよろしくお願い致します。
PS:当該XSDはReportViewerが出力するObjectDataSourceの中で使用されています。
回答
-
以前のスレッド、
で以下のようなレスを差し上げていますが、理解されているでしょうか。
>> .XSD(TableAdapter)のConnectionを動的にこしらえることができれば、回避
>> できると思います。
> 私のレスを読んでますか? もしくは理解してますか? xsd ファイルは
> TableAdapter ではありません。今の問題を解決しなければ 1 ミリも前に
> 進めませんよ。 -
マブさんこんにちは。
余計な口出しかもしれませんが・・・
網羅的でない TRY AND ERROR の結果から間違った方向へ進んでいるという点をSuferOnWwwさんに指摘されているようにも見えます。
また、網羅的でない情報で解決方法をという、無理な注文を付けている事も指摘されているようにも見えます。多分、2つの問題がごちゃまぜになっています。
プロバイダの選択と接続文字列の設定方法は、本来別問題でなんの関連性もありません。(1)プロバイダ不一致問題。
アプリケーションは.NET Framework 4.0 という事ですから、まず1つ1つ整理してみる必要がありますよね。
・.NET Framework2.0用のプロバイダは、.NET Framework 4.0 で作成されたアプリケーションで利用可能なのか否か・それぞれのプロバイダが利用するSCHEMAの仕様に互換性があるか?
互換性が無ければ、参照アセンブリの設定を変えたところでうまく動作しないと思われます。・プロバイダ自体を一緒に配布すれば良いのではないか?
ライセンスの問題があるかもしれません。・他にも何かあるかも
と、使用するプロバイダについての条件と利用方法がクリアされたら、そのプのプロバイダを利用する事にして、次に、(2)動的に接続文字列を変更できるか?
構成ファイルに接続文字列を記述しておき、これを利用する事。
これはアプリケーション起動時に(動的に)、接続文字列を変更できるという事ですよね。
この場合の動的とは、コード上に静的に記述されている文字列に対し、動的であるという事ですよね。ビルドしなおす必要がありませんから。
XSD(SCHEMA)に記述されている接続文字列を利用する事も、静的な接続文字列を使うという事にあたると考えられるのではないでしょうか。
ただし、XSDの記述を手で変更した後、アプリケーションを実行すると変更した内容で接続できるというのであれば、構成ファイルと同義ですかね。
次に、該当プロセス実行中に何らかの条件などで動的に接続先を変更する。これは、プロバイダが利用する接続文字列を書き換える。という事ですよね。ということは、利用しているプロバイダ(Class等)にそのようなメソッドやプロパティがあるか?を調べればわかる事ですね。つまり、構成ファイルに接続文字列が書かれている事自体が問題なのではないって事。
とはいっても、データベースへの接続から何から何までを自分の書いたコードではなく、且つ隠ぺいされた場所で実行されている場合には、簡単に変更できない可能性もあります。
ReportViewerという事は、ASP.NET組込の?またはReporting Services の?どっちなの?って事もありますし。といろいろなケースもあり得ますから、単に接続情報をUPすれば良いというわけではなく、もっとアプリケーションの性格やコード関する情報をUPしたほうが良いかもしれません。(という事が往々にしてあります)
のように順を追って解決(または質問)していくのが良いと思いました。
あと、一見、回答者の話が遠回りのように感じても、実は近道だったり、状況整理にとっても役立つって事が殆どですので、よく見ることをお勧めします。基本に立ち返ってるつもりで全然ちが~うなんて事も多々ありますから。
すべての返信
-
以前のスレッド、
で以下のようなレスを差し上げていますが、理解されているでしょうか。
>> .XSD(TableAdapter)のConnectionを動的にこしらえることができれば、回避
>> できると思います。
> 私のレスを読んでますか? もしくは理解してますか? xsd ファイルは
> TableAdapter ではありません。今の問題を解決しなければ 1 ミリも前に
> 進めませんよ。 -
マブさんこんにちは。
余計な口出しかもしれませんが・・・
網羅的でない TRY AND ERROR の結果から間違った方向へ進んでいるという点をSuferOnWwwさんに指摘されているようにも見えます。
また、網羅的でない情報で解決方法をという、無理な注文を付けている事も指摘されているようにも見えます。多分、2つの問題がごちゃまぜになっています。
プロバイダの選択と接続文字列の設定方法は、本来別問題でなんの関連性もありません。(1)プロバイダ不一致問題。
アプリケーションは.NET Framework 4.0 という事ですから、まず1つ1つ整理してみる必要がありますよね。
・.NET Framework2.0用のプロバイダは、.NET Framework 4.0 で作成されたアプリケーションで利用可能なのか否か・それぞれのプロバイダが利用するSCHEMAの仕様に互換性があるか?
互換性が無ければ、参照アセンブリの設定を変えたところでうまく動作しないと思われます。・プロバイダ自体を一緒に配布すれば良いのではないか?
ライセンスの問題があるかもしれません。・他にも何かあるかも
と、使用するプロバイダについての条件と利用方法がクリアされたら、そのプのプロバイダを利用する事にして、次に、(2)動的に接続文字列を変更できるか?
構成ファイルに接続文字列を記述しておき、これを利用する事。
これはアプリケーション起動時に(動的に)、接続文字列を変更できるという事ですよね。
この場合の動的とは、コード上に静的に記述されている文字列に対し、動的であるという事ですよね。ビルドしなおす必要がありませんから。
XSD(SCHEMA)に記述されている接続文字列を利用する事も、静的な接続文字列を使うという事にあたると考えられるのではないでしょうか。
ただし、XSDの記述を手で変更した後、アプリケーションを実行すると変更した内容で接続できるというのであれば、構成ファイルと同義ですかね。
次に、該当プロセス実行中に何らかの条件などで動的に接続先を変更する。これは、プロバイダが利用する接続文字列を書き換える。という事ですよね。ということは、利用しているプロバイダ(Class等)にそのようなメソッドやプロパティがあるか?を調べればわかる事ですね。つまり、構成ファイルに接続文字列が書かれている事自体が問題なのではないって事。
とはいっても、データベースへの接続から何から何までを自分の書いたコードではなく、且つ隠ぺいされた場所で実行されている場合には、簡単に変更できない可能性もあります。
ReportViewerという事は、ASP.NET組込の?またはReporting Services の?どっちなの?って事もありますし。といろいろなケースもあり得ますから、単に接続情報をUPすれば良いというわけではなく、もっとアプリケーションの性格やコード関する情報をUPしたほうが良いかもしれません。(という事が往々にしてあります)
のように順を追って解決(または質問)していくのが良いと思いました。
あと、一見、回答者の話が遠回りのように感じても、実は近道だったり、状況整理にとっても役立つって事が殆どですので、よく見ることをお勧めします。基本に立ち返ってるつもりで全然ちが~うなんて事も多々ありますから。
-
-
> 「XSDはまずそういうものではない」という見解を示しているのでしょうか?
xsd ファイルは TableAdapter ではないというところを理解されてないようですね。
Web サイトプロジェクトで開発しているのでしたっけ?
そうだとすると Visual Studio だけ見ていては分からないかもしれませんが、型付 DataSet + TableAdapter のソースコードは、xsd ファイルを元に自動生成され、以下のフォルダの奥深くに置かれます。
C:\Windows\Microsoft.NET\Framework\<.NET Framework のバージョン>\Temporary ASP.NET Files
Web アプリケーションプロジェクトの場合は、Visual Studio のソリューションエクスプローラーで見ると、xxx.Designer.cs というファイルの中にソースコードが自動生成されるはずです。
今は、そのソースコードが自動生成できてない状態です。
ソースコードが生成されて、コンパイルされて初めて動くのに、ソースコードさえないのでは何ともならないということです。
動的に接続文字列を設定する云々は(それで動くようになるのかは知りませんが)、ソースコードがあっての話です。