Я всегда полагался в большой степени на ярлыки Windows на SSMS, которые включают переключатели командной строки, разрешающие мне быстро открывать определенную базу данных по определенному серверу. Например,
Ssms.exe -S 123.123.123.123 -U sa -P goodpassword -d DbName
или
Ssms.exe -S . -E -d DbName
Они внезапно прекратили работать. Я получаю эту ошибку от SSMS:
Failed to create new SQL Server script.
Object reference not set to an instance of an object. (AppIDPackage)
Program Location: at Microsoft.SqlServer.Management.UI.VSIntegration.
AppIDPackage.AppIDPackage.OpenConnectionDialogWithGlobalConnectionInfo()
Я могу все еще запустить SSMS без переключателей командной строки и затем вручную установить соединения. Некоторые переключатели командной строки все еще работают, например
ssms.exe -nosplash
хорошо работает.
Я получаю ту же ошибку с любой комбинацией-S,-E, и-d переключатели командной строки. Не имеет значения, если я указываю на допустимый сервер или базу данных или нет, или если мои данные для входа в систему хороши или нет. Я могу указать на более старую версию SSMS, и это хорошо работает, но не версия 2008 года.
Это сообщение на форумах MSDN - все, что я нашел онлайн, но MS не был очень полезен на этом потоке.
Какие-либо идеи, как я мог бы начать фиксировать это? Я работаю с большим количеством различных баз данных по различным серверам, и я действительно полагаюсь на эти ярлыки.
Я бросил указанную DLL в отражатель, и он вернул мне код, приведенный в конце этого сообщения, к сожалению, в коде нет ничего очевидного, что позволяет легко понять, почему он перестает работать для вас (не Было бы неплохо, если бы Microsoft поставляла символы отладки вместе со всем, что они создают, написанным против CLR?).
Есть несколько мест, где код заставляет меня задуматься, может ли у вас быть поврежденный список «недавно использованных серверов» или что-то подобное. Возможно, вы могли бы попробовать выполнить шаги, перечисленные в этом вопросе , чтобы очистить их и посмотрите, поможет ли это.
private void OpenConnectionDialogWithGlobalConnectionInfo()
{
if ((ServiceCache.GlobalConnectionInfo != null) && (ServiceCache.GlobalConnectionInfo.Count != 0))
{
try
{
using (ConnectionDialog dialog = new ShellConnectionDialog())
{
IDbConnection connection;
dialog.ImportRegisteredServersOnFirstLaunch = true;
dialog.AddServer(new SqlServerType());
UIConnectionInfo connectInfo = ServiceCache.GlobalConnectionInfo[0].Copy();
if (dialog.TryToConnect(this.PopupOwner, ref connectInfo, out connection) == DialogResult.OK)
{
this.ScriptFactory.CreateNewBlankScript(ScriptType.Sql, connectInfo, connection);
}
}
}
catch (Exception exception)
{
ExceptionMessageBox box = new ExceptionMessageBox(new ApplicationException(SRError.FailedToCreateNewSqlScript, exception));
box.Caption = SRError.MessageBoxCaption;
box.Show(this.PopupOwner);
}
}
ServiceCache.GlobalConnectionInfo = null;
}
Прекрасно работает следующим образом:
sqlwb.exe -S . -E -d dbName
Я использую SSMS2008 против базы данных SQL2005, и командная строка ssms здесь работает нормально.
Вот информация о версии, выдаваемая диалогом SSMS About:
Microsoft SQL Server Management Studio 10.0.1600.22 ((SQL_PreRelease).080709-1414 )
Microsoft Data Access Components (MDAC) 6.0.6001.18000 (longhorn_rtm.080118-1840)
Microsoft MSXML 2.6 3.0 5.0 6.0
Microsoft Internet Explorer 8.0.6001.18813
Microsoft .NET Framework 2.0.50727.3074
Operating System 6.0.6001
Есть несколько источников (MSSqlTips, и здесь), которые утверждают, что аргументы командной строки доступны на sqlwb.exe
. Однако на странице Books Online для ssms говорится, что опции доступны на ssms
.