Domanda

Sto cercando di creare un componente aggiuntivo SSMS. Una delle cose che voglio fare è creare una nuova finestra di query e collegarla a livello di programmazione a un'istanza del server (nel contesto di un accesso SQL). Posso creare bene la nuova finestra di script di query ma non riesco a trovare il modo di collegarla senza prima collegarmi manualmente a qualcos'altro (come Esplora oggetti).

Quindi, in altre parole, se connetto Obect Explorer manualmente a un'istanza SQL e quindi eseguo il metodo del mio componente aggiuntivo che crea la finestra della query, posso collegarlo utilizzando questo codice:

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

Ma non voglio fare affidamento su CurrentActiveWndConnectionInfo.UIConnectionInfo per la connessione. Voglio impostare un nome utente e una password di accesso SQL a livello di codice.

Qualcuno ha qualche idea?

Modifica

Sono riuscito a collegare la finestra della query impostando l'ultimo parametro su un'istanza di System.Data.SqlClient.SqlConnection. Tuttavia, la connessione utilizza il contesto dell'ultimo accesso che è stato connesso anziché quello che sto cercando di impostare programmaticamente. Cioè, l'utente che si connette come quello selezionato nella finestra di dialogo Connessione che si ottiene quando si fa clic sul pulsante Nuova query e non è collegato un Esplora oggetti.

EDIT2:

Sto scrivendo (o sperando di scrivere) un componente aggiuntivo per inviare automaticamente un'istruzione SQL e i risultati dell'esecuzione al nostro sistema di tracciamento dei casi quando eseguito contro i nostri server di produzione. Un pensiero che avevo era di rimuovere i permessi di scrittura e assegnare gli accessi attraverso questo componente aggiuntivo che costringerà anche l'utente a inserire un caso # annullando l'istruzione se non è lì. Un altro pensiero che ho appena avuto è quello di ispezionare il nome del server in ServiceCache.ScriptFactory.CurrentlyActiveWndConnectionInfo.UIConnectionInfo e confrontarlo con il nostro elenco di server di produzione. Se corrisponde e non c'è nessun caso # allora annulla la query.

È stato utile?

Soluzione

Non ho trovato un modo per farlo, poiché non sembra esserci modo di agganciarlo alla finestra di dialogo della connessione.

a cosa stai lavorando?

EDIT: Se ho capito bene, vuoi intercettare la query in esecuzione e se corrisponde al server di produzione, annullala altrimenti invia il testo e i risultati a un db? hmm ... mentre questo sarebbe possibile, ma è un vero e proprio grande dolore alle spalle, e non userei un componente aggiuntivo per questo. inoltre un componente aggiuntivo può essere disabilitato, disinstallato ecc. è meglio provare a farlo con un'adeguata configurazione della sicurezza sul server di produzione.

Altri suggerimenti

Nel caso in cui qualcun altro stia cercando un modo per creare e connettere una finestra di query a livello di codice - un breve esempio di 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);
} 

Questo frammento di codice aprirà una nuova finestra di query connessa al server e al database specificati con Windows Aut.

Non l'ho ancora provato ma non sapevo se ci hai provato.

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

Dovrebbe consentirti di stabilire la tua connessione. Ma come ho detto, non l'ho ancora testato. Sarà necessario un riferimento a Microsoft.SqlServer.RegSvrEnum.dll .

Fammi sapere se funziona.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top