1

SQL Server 2008 を使用する Windows フォーム アプリケーションを作成しています。セットアップ プロジェクトで、必要に応じて SQL Server 2008 を確認し、ターゲット マシンにインストールします。私が必要としているのは、SQL Server 2008 (および 2008 のみ) のインスタンス名を取得する方法です。

現在、SmoApplication.EnumAvailableSqlServers関数を使用して返されたバージョンを確認していますが、デフォルトのインスタンスが表示されないことがわかりました。ターゲット マシンでインストーラーが SQL Server 2008 をセットアップした後にこのプログラムが実行されている場合、名前付きインスタンスが使用できず、既定のインスタンスしか使用できないため、これは問題です。

MSSQLSERVER以下の 2 つの理由から、従来の既定のインスタンスが機能するかどうかをやみくもにチェックしたくありません。

  1. これは、SQL Server 2008 のインストールから残った既定のインスタンスである可能性があり、アプリケーションで使用される DB にアクセスできません。それをスキップして、他の名前付きインスタンスをチェックしても、おそらく何も返されません。

  2. また、新しいバージョンの SQL Server 2012 の既定のインスタンスである可能性もあります。このインスタンスは DB にアクセスできますが、私の経験では、DB が新しい SQL Server バージョンに「アップグレード」され、以前のバージョンはアクセスできません。アクセスできません。私のアプリケーションは SQL Server 2008 で動作することを意図しているため、いくつかの問題が発生します。

そのため、SQL Server 2008 の名前付きインスタンス、または 2008 の場合は既定のインスタンスを使用する必要があります。

これを行う方法はありますか?

4

1 に答える 1

2

SqlDataSourceEnumerator次のように、System.Data.Sql名前空間 ( assembly System.Data.dll)のクラスを使用する必要があります。

SqlDataSourceEnumerator sdsEnumerator = SqlDataSourceEnumerator.Instance;

DataTable sqlServerInstances = sdsEnumerator.GetDataSources();

これらのクラスは Sql Server をインストールする必要はありませんが、任意の Sql Server インスタンスに関する情報を取得できます。これを思い出してください:

"

ネットワーク上のデータ ソースを検索するために SqlDataSourceEnumerator によって使用されるメカニズムの性質上、このメソッドは常に使用可能なサーバーの完全なリストを返すとは限らず、リストはすべての呼び出しで同じではない可能性があります。この関数を使用してユーザーがリストからサーバーを選択できるようにする場合は、サーバーの列挙が使用可能なすべてのサーバーを返さない場合に備えて、リストにない名前を入力するオプションも必ず指定してください。 . さらに、このメソッドの実行にはかなりの時間がかかる場合があるため、パフォーマンスが重要な場合は注意して呼び出してください。

"

メソッドGetDataSourceは必要なものです。ここでは、ドキュメントDataTableは、必要なすべての情報を含む を返します。

ServerName サーバーの名前。

InstanceName サーバー インスタンスの名前。サーバーがデフォルトのインスタンスとして実行されている場合は空白。

IsClustered サーバーがクラスターの一部であるかどうかを示します。

バージョン サーバーのバージョン (SQL Server 2000 の場合は 8.00.x、SQL Server 2005 の場合は 9.00.x、SQL Server 2008 の場合は 10.00.x、SQL Server 2008 R2 の場合は 10.50.x、SQL Server 2012 の場合は 11.00.x)。

クラスの完全なリファレンスはSqlDataSourceEnumeratorこちらにあります。

于 2012-08-27T17:27:45.983 に答える