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

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

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

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

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

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

ИЗМЕНИТЬ:

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

EDIT2:

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


person squillman    schedule 19.06.2009    source источник
comment
вы пытаетесь создать свой собственный диалог подключения?   -  person Mladen Prajdic    schedule 19.06.2009
comment
Да, в основном. Пользователь не будет вводить данные для входа самостоятельно. Он будет извлечен из постоянного хранилища, которое у меня уже работает.   -  person squillman    schedule 19.06.2009
comment
В свое время я слышал, что нет возможности создать надстройку для SSMS. Это изменилось?   -  person John Saunders    schedule 19.06.2009
comment
Возможно создание надстроек SSMS. Проверьте тот, который я сейчас разрабатываю: www.SsmsToolsPack.com. однако он полностью не поддерживается, и модель надстроек уже дважды ломалась с 2005 sp2 и 2008. Так что я бы не стал делать из этого полноценный бизнес без серьезного тестирования, а затем еще одного тестирования :)   -  person Mladen Prajdic    schedule 19.06.2009
comment
Верно. По сути, это взлом модели расширяемости VS, поскольку SSMS в значительной степени построен на коде VS (и SMO). На данный момент я полностью согласен с тем, что пока не стоит прилагать усилия всей своей жизни... Думаю, прошлой ночью я потерял половину своих волос, а другая половина поседела. Даст Бог, MS создаст для него расширяемую структуру в следующий раз.   -  person squillman    schedule 19.06.2009


Ответы (3)


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

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

РЕДАКТИРОВАТЬ: Если я правильно понимаю, вы хотите перехватить выполняемый запрос, и если он соответствует рабочему серверу, отмените его, иначе отправьте текст и результаты в БД? хм ... хотя это было бы возможно, но это настоящая головная боль, и я бы не стал использовать надстройку для этого. плюс надстройка может быть отключена, удалена и т. д. вам лучше попробовать сделать это с правильной настройкой безопасности на рабочем сервере.

person Mladen Prajdic    schedule 19.06.2009
comment
Ох, как муторно... На самом деле вы один из тех, кто, как я надеялся, мог бы мне помочь после того, как прошлой ночью нашел ваш сайт надстроек! Я отредактировал вопрос, включив в него краткое изложение проекта. - person squillman; 19.06.2009
comment
На ваше редактирование: не совсем. Я по-прежнему хочу, чтобы запрос выполнялся в производственной системе, я просто хочу убедиться, что запрос и результаты, выполняемые на наших производственных серверах, отправляются в нашу систему отслеживания проблем. Я не беспокоюсь об отключении надстройки, это просто будет для нашего отдела. Это решение было бы альтернативным, ЕСЛИ я не могу программно войти в систему... - person squillman; 19.06.2009
comment
извините, но я действительно не вижу для вас жизнеспособного способа сделать это. - person Mladen Prajdic; 20.06.2009
comment
Да, я пока списываю. Как я уже сказал выше, Бог даст, MS скоро добавит расширяемость в SSMS! Спасибо за время!! - person squillman; 20.06.2009
comment
Если бы они добавили его очень скоро, как вы думаете, когда бы вы его увидели? Наверное, не раньше, чем через два-три года. - person John Saunders; 15.08.2009
comment
я предполагаю, что они добавят расширяемость для версии после 2008 R2. но это только мое предположение. у меня нет информации, которая поддержала бы это утверждение. - person Mladen Prajdic; 16.08.2009

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

person Fjut    schedule 03.01.2014

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

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

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

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

person Community    schedule 15.08.2009