【问题标题】:SQL Server SMO complains of missing DLLSQL Server SMO 抱怨缺少 DLL
【发布时间】:2009-02-11 16:29:45
【问题描述】:

好的,我已经搜索了网络、BOL、各种论坛,但我还没有找到答案……希望各位好心人能伸出援手……

我们在网络上有十几个 SQL Server(一些 2k,一些 2005)。我在 .NET 应用程序中使用 SMO 对象来获取一些标准信息。我的问题似乎归结为缺少 DLL - Microsoft.SqlServer.BatchParser.dll。但是,此 DLL 不附带其他 SQL DLL(Microsoft.SqlServer.ConnectionInfo.dll、Microsoft.SqlServer.Smo.dll、Microsoft.SqlServer.SmoEnum.dll、Microsoft.SqlServer.SqlEnum.dll 等...) .我还从 Microsoft 的站点下载了包含 SMO 对象的 SS2005 功能包,但仍然没有成功。

以下代码有效,除非我取消注释当前注释的行,在这种情况下,我会收到以下错误:

protected void btnArchive_Click(object sender, EventArgs e)
{
    ServerConnection conn = new ServerConnection("my_server");

    conn.LoginSecure = false;
    conn.Login = "my_login";
    conn.Password = "my_password";

    Server s = new Server(conn);
    Database d = s.Databases["my_database"];
    //Table tbl = d.Tables["my_table"];

    Response.Write(s.Name + " " + s.Information.RootDirectory + " " + d.CreateDate.ToShortDateString());
    conn.Disconnect();
}

错误: 无法加载文件或程序集“Microsoft.SqlServer.BatchParser,Version=9.0.242.0,Culture=neutral,PublicKeyToken=89845dcd8080cc91”或其依赖项之一。系统找不到指定的文件。

注意,我也使用 VB.NET 从 SSIS 尝试过这个,同样的行为。

任何想法将不胜感激。

谢谢。

【问题讨论】:

    标签: sql-server dll smo


    【解决方案1】:

    我能够使用 10.* 版本的程序集“Microsoft.SqlServer.ConnectionInfo”、“Microsoft.SqlServer.Management.Sdk.Sfc”和“Microsoft.SqlServer.Smo”成功运行您的代码。尝试下载2008 version of the SMO components,也许这是他们现在修复的错误。

    【讨论】:

    • 以下这对我有用。但是,我要补充一点,在我的情况下,我必须使用 32 位版本,因为我的应用程序池在启用 32 位模式的情况下运行。花了很长时间才弄清楚问题,所以我希望这对其他人有帮助。
    • @esteuart 您需要将其作为自己的答案!几个小时后,这终于救了我(对于 v 12.0.0.0)
    【解决方案2】:

    您的机器上是否运行 x64 操作系统? BatchParser.dll 在 64 位环境中似乎存在问题 - 通常建议从 Microsoft 下载 SMO x64 Package (SQLServer2005_XMO_x64.msi)。

    查看有关此here 的信息。

    【讨论】:

      【解决方案3】:

      我知道我在这里聚会很晚了,但这仍然是你在谷歌上搜索“smo batchparser”时的第一个结果。

      安装 SMO 2014 (12.0.x) 时,某些 DLL 仅安装到 GAC。要使您的应用程序无需在目标服务器中手动安装 SMO 即可运行,您必须将这些 DLL 与您的应用程序一起复制。这是我从中获取它们的路径。

      C:\Program Files\Microsoft SQL Server\120\SDK\Assemblies\Microsoft.SqlServer.ConnectionInfo.dll

      C:\Program Files\Microsoft SQL Server\120\SDK\Assemblies\Microsoft.SqlServer.Management.Sdk.Sfc.dll

      C:\Program Files\Microsoft SQL Server\120\SDK\Assemblies\Microsoft.SqlServer.Smo.dll

      C:\Program Files\Microsoft SQL Server\120\SDK\Assemblies\Microsoft.SqlServer.SmoExtended.dll

      C:\Program Files\Microsoft SQL Server\120\SDK\Assemblies\Microsoft.SqlServer.SqlEnum.dll

      C:\Windows\assembly\GAC_64\Microsoft.SqlServer.BatchParser\12.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.BatchParser.dll

      C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.BatchParserClient\12.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.BatchParserClient.dll

      C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.SqlClrProvider\12.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.SqlClrProvider.dll

      要访问 GAC 文件,您需要使用 this article 提供的说明禁用 Windows 内置查看器。

      为方便起见,摘录文章:

      打开注册表编辑器并添加/设置 HKLM\Software\Microsoft\Fusion\DisableCacheViewer DWORD 值:1

      【讨论】:

      • BatchParser dll 最终导致此错误:“尝试加载带有修复程序的无法验证的可执行文件(IAT 具有超过 2 个部分或 TLS 部分。)HRESULT : 0x80131019”。
      • 几小时后:可能是由使用任何 cpu 构建的应用程序引起的,但激活了“首选 32 位”。
      【解决方案4】:

      你需要安装以下包来解决这个问题,我已经用这个包解决了两次这个问题希望它也适用于每个人......

      Microsoft SQL Server 2005 管理对象集合 管理对象集合包包括 SQL Server 2005 管理 API 的几个关键元素,包括分析管理对象 (AMO)、复制管理对象 (RMO) 和 SQL Server 管理对象 (SMO) .开发人员和 DBA 可以使用这些组件以编程方式管理 SQL Server 2005。

      您可以从 Microsoft 站点的 Microsoft SQL Server 2005 功能包 - 2008 年 12 月获得

      http://www.microsoft.com/en-us/download/details.aspx?id=11988

      但是下载页面的链接位置每次都会改变,如果你找不到资源,你也可以从我的博客下载。

      如果您需要http://rndp-android.blogspot.com/p/missing-microsoftsqlservermanagementsdk.html,我还在我的博客中提供了一些提示和资源

      【讨论】:

        【解决方案5】:

        只是为了让我们正确理解问题,Microsoft.SqlServer.BatchParser.dll 没有安装在您开发机器上的全局程序集缓存中?如果是这样,您可能需要从重新安装 .NET Framework(您所针对的 Framework 版本)开始,看看是否能解决问题。

        您还可以尝试使用 .NET Framework 配置工具来查看程序集是否确实存在于全局程序集缓存 (GAC) 中。这个MSDN Article 描述了如何使用这个工具。

        (搜索我的硬盘驱动器并没有返回 Microsoft.SqlServer.BatchParser.dll 程序集,即使我可以使用 .NET Framework 配置工具看到它)。

        【讨论】:

        • 感谢您的回复。虽然,我不具体知道全局程序集缓存的位置,但我已经搜索了整个驱动器并且该 dll 不存在。我还重新安装了最新的框架(3.5 SP1)。
        • GAC 通常在 %windir%\assembly
        【解决方案6】:

        它是 2005 或 2008 升级顾问的一部分。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-31
          • 2018-06-25
          • 1970-01-01
          • 2011-11-07
          • 2021-11-30
          • 2015-03-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多