3

SQL2008サポートを.NET2.0アプリケーションに追加しようとしています。ただし、私の独特の欠点は、一部のユーザーが引き続きSQL2005を使用することであり、SQL2008クライアントコンポーネントのインストールをユーザーに要求したくないということです。

SQL2008に必要なDLLの実際のセットは、SQL2005とは異なります。コードは同じままにすることができます。

結論として、VS2005で(またはアセンブリファイルを手動で編集して)次のように言う方法が必要です。

ユーザーがDLL_1v2、DLL_2 v2、およびDLL_3v2を使用している場合はそれらを使用します。そうでない場合は、DLL_1v1およびDLL_2v1を使用してください。


リフレクションを使用してDLLをロードする方法を検討します。これは、SQL2008クライアントコンポーネントを必要とすることを除けば、ほとんど唯一のオプションのようです。

DLLの再配布については、ライセンスを読みました。そこには、私たちに当てはまるいくつかの疑わしい用語があります(たとえば、ホストされたソフトウェアの場合)。さらに、クライアントデータは非常に機密性が高いため、さらに複雑な問題になります。そのため、クライアントは広範な承認プロセスを経て、含まれているDLLなどのすべてをインストールできるようになります。

助けてくれてありがとう!


アイデアをありがとう!しかし、私たちはまだそこにいません...

  1. いいえ、ユーザーはインストール先のDBバージョンを選択しません。同じインストールであっても、SQL2005やSQL2008を許可することを目的としています。たとえば、管理アプリケーションを使用すると、ユーザーはさまざまなSQLサーバー間でデータベースインスタンスを管理できます。

  2. SQL2008のサポートが必要かどうかを選択するためのダイアログを追加できることを理解しています。ただし、これによりテストマトリックスがさらに拡張され、回避しようとしています。

  3. DLLを直接参照する必要があると思います。私はデータベースを使って、単に接続してクエリを実行するだけでなく、もっと多くのことを行っています。

必要なDLLは次のとおりです。

  • Microsoft.SqlServer.ConnectionInfo
  • Microsoft.SqlServer.Management.Sdk.Sfc
  • Microsoft.SqlServer.Smo
  • Microsoft.SqlServer.SmoExtended
  • Microsoft.SqlServer.SqlEnum

他のアイデア、考えはありますか?

4

6 に答える 6

1

リフレクションを使用すると、必要な DLL セットを実行時に動的にロードできます。そのため、利用可能なものを検出してロードできます。

唯一の欠点は、リフレクションを使用すると、作業が少し難しくなり、時間がかかることです。

于 2009-01-02T20:19:42.180 に答える
0

DLLを直接参照する必要はまったくありません。System.Data.SqlClientを使用してDBに接続している場合、.Netは両方のDBと通信する方法を認識します。System.Data.SqlClientを使用してサーバーと通信していない場合、次の質問は、DB通信のためにその名前空間に切り替えることができるかどうかになります。

これはあなたがやろうとしていることの領域から少し外れているかもしれませんが、誰もがサービス層に接続し、サービス層がルーティングとDBサーバーとの通信を処理し、あなたが通信できるサービス層の抽象化を作成することができますSOAPまたは.NetRemotingを介したサービスレイヤー。すべてのアプリをこの方法に切り替え始めました。これにより、ビジネスロジックとデータベースの抽象化を1つの制御された場所に集中させ、ローカルマシンでプレゼンテーションを操作できるようになります。

于 2008-12-31T16:08:31.887 に答える
0

ユーザーは、インストール先のDBバージョンを選択しますか?(ある種のインストールプロセスがあると思います)。選択したデータベースのバージョンに基づいて、インストール時にbinフォルダー内のdllファイルを交換できますか?

于 2008-12-31T16:34:01.743 に答える
0

サービス コンテナーを使用して、構成ファイルで依存関係を結び付けることができます。おそらく、いずれかのアセンブリ セットに依存するコードを個別のクラスとアセンブリに分離する必要があります。

すなわち。2005 用と 2008 用の 2 つのクラス ライブラリには、共通インターフェイスのセットを実装するクラスのセットが含まれています。次に、アプリケーションはサービス コンテナーに、共通インターフェイスの 1 つを実装するオブジェクトを要求するだけで、アプリケーション構成ファイルは、どの実装を使用するかを指示します。

もちろん、この構成は、アプリケーションの起動時にコードで行うこともできます。

このアプローチにより、別の dll のセットを使用するだけでなく、それ以上のことができるようになります。2005 で 2008 とは異なる処理が必要な場合は、それらの違いをクラス ライブラリに実装できます。

于 2009-01-02T23:08:29.267 に答える
0

基本的なデータ アクセスを行っているだけの場合は、心配する必要はありません。ネイティブ クライアントが正常に動作するはずであり、フレームワークをそれにフックさせることができます。SQL クライアントを指定すると、.Net は取得できるものを使用します。SMO オブジェクトを使用していますか? その場合、いくつかの依存関係の問題がある可能性があります。

于 2008-12-30T22:14:53.893 に答える
0

コードでテーブル アダプターの接続文字列を変更できるので、SQL2008 用にまったく新しい dll を作成する必要があったのでしょうか?

于 2008-12-30T16:35:42.440 に答える