0

マシンにインストールされている SQL Server のすべてのインスタンスを返すはずのコードがあります。次のようになります。

DataTable dtLocalServers = SmoApplication.EnumAvailableSqlServers(true);

foreach (DataRow dServer in dtLocalServers.Rows)
{
   Console.WriteLine(dServer.ToString());
}

動作し、コンパイルされ、実行されます。ただし、結果のデータテーブルはあまり役に立ちません。次のようになります。

Name    |  Server   |   Instance   |   IsClustered | Version   |   IsLocal
IAN-PC  |  IAN-PC   |              |   True        |           |   True

問題は、これは結果を返しますが、サーバーに関する情報が得られないことです。特に、バージョン (SQL Server 2008 Express R2 または SQL Server Express 2012) を取得しようとしていますが、これは「バージョン」フィールドにあるはずです。このテストのためにローカルで 2 つのコピーを実行していることは事実です。

より良い結果を得るために他にできることはありますか?

編集: IAN-PC は私のコンピューターの名前です。私のコンピューターには、IANSQLEXP (SQL Server 2008 Express R2) と SQLEXPRESS (SQL Server Express 2012) の 2 つの SQL Server インスタンスが実行されています。SQL Server 構成マネージャーには、実行されていない 2 つのエージェントと、実行されていない SQL Server ブラウザーもあります。

4

2 に答える 2

0

サーバーを列挙して、List<Server>.

var servers =
    SmoApplication
        .EnumAvailableSqlServers()
        .AsEnumerable()
        .Select(s => new Server(s[0].ToString())) //Server name is first column
        .ToList();

Versionプロパティ onを使用しServerて、サーバーのバージョンを取得できます。

var unavailableServers= new List<Server>();
var activeServers = new List<Server>();
var tasks = new List<Task>();

foreach(var server in servers)
{
    var task =
        Task.Run(() =>
            {
                try
                {

                    server.ConnectionContext.Connect();
                    server.ConnectionContext.Disconnect();
                    activeServers.Add(server);
                }
                catch(ConnectionFailureException)
                {
                    unavailableServers.Add(server);
                }
            });

    tasks.Add(task);
}

Task.WaitAll(tasks.ToArray());
于 2013-04-16T18:43:12.763 に答える
0

ここでの問題は、私のコンピューターで SQL Server Browser が非アクティブ化されたことです。答えを見つけた投稿はhereでした。MSDN からの別の役立つリンクはこちらです。 助けてくれてありがとう、みんな!

于 2013-04-17T14:51:15.300 に答える