Как связать новый скрипт запроса с надстройкой SSMS? - PullRequest
3 голосов
/ 19 июня 2009

Я пытаюсь создать надстройку SSMS. Одна из вещей, которые я хочу сделать, - создать новое окно запросов и программно подключить его к экземпляру сервера (в контексте входа в систему SQL). Я могу просто создать новое окно сценария запроса, но не могу найти, как его подключить, предварительно не подключившись вручную к чему-то другому (например, к Обозревателю объектов).

Другими словами, если я подключаю Obect Explorer к экземпляру SQL вручную, а затем выполняю метод моей надстройки, которая создает окно запроса, я могу подключить его с помощью этого кода:

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

Но я не хочу полагаться на CurrentActiveWndConnectionInfo.UIConnectionInfo для подключения. Я хочу программно установить имя пользователя и пароль для входа в SQL.

У кого-нибудь есть идеи?

EDIT:

Мне удалось подключить окно запроса, установив последний параметр для экземпляра System.Data.SqlClient.SqlConnection. Тем не менее, соединение использует контекст последнего входа в систему, который был подключен вместо того, что я пытаюсь установить программно. То есть пользователь, к которому он подключается, - это тот, который выбран в диалоге подключения, который вы получаете, когда нажимаете кнопку «Новый запрос» и не подключен проводник объектов.

EDIT2:

Я пишу (или надеюсь написать) надстройку для автоматической отправки оператора SQL и результатов выполнения в нашу систему отслеживания случаев при работе с нашими производственными серверами. Одна мысль, которая у меня была, заключалась в том, чтобы удалить разрешения на запись и назначить логины через эту надстройку, что также заставит пользователя вводить регистр # отменяя инструкцию, если ее там нет. Еще одна мысль, которую я только что имел, это проверить имя сервера в ServiceCache.ScriptFactory.CurrentlyActiveWndConnectionInfo.UIConnectionInfo и сравнить его с нашим списком рабочих серверов. Если он совпадает, а номер дела отсутствует, отмените запрос.

Ответы [ 3 ]

3 голосов
/ 03 января 2014

На всякий случай, если кто-то еще ищет способ программно создать и подключить окно запроса - короткий пример для 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);
} 

Этот фрагмент кода откроет новое окно запроса, подключенное к указанному серверу и базе данных с аутентификацией Windows.

1 голос
/ 15 августа 2009

Я еще не пробовал, но не знал, сделали ли вы укол.

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

Должен позволить вам установить собственное соединение. Но, как я уже сказал, я еще не проверял это. Вам понадобится ссылка на Microsoft.SqlServer.RegSvrEnum.dll.

Дайте мне знать, если это работает.

1 голос
/ 19 июня 2009

Я не нашел способа сделать это, поскольку, похоже, нет способа подключиться к диалоговому окну соединения.

над чем вы работаете?

EDIT: Если я правильно понимаю, вы хотите перехватить выполняемый запрос, и если он соответствует производственному серверу, отмените его, иначе отправьте текст и результаты в базу данных? хм ... хотя это было бы возможно, но это действительно большая боль в спине, и я бы не использовал надстройку для этого. плюс надстройка может быть отключена, удалена и т. д. вам лучше попробовать сделать это с правильной настройкой безопасности на вашем производственном сервере.

...