J'essaie d'utiliser SMO (VS 2010, SQL Server 2008) pour me connecter à SQL Server et voir la configuration du protocole du serveur. Je peux me connecter et répertorier les services et les protocoles client ainsi que le compte service MSSQLSERVER s'exécute sous. Toutefois, la collection ServerInstances est vide. La seule instance sur le serveur cible est la valeur par défaut (MSSQLSERVER), ne devrait-elle pas être dans la collection? Comment puis-je obtenir une instance pour inspecter la collection ServerProtocols? Voici le code que je utilise:SMO ManagedComputer.ServiceInstances est vide
class Program
{
static void Main(string[] args)
{
//machine hosting installed sql server instance
ManagedComputer host = new ManagedComputer("fully-qualified.host.name");
if (host.ServerInstances.Count != 0)
{
//why is this 0? Is it because only the DEFAULT instance exists?
Console.WriteLine("/////////////// INSTANCES ////////////////");
foreach (ServerInstance inst in host.ServerInstances)
{
Console.WriteLine(inst.Name);
}
}
Console.WriteLine("/////////////// SERVICES ////////////////");
// enumerate sql services (looking for MSSSQLSERVER)
foreach (Service svc in host.Services)
{
Console.WriteLine(svc.Name);
}
Console.WriteLine("/////////////// DETAILS ////////////////");
// get name of MSSQLSERVER instance from user (pick from list above)
Service mssqlserver = host.Services["MSSQLSERVER"];
// print service account: .\{account} == "local account", "LocalSystem", "NetworkService", {domain}\{account} == "domain account"
Console.WriteLine("Service Account: {0}", mssqlserver.ServiceAccount);
// get client protocols
foreach (ClientProtocol cp in host.ClientProtocols)
{
Console.WriteLine("{0} {1} ({2})", cp.Order, cp.DisplayName, cp.IsEnabled ? "Enabled" : "Disabled");
}
}
}
J'ai aussi essayé:
Urn u = new Urn("ManagedComputer[@Name='fully-qualified.host.name']/ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Tcp']");
ServerProtocol tcp = host.GetSmoObject(u) as ServerProtocol;
if (tcp != null)
{
Console.WriteLine("{0}", tcp.DisplayName);
}
Mais je reçois un message d'erreur indiquant: "les expressions de l'enfant ne sont pas pris en charge." Des idées ce qui ne va pas?