2010-03-04 15 views
19

Muszę znaleźć, jeśli serwer SQL jest zainstalowany na komputerze. Może to być dowolna wersja serwera SQL (7, 2005,8, sql express itp.). Musimy znać te informacje, ponieważ piszemy instalator i musimy pokazać użytkownikowi, że jeśli serwer SQL nie zostanie znaleziony, instalacja nie będzie kontynuowana.Sprawdź, czy zainstalowany jest serwer SQL (dowolna wersja)?

Widziałem wersje, które używają rejestru, wmi, SMO lub po prostu łączą się z instancją serwera SQL (chociaż nie pomogłyby tutaj, ponieważ nie znamy nazwy serwera).

Używamy instalatora Wix.

Jaki jest prawidłowy sposób to zrobić?

JD

+0

Czy procedura instalacji musi działać na tym samym serwerze, co serwer SQL? – BIDeveloper

Odpowiedz

16

w prosty sposób wymienić wszystkich serwerów SQL w sieci to:

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

Zrobione z this blog post.

+0

@Martin: Dzięki, to jest dokładnie to, czego potrzebuję. Właśnie muszę teraz uzyskać nazwę komputera dla lokalnego komputera i po prostu sprawdzić, czy jest na liście. W ten sposób dowiem się, czy lokalny komputer ma zainstalowaną instancję sql. –

+5

@Martin Czy nie wymagałoby to uruchomienia usługi SQL Browser? – Thomas

+0

Mam maszynę, na której * tylko * serwer usług analizy SQL Server jest zainstalowany jako autonomiczna usługa. Na tym polu znajduje się * brak * serwera SQL/instancji SQL. Czy ten kod będzie traktował serwer usług SQL Serve Analysis również jako źródło danych SQL Server? – RBT

2

Wystarczy popatrzeć na to pytanie: How can I determine installed SQL Server instances and their versions?

Jedną z odpowiedzi wymienia klucze rejestru można sprawdzić w celu określenia zainstalowanej wersji (y) SQL Server.

Albo sprawdzić ten codeproject artykułu, jeśli trzeba znaleźć żadnych serwerów SQL w sieci lokalnej: http://www.codeproject.com/KB/database/locate_sql_servers.aspx

+0

Widzieliśmy odinstalowania serwera sql, który opuścił wpisy rejestru wokół. Również z poprzedniego posta nie ma gwarancji, że wpisy rejestru będą takie same dla różnych wersji. –

2

Potrzebowałem czegoś podobnego, aby odkryć lokalną instancję SQLServer, aby wykonać testy automatyczne.

SmoApplication był idealny do tego wymogu - mój kod wygląda następująco:

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

Innym prostym rozwiązaniem byłoby użyć następującego wiersza polecenia wewnątrz instalatora:

sc queryex type= service | find "MSSQL" 

Komenda powyżej po prostu wymienia wszystkie usługi zawierające część MSSQL, wymieniając nazwane i domyślne instancje SQL Server. To polecenie nie zwraca nic, jeśli nic nie zostanie znalezione. Zwraca coś takiego:

SERVICE_NAME: MSSQL$SQLEXPRESS 

Mam nadzieję, że to pomoże.

Powiązane problemy