我一直非常依赖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版本。
This post on MSDN's forums是我在网上找到的全部内容,但是MS在该线程上的帮助不是很大。
有什么想法可以开始解决这个问题吗?我在不同的服务器上使用许多不同的数据库,而我确实依赖这些快捷方式。
最佳答案
我把有问题的DLL扔到了反射器上,并将它放回了这篇文章的底部。可悲的是,代码中没有立即显而易见的内容,可以很容易地弄清楚为什么它停止为您服务(不是吗?如果Microsoft提供的调试符号带有针对CLR编写的任何符号,会很好吗?)。
在几个地方,代码使我想知道您是否有损坏的“最近使用的服务器”列表或类似的东西,也许您可以尝试按照this question中列出的步骤清除它们,看看是否有帮助。
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;
}
关于command-line - 为什么SQL Server Management Studio 2008命令行开关停止工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3294470/