@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

SQLSever2005のDTSをVS2003から起動したい

1
投稿者投稿内容
YOSHI
会議室デビュー日: 2006/10/20
投稿数: 14
投稿日時: 2007-07-11 11:09
いつもお世話になっております。

SQLSever2005のDTS機能をVS2003から動かそうとし、DTSのパッケージも作成し、そのパッケージを実行するためのDLLを使用しようとしましたが、以下の点でエラーが出てしまいました。

DTS機能の「Microsoft.SQLServer.ManagedDTS.dll」がFrameWork2.0で作成されている。
VS2003上で参照設定に追加しようとすると、エラーメッセージが出てしまいます。
(参照を追加する際は、.NETにはないので自分でパスを指定して追加しました)

エラーメッセージ
「Microsoft.SQLServer.ManagedDTS.dllへの参照を追加できませんでした。これは有効なアセンブリまたはCOMコンポーネントではありません。拡張子'dll'を持つアセンブリまたはCOMコンポーネントのみを参照することができます。ファイルがアクセス可能で、有効なアセンブリまたはCOMコンポーネントであることを確認してください。」

VS2005の環境では、参照設定の.NETにDLLがありましたので、それを追加してみましたが問題なく追加でき、問題なく使用できました。
(ならVS2005で作成すればいいのでは。という話は要件上できません。我侭ですみません)

いろいろ調べてみて、VB.NETコンパイラ(vbc.exe)で、対象のDLLをコンパイルすれば.NETのアセンブリとして参照に追加されるとありましたので、「csc.rsp」に追加して実行してみましたが、結果は変わりませんでした。

どのような作業を行えば使用できるようになるのでしょうか?
わかる人がおりましたら、教えていただければ本当に助かります。
よろしくお願い致します。

補足
VS2005の使用方法は以下のMSDNで紹介されていましたので、同じことをVS2003でしたいと思ってくださるとありがたいです。

プログラムによるローカル パッケージの読み込みと実行
http://msdn2.microsoft.com/ja-jp/library/ms136090.aspx

[ メッセージ編集済み 編集者: YOSHI 編集日時 2007-07-11 11:20 ]
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2007-07-11 12:14
やろうとしている事の詳細が分からないので断定はできませんが、多分無理です。

現在の .NET Framework の制限の一つに「同一プロセスに別バージョンの CLR をロードできない」というのがあります。

従って、今回の例では、Visual Studio 2003 で作成しようとしている何かは CLR 1.1 上で動作し、Microsoft.SQLServer.ManagedDTS.dll は CLR 2.0 上で動作するわけですが、最初のアセンブリ(ここでは Visual Studio 2003 で作成しようとしている何かとします)が、CLR 1.1 をロードしてしまっているので、同じプロセスに CLR 2.0 をロードできず、基本的に Microsoft.SQLServer.ManagedDTS.dll は動作しないはずです(若干の頑張りは見せるかもしれませんが)。

現状では、同一プロセス上で動く全てのアセンブリの「対象 .NET Framework のバージョン」は合わせるしかありません。

厳密には、合わせるべきは .NET Framework のバージョンではなく、CLR のバージョンである事に注意してください。例えば、.NET Framework 2.0 と .NET Framework 3.0 のアセンブリは同居可能です。CLR のバージョンが同一であるため。

_________________
囚人のジレンマな日々
YOSHI
会議室デビュー日: 2006/10/20
投稿数: 14
投稿日時: 2007-07-11 14:49
囚人さん、回答ありがとうございます。
引用:

囚人さんの書き込み (2007-07-11 12:14) より:
現在の .NET Framework の制限の一つに「同一プロセスに別バージョンの CLR をロードできない」というのがあります。

従って、今回の例では、Visual Studio 2003 で作成しようとしている何かは CLR 1.1 上で動作し、Microsoft.SQLServer.ManagedDTS.dll は CLR 2.0 上で動作するわけですが、最初のアセンブリ(ここでは Visual Studio 2003 で作成しようとしている何かとします)が、CLR 1.1 をロードしてしまっているので、同じプロセスに CLR 2.0 をロードできず、基本的に Microsoft.SQLServer.ManagedDTS.dll は動作しないはずです(若干の頑張りは見せるかもしれませんが)。




CLRのバージョンが違っても動かせればよかったのですが、完全に否定されているのならば仕方ありませんね・・・。
なんとか、CLR1.1に偽装できないものですかね。

他の方法として、
同一プロセスでなければいいということで、VS2005でDTS呼出機能のEXEを作成し、VS2003でそのEXEを実行してみました。

これならばうまく実行できました。(引数や戻り値あたりで課題が残っていますが)
Frameworkが2.0も必要になったり、VS2005も必須になったり問題な気もしますが、とりあえずはこの方法を考えてみたいと思います。

回答ありがとうございました。
yawata133
ベテラン
会議室デビュー日: 2007/04/06
投稿数: 76
投稿日時: 2007-07-11 17:49
たぶん向学心のためにDTSパッケージをASPから動かすなんてすごいことをやっているので感動します。
私なら、データのインポートならば、bulkinsert のSQL文をASPから発行させて簡単に終わらせてしまうとこです。
YOSHI
会議室デビュー日: 2006/10/20
投稿数: 14
投稿日時: 2007-07-12 09:24
引用:

yawata133さんの書き込み (2007-07-11 17:49) より:
たぶん向学心のためにDTSパッケージをASPから動かすなんてすごいことをやっているので感動します。
私なら、データのインポートならば、bulkinsert のSQL文をASPから発行させて簡単に終わらせてしまうとこです。



yawata133さんありがとうございます。
向上心のためだなんて・・・。単に今までSQLServer2000とVS2003で動かしてたシステム(DTSパッケージはプログラムから起動)がありまして。
それのDBだけSQLServer2005に変える必要があったのでこんな事態に陥ってしまったわけです。
SQLServer2000で作成したDTSパッケージからSQLServer2005のDBが操作できれば一番よかったのですが、できなかったため(ここが根本的に間違ってたりして)DTSパッケージもSQLServer2005用に移行しました。

整理しますと。
@VS2003、SQLServer2000で動いているシステムがある。(DTSパッケージ使用)
ASQLServer2000をSQLServer2005にバージョンアップする事になった。
BSQLServer2000のDTSパッケージがSQLServer2005で使用できなかったので、
  新しくSQLServer2005で作成した。
CVS2003から、新しく作成したSQLServer2005のDTSパッケージが使用できなかった。

です。
(なんでVSも、2005に変えてくれなかったんだろう・・・)

駄文失礼しました。
1

スキルアップ/キャリアアップ(JOB@IT)