13

好的,我已经搜索了网络,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 尝试过这个,同样的行为。

任何想法将不胜感激。

谢谢。

4

6 回答 6

10

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

于 2009-02-15T18:58:53.293 回答
6

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

在此处查看有关此信息。

于 2009-02-12T06:41:42.943 回答
4

我知道我在这里聚会很晚了,但这仍然是您在谷歌搜索“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 文件,您需要使用本文提供的说明禁用 Windows 内置查看器。

为方便起见,摘录文章:

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

于 2015-04-15T15:11:51.893 回答
3

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

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,我还在我的博客中提供了一些提示和资源

于 2012-12-21T05:42:16.137 回答
0

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

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

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

于 2009-02-11T18:41:53.473 回答
0

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

于 2010-06-24T10:54:12.800 回答