代码之家  ›  专栏  ›  技术社区  ›  Herb Caudill

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

  •  10
  • Herb Caudill  · 技术社区  · 14 年前

    我一直非常依赖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 是我在网上找到的,但微软在这方面并不是很有帮助。

    你知道我怎么开始解决这个问题吗?我在不同的服务器上处理很多不同的数据库,我真的依赖这些快捷方式。

    4 回复  |  直到 9 年前
        1
  •  7
  •   Community CDub    7 年前

    我向Reflector提出了这个DLL的问题,它还给了我这篇文章底部的代码,遗憾的是,代码中没有任何明显的东西可以让我很容易地弄清楚为什么它停止为您工作(如果微软把调试符号和它们产生的针对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;
    }
    
        2
  •  1
  •   kadir    12 年前

    必须打开ObjectExplorer窗口。不要隐藏。 我这样解决了我的问题:)

        3
  •  0
  •   djangofan    14 年前

    这样工作很好:

    sqlwb.exe -S . -E -d dbName
    
        4
  •  0
  •   mdma    14 年前

    我正在对一个sql2005数据库使用ssms2008,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 here )命令行参数可用的状态 sqlwb.exe . 但是在线图书页面 ssms 声明选项在上可用 ssms .