2010-03-04 6 views
19

Je dois trouver si le serveur SQL est installé sur une machine. Il pourrait s'agir de n'importe quelle version de SQL Server (7, 2005,8, sql express etc). Nous devons connaître cette information pendant que nous écrivons un programme d'installation et devons montrer à l'utilisateur que si le serveur SQL n'a pas été trouvé, l'installation ne peut pas continuer. J'ai vu des versions qui utilisent le registre, wmi, SMO ou tout simplement se connecter à l'instance du serveur SQL (bien que cela n'aiderait pas ici car nous ne connaissons pas le nom du serveur).Vérifiez si le serveur SQL (quelle que soit la version) est installé?

Nous utilisons le programme d'installation de Wix.

Quelle est la bonne façon de faire cela?

JD

+0

Votre routine d'installation doit-elle être exécutée sur le même serveur que le serveur SQL? – BIDeveloper

Répondre

16

Une façon simple de lister tous les serveurs SQL sur le réseau est le suivant:

using System.Data; 
using System.Data.Sql; 
using System; 

... 

SqlDataSourceEnumerator sqldatasourceenumerator1 = SqlDataSourceEnumerator.Instance; 
DataTable datatable1 = sqldatasourceenumerator1.GetDataSources(); 
foreach (DataRow row in datatable1.Rows) 
{ 
    Console.WriteLine("****************************************"); 
    Console.WriteLine("Server Name:"+row["ServerName"]); 
    Console.WriteLine("Instance Name:"+row["InstanceName"]); 
    Console.WriteLine("Is Clustered:"+row["IsClustered"]); 
    Console.WriteLine("Version:"+row["Version"]); 
    Console.WriteLine("****************************************"); 
} 

Taken de this blog post.

+0

@Martin: Merci, c'est exactement ce dont j'ai besoin. J'ai juste besoin maintenant d'obtenir le nom de machine pour la machine locale et vérifie juste qu'il est dans la liste. De cette façon, je saurai si une instance sql est installée sur la machine locale. –

+5

@Martin Cela ne nécessite-t-il pas l'exécution du service SQL Browser? – Thomas

+0

J'ai une machine sur laquelle * seulement * le serveur de services SQL Server Analysis est installé en tant que service autonome. Il y a * aucun * moteur/instance de serveur SQL sur cette boîte. Ce code considère-t-il également le serveur du service SQL Serve Analysis comme une source de données SQL Server uniquement? – RBT

2

Jetez un oeil à cette question: How can I determine installed SQL Server instances and their versions?

L'une des réponses répertorie les clés de registre, vous pouvez vérifier pour déterminer la version installée de SQL Server (s).

Ou consultez cet article CodeProject si vous avez besoin de trouver des serveurs SQL dans le réseau local: http://www.codeproject.com/KB/database/locate_sql_servers.aspx

+0

Nous avons vu des désinstallations de sql server qui ont quitté des entrées de registre autour. En outre, à partir d'un post précédent, il n'y a aucune garantie que les entrées de registre seront les mêmes pour les différentes versions. –

2

J'avais besoin de quelque chose de similaire pour découvrir une instance SQLServer locale pour effectuer des tests automatisés.

Le SmoApplication était parfait pour cette exigence - mon code ressemble à ceci:

public static string GetNameOfFirstAvailableSQLServerInstance() 
{ 
    // Only search local instances - pass true to EnumAvailableSqlServers 
    DataTable dataTable = SmoApplication.EnumAvailableSqlServers(true); 
    DataRow firstRow = dataTable.Rows[0]; 
    string instanceName = (string)firstRow["Name"]; 
    return instanceName; 
} 
2

Une autre alternative simple serait d'utiliser la ligne de commande suivante dans votre installation:

sc queryex type= service | find "MSSQL" 

La commande ci-dessus répertorie simplement tous les services contenant la partie MSSQL, répertoriant les instances SQL Server nommées et par défaut. Cette commande ne retourne rien si rien n'est trouvé. Il retourne quelque chose comme ceci:

SERVICE_NAME: MSSQL$SQLEXPRESS 

Espérons que cela aide.

Questions connexes