Frage

Ich versuche, einen SSMS-Add-In zu erstellen. Eines der Dinge, die ich tun möchte, ist ein neues Abfragefenster zu erstellen und sie zu einer Server-Instanz (im Rahmen eines SQL Login) programmatisch verbinden. Ich kann die neue Abfrage Skript-Fenster ganz gut schaffen, aber ich kann nicht finden, wie es zu verbinden, ohne vorher etwas anderes manuell zu verbinden (wie das Objekt-Explorer).

Also mit anderen Worten, wenn ich Obect Explorer auf eine SQL-Instanz manuell verbinden und dann die Methode meines ausführen Add-In, das Abfragefenster erstellt, kann ich verbinde es mit diesem Code:

ServiceCache.ScriptFactory.CreateNewBlankScript(
     Editors.ScriptType.Sql,
     ServiceCache.ScriptFactory.CurrentlyActiveWndConnectionInfo.UIConnectionInfo,
     null);

Aber ich will nicht für die Verbindung auf CurrentlyActiveWndConnectionInfo.UIConnectionInfo verlassen. Ich möchte programmatisch einen SQL-Anmeldebenutzernamen und Passwort ein.

Hat jemand irgendwelche Ideen?

EDIT:

Ich habe es geschaffen, das Abfragefenster, indem den letzten Parameter auf eine Instanz System.Data.SqlClient.SqlConnection verbunden zu bekommen. Allerdings verwendet die Verbindung den Kontext der letzten Anmeldung, die verbunden war statt dem, was ich versuche, programmatisch zu setzen. Das heißt, der Benutzer es verbindet wie die in dem Verbindungsdialog ausgewählt, die Sie erhalten, wenn Sie die Schaltfläche Neue Abfrage klicken und verfügen nicht über ein Objekt-Explorer verbunden ist.

EDIT2:

Ich schreibe (oder schreiben Hoffnung,) ein Add-in, um automatisch eine SQL-Anweisung und die Ausführungsergebnisse zu unserem Fall-Tracking-System zu senden, wenn sie gegen unsere Produktions-Server laufen. Ein Gedanke, den ich hatte, war Schreibberechtigungen zu entfernen und zuweisen Anmeldungen durch dieses Add-in denen auch die Benutzer zwingen, einen Fall # geben Sie die Anweisung Cancelling, wenn sie nicht da ist. Ein anderer Gedanke, den ich hatte gerade habe, ist der Servername in ServiceCache.ScriptFactory.CurrentlyActiveWndConnectionInfo.UIConnectionInfo zu überprüfen und es zu unserer Liste der Produktions-Server zu vergleichen. Wenn sie paßt und es gibt dann keinen Fall # die Abfrage abzubrechen.

War es hilfreich?

Lösung

Ich habe einen Weg gefunden, dies zu tun, da es scheint keine Möglichkeit zu geben in das Verbindungsdialogfenster einhängen.

Was sind Sie arbeiten?

EDIT: Wenn ich richtig verstehe Sie die Abfrage wird ausgeführt abfangen wollen, und wenn es passt der Produktionsserver cancel es sonst den Text und die Ergebnisse in eine db schicken? hmm ... während dies möglich wäre aber ein echter großer Schmerz in den Hintern ist, und ich würde nicht ein Add-in für diese. und ein Add-In kann deaktiviert werden, deinstalliert usw. Sie besser versuchen, diese auf dem Produktionsserver mit dem richtigen Sicherheitseinstellungen zu tun.

Andere Tipps

Für den Fall, jemand anderes ist Suche nach einem Weg programmaticaly ein Abfragefenster zu erstellen und verbinden - ein kurzes Beispiel für SSMS 2012:

UIConnectionInfo u =new UIConnectionInfo();

u.ServerName = "TestPC\\ServerInstance";

u.ServerType = new Guid("8c91a03d-f9b4-46c0-a305-b5dcc79ff907");

u.AuthenticationType = 0;//Use AuthenticationType = 1 for SQL Server Authentication

u.AdvancedOptions.Set("DATABASE", "AdventureWorks2012");

IScriptFactory scriptFactory = ServiceCache.ScriptFactory;

if(scriptFactory != null)
{
  scriptFactory.CreateNewBlankScript(ScriptType.Sql, u, null);
} 

Dieser Code-Schnipsel wird ein neues Abfragefenster zu bestimmten Server und die Datenbank mit Windows Auth verbunden öffnen.

Das habe ich noch nicht ausprobiert, aber wusste nicht, ob Sie ihm einen Schuss gegeben haben.

Microsoft.SqlServer.Management.Smo.RegSvrEnum.UIConnectionInfo u = 
    new Microsoft.SqlServer.Management.Smo.RegSvrEnum.UIConnectionInfo();

Sollten können Sie Ihre eigene Verbindung zu machen. Aber wie gesagt, ich habe es noch nicht getestet. Sie erhalten eine Referenz müssen Microsoft.SqlServer.RegSvrEnum.dll.

Lassen Sie mich wissen, ob es funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top