我一直非常依赖 SSMS 的 Windows 快捷方式,其中包括命令行开关,允许我快速打开特定服务器上的特定数据库。例如
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/