Как подключить новый скрипт запроса к надстройке SSMS?

StackOverflow https://stackoverflow.com/questions/1016343

  •  06-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Редактировать:

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

РЕДАКТИРОВАТЬ 2:

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

Это было полезно?

Решение

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

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

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

Другие советы

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

Я еще не пробовал это, но не знал, попробовали ли вы.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top