2010-03-04 15 views
19

Devo trovare se il server SQL è installato su una macchina. Potrebbe essere qualsiasi versione di SQL Server (7, 2005,8, sql express ecc.). Abbiamo bisogno di conoscere queste informazioni mentre stiamo scrivendo un programma di installazione e dobbiamo mostrare all'utente che se il server SQL non è stato trovato, l'installazione non può procedere.Verificare se è installato il server SQL (qualsiasi versione)?

Ho visto versioni che utilizzano il registro, wmi, SMO o semplicemente si collegano all'istanza del server SQL (anche se non sarebbe d'aiuto in quanto non conosciamo il nome del server).

Stiamo utilizzando il programma di installazione Wix.

Qual è il modo corretto per farlo?

JD

+0

La routine di installazione deve essere eseguita sullo stesso server del server SQL? – BIDeveloper

risposta

16

Un modo semplice per elencare tutti i server SQL in rete è questo:

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("****************************************"); 
} 

Tratto da this blog post.

+0

@ Martin: Grazie, è esattamente ciò di cui ho bisogno. Ho appena bisogno di ottenere il nome della macchina per la macchina locale e basta controllare che sia nella lista. In questo modo saprò se sul computer locale è installata un'istanza sql. –

+5

@Martin Questo non richiederebbe l'esecuzione del servizio SQL Browser? – Thomas

+0

Ho una macchina su cui * solo * il server dei servizi SQL Server Analysis è installato come servizio autonomo. C'è * nessun * SQL sever engine/istanza su quella casella. Questo codice considererà anche il server di servizio SQL Serve Analysis come un'origine dati di SQL Server? – RBT

2

Date un'occhiata a questa domanda: How can I determine installed SQL Server instances and their versions?

Una delle risposte elenca le chiavi di registro che si potrebbe verificare per determinare la versione di SQL Server installato (s).

O controllare questo articolo CodeProject, se hai bisogno di trovare qualsiasi SQL Server nella rete locale: http://www.codeproject.com/KB/database/locate_sql_servers.aspx

+0

Abbiamo visto disinstallazioni di SQL Server che hanno lasciato voci di registro in giro. Inoltre, da un post precedente, non vi è alcuna garanzia che le voci del registro siano le stesse per versioni diverse. –

2

Avevo bisogno di qualcosa di simile, per scoprire un'istanza SQLServer locale per eseguire test automatici contro.

La SmoApplication era perfetto per questo requisito - il mio codice è simile al seguente:

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

Un altro semplice alternativa sarebbe quella di utilizzare la seguente riga di comando all'interno del vostro installatore:

sc queryex type= service | find "MSSQL" 

Il comando precedente elenca semplicemente tutti i servizi contenenti la parte MSSQL, elencando le istanze di SQL Server denominate e predefinite. Questo comando non restituisce nulla se non viene trovato nulla. Ritorna qualcosa del genere:

SERVICE_NAME: MSSQL$SQLEXPRESS 

Spero che questo aiuti.

Problemi correlati