command-line - 为什么 SQL Server Management Studio 2008 命令行开关停止工作?

标签 command-line ssms sql-server-2008

我一直非常依赖 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/

相关文章:

sql - 如何在 SQL Server Management Studio 中设置 1 到 0...1 的关系

c# - 使用输入参数调用 SSIS 包中的存储过程

sql-server-2008 - 如何在 Microsoft Access 2010 中设置与 SQL Server 2008 的 ADODB 连接?

SVN 补丁 - 包含多个文件

bash - shell命令中 "&&"的用途是什么?

sql-server - SQL Server 20XX - "encryption not supported on the client"使用链接服务器查询编译存储过程时

sql-server - 在sql server中创建 View

git log --before ="4 months"显示 3 周前提交的分支。我究竟做错了什么?

windows - PowerShell 从命令行参数中去除双引号

sql - MSSQL 在 SSMS 和 Node JS 脚本中返回不同的结果