1

私は c# (.Net 3.5) で書いていますが、ローカル マシンにインストールされている SQL のバージョンを取得したいと考えています。これは、アドレス\ユーザー名\パスワードを含む接続文字列がないことを意味します。データベースなどからデータを取得せずに、ローカル マシン上の SQL のバージョンが必要なだけです。

「Microsoft.SqlServer.Management.Smo.Wmi」を使ってみたのですが、SQLのバージョンに依存するようです。

何か案は?ありがとう、KM

編集:いくつかのメモ、

  • 各DLL「Microsoft.SqlServer.Management.Smo.Wmi」を試したりキャッチしたりしたくありません(異なるSQLバージョンには異なるDLLがあります)
  • 必要な唯一の詳細は、実行しているマシンの SQL バージョンです。
  • 接続文字列/ユーザー名/パスワードがありません
4

2 に答える 2

2

これをpowershellで試してください:

Get-WmiObject -Namespace "root\Microsoft\SqlServer\ComputerManagement10" -Class SqlServiceAdvancedProperty -ComputerName <SERVERNAME> | Format-Table ServiceName, PropertyName, PropertyNumValue, PropertyStrValue -AutoSize

代わりにroot\Microsoft\SqlServer\ComputerManagement10、SQL Server 2008 以降および 2005 の名前空間を使用してください。root\Microsoft\SqlServer\ComputerManagement

System.Management名前空間を使用して .net からこの結果を得ることができます。

アップデート

これを使用して、インストールされている SQL Server WMI プロバイダーの種類を検出できます。

public static IEnumerable<string> EnumCorrectWmiNameSpace()
{
    const string WMI_NAMESPACE_TO_USE = @"root\Microsoft\sqlserver";
    try
    {
        ManagementClass nsClass =
            new ManagementClass(
                new ManagementScope(WMI_NAMESPACE_TO_USE),
                new ManagementPath("__namespace"),
                null);

        return nsClass
            .GetInstances()
            .Cast<ManagementObject>()
            .Where(m => m["Name"].ToString().StartsWith("ComputerManagement"))
            .Select(ns => WMI_NAMESPACE_TO_USE + "\\" + ns["Name"].ToString());
    }
    catch (ManagementException e)
    {
        Console.WriteLine("Exception = " + e.Message);
    }

    return null;
}
于 2012-12-13T09:37:24.753 に答える
0

マシンにインストールされている SQL Server Insance を取得する場合は、次のコードを使用できます。

using Microsoft.SqlServer.Management.Smo.Wmi;
....

ManagedComputer mc = new ManagedComputer();

foreach (ServerInstance si in mc.ServerInstances)
{
     Console.WriteLine("The installed instance name is " + si.Name);
}

または、SQL Server のバージョンを取得する場合は、次のコードを使用できます。

try
{
    SqlConnection sqlConnection = new SqlConnection(connectionString);
    Microsoft.SqlServer.Management.Smo.Server server = new Microsoft.SqlServer.Management.Smo.Server(new Microsoft.SqlServer.Management.Common.ServerConnection(sqlConnection));

    switch (server.Information.Version.Major)
    {
      case 8:
        MessageBox.Show("SQL Server 2000");
        break;
      case 9:
        MessageBox.Show("SQL Server 2005");
        break;
      case 10:
        MessageBox.Show("SQL Server 2008");
                break;
      default:
        MessageBox.Show(string.Format("SQL Server {0}", server.Information.Version.Major.ToString())); 
        break;   
    }
}
catch (Microsoft.SqlServer.Management.Common.ConnectionFailureException)
{
    MessageBox.Show("Unable to connect to server",
        "Invalid Server", MessageBoxButtons.OK, MessageBoxIcon.Error);

}
于 2012-12-12T08:29:39.520 に答える