Ich schrieb dies die SQL Server-Instanzen auf dem lokalen Computer für die Suche:Wie Sie eine Verbindung zu Sqlserver2008 mithilfe von SMO herstellen, muss jede Problemumgehung durchgeführt werden?
using System;
using System.Data;
using Microsoft.SqlServer.Management.Smo;
namespace Application3
{
class Program
{
static void Main(string[] args)
{
string srvname = string.Empty; string srvnames = null;
DataTable dt = SmoApplication.EnumAvailableSqlServers(true);
Console.WriteLine("------------->" + dt.Rows.Count);
foreach (DataRow dr in dt.Rows)
{
try{
Console.WriteLine("-->Instance " + dr["name"]);
Server srv = new Server((string)dr["name"]);
foreach (Database db in srv.Databases)
Console.WriteLine(db.Name);
}catch(Exception e)
{
Console.writeLine(e.toString());
}
}
}
}
I 3 Instanzen in meinem lokalen Rechner
- rk2k3-vm-sr (SQL2008-Instanz)
- rk2k3 habe -VM-sr \ sql2k8express (sql2k8 Instanz zu)
- rk2k3-vm-sr \ sqlexpress (sql2k5 Instanz)
Aber es zeigt nur 2 und 3. 1 zeigt nicht. Und wenn ich verbinde mit Server-Objekt schlägt es für sql2k8express fehl. Hier
ist der Ausgang ....
-> Instanz RK2K3-VM-SR \ SQLEXPRESS
Master
Modell
msdb
tempdb
-> Instanz RK2K3-VM-SR \ SQL2K8EXPRESS
Microsoft.SqlServer.Management.Common.ConnectionFailureException: Fehler ect Server RK2K3-VM-SR \ SQL2K8EXPRESS Conn. ---> Microsoft.SqlServer.Management.Com mon.ConnectionFailureException: Diese SQL Server-Version (10.0) wird nicht unterstützt. bei Microsoft.SqlServer.Management.Common.ConnectionManager.CheckServerVersion (Serverversion Version) bei Microsoft.SqlServer.Management.Common.ConnectionManager.InternalConnect (Wi ndowsIdentity impersonatedIdentity) bei Microsoft.SqlServer.Management.Common.ConnectionManager.Connect() --- Ende der inneren Ausnahme Stack-Trace --- bei Microsoft.SqlServer.Management.Common.ConnectionManager.Connect() bei Microsoft.SqlServer.Management.Common.ConnectionManager.PoolConnect() bei Microsoft.SqlServer .Management.Common.ConnectionManager.get_ServerVersion ( ) bei Microsoft.SqlServer.Management.Smo.ExecutionManager.get_ServerVersion() bei Microsoft.SqlServer.Management.Smo.SqlSmoObject.GetDbComparer (Boolean INSE rver) bei Microsoft.SqlServer.Management.Smo.SqlSmoObject.InitializeStringComparer() bei Microsoft.SqlServer.Management.Smo.AbstractCollectionBase.get_StringCompar er () bei Microsoft.SqlServer.Management.Smo.SimpleObjectCollectionBase.InitInnerCol lection() bei Microsoft.SqlServer.Management.Smo.SmoCollectionBase.get_InternalStorage() bei Microsoft.SqlServer.Management.Smo.SmoCollectionBase.InitializeChildCollec tion (Boolean aktualisieren) bei Microsoft.SqlServer.Management.Smo.SmoCollectionBase.GetEnumerator() bei ConsoleApplication3.Program.Main (Stri ng [] args) in C: \ Dokumente und Settin gs \ Administrator.APP \ Desktop \ ConsoleApplication3 \ Program.cs: line 25
Wie kann ich das beheben? Meine System-Firewall ist deaktiviert und alle SQL-Dienste werden ausgeführt.
Nein, es ausschließlich für SQL2008 – Cute
Zuvor DMO geschrieben wird verwendet sql2k8 i SMo verwendet zu Entdecken, aber es zeigt die oben genannten Probleme. – Cute
versuchen, DataTable dt = SmoApplication.EnumAvailableSqlServers (True) zweimal auszuführen. Grund: Der Computer, auf dem der SQL Server-Instanz ausgeführt wird, empfängt möglicherweise nicht rechtzeitig Antworten auf die EnumAvailableSqlServers-Methode. Die zurückgegebene Liste zeigt möglicherweise nicht alle verfügbaren Instanzen von SQL Server im Netzwerk an. Wenn Sie die EnumAvailableSqlServers-Methode bei nachfolgenden Versuchen aufrufen, werden möglicherweise mehr Server im Netzwerk sichtbar. Diese Methode kann die lokale Instanz nicht auflisten, wenn eine Firewall auf dem Server ausgeführt wird. Die Firewall blockiert jeden Broadcast-Verkehr ausgegeben –