Почему перестали работать коммутаторы командной строки SQL Server Management Studio 2008?
Я всегда сильно полагался на ярлыки 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 не очень полезен в этой теме.
есть идеи, как я могу начать это исправить? Я работаю с множеством разных баз данных на разных серверах, и я действительно полагаюсь на эти ярлыки.
4 ответов
Я бросил DLL в reflector, и он вернул мне код в нижней части этого сообщения, к сожалению, в коде нет ничего сразу очевидного, что позволяет легко понять, почему он перестал работать для вас (было бы неплохо, если бы 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;
}
Я использую SSMS2008 против базы данных SQL2005, и командная строка ssms отлично работает здесь.
Это информация о версии, созданная SSMS о диалоге:
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
. Еще книги онлайн страница среда SSMS указано, что параметры доступны на ssms
.