SQL Server DLLs

本文关键字:DLLs Server SQL | 更新日期: 2023-09-27 17:59:13

我正在将一个管理医疗和研究设备的Windows应用程序升级到64位,我正在寻求一些高级的入门帮助。。。

我的绊脚石是.NET对SQL Server DLL的引用,特别是两个"谜团"(如下所述)。我在两个微软论坛上发布了类似的问题,但没有听到任何消息。加油SQL Server向导!我需要你的帮助!

详细信息:

  • 目标环境是64位Windows 7及更高版本的系统。虽然64位操作系统是必备的,但没有滚雪球般的机会Windows 10的任何升级。"Windows 7将保留Windows 7,Windows 8.1将保留"。。。你明白了
  • MSVS 2010(最终)C#…可能不会使用2012年、2013年、2015年。。。类似于操作系统的约束
  • 必须是x64版本…没有Win32、x86、AnyCPU或混合平台。。。好吧,不完全正确,但是,对于这个问题,只使用x64限制

为了简单起见(不是),应用程序是复制星座中的SQL Server客户端。这意味着客户端可能与一个或多个远程SQL Server具有发布/订阅关系。最初的应用程序(32位)使用SQL Server 2008R2。64位应用程序将与64位SQL Server 2014配合使用。SQL Server 2016不是一个选项,因为它不在Windows 7下安装。

我有一个64位的Windows7开发系统,它已经清除了任何SQL Server代码,然后安装了SQL Server 2014 Enterprise。是的,这打击了MSVS 2010,它需要SQL Server Compact 3.5用于IntelliSense。对于这个问题,请忽略这种烦恼。

第一个谜:

我做了一个C#使用的普查:

using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Replication;

以及原始的一组(SQL Server 2008R2)引用:

Microsoft.SqlServer.ConnectionInfo
Microsoft.SqlServer.Management.Sdk.Sfc
Microsoft.SqlServer.Replication
Microsoft.SqlServer.Replication.BusinessLogicSupport
Microsoft.SqlServer.Rmo
Microsoft.SqlServer.Smo
Microsoft.SqlServer.SmoExtended
Microsoft.SqlServer.SqlEnum

我注意到一些引用是针对Windows的GAC中的DLL;例如

%WinDir%'assembly'GAC_MSIL'Microsoft.SqlServer.Replication.BusinessLogicSupport'-someGUID-.dll

我想我理解GAC的目标:由于SQL Server 2014将是一个预安装要求,而不是以某种形式的重新分发元素提供DLL(许多应用程序都是这样),因此由于存在正在运行的SQL Server实例,因此它们应该是常驻的。

但是,有些引用的目标是SQL Server SDK中的DLL;例如:

%ProgramFiles(x86)%'Microsoft SQL Server'120'SDK'Assemblies'Microsoft.SqlServer.Rmo.dll

(这是一个x86 DLL…不好)…而且部署机器上不太可能有任何这样的SDK。

以及构建树中的一些目标本地副本。

我不明白。我希望我可以引用GAC DLL,重新定位对SDK的任何引用(如前所述,不太可能出现在目标机器上),并避免DLL的完全源树副本。有人能解释为什么来源不同吗?使用适合我有限智力的小词。

第二个谜:

即使在安装了SQL Server 2014 Enterprise及其相关的服务器复制管理包之后,我也找不到一些32位DLL的x64对应版本。我是不是少了一些额外的包裹?也许这些引用中的一些在早期只是"为了运气"(与Management.Common和/或Replication都没有真正的对应关系),甚至不需要,可以忽略?

谢谢!

SQL Server DLLs

我已经开发了几个使用SQL Server dll的数据包(主要是在nuget上),我相信到目前为止,我可以像你在问题中提到的那样,解释高层发生了什么。

大多数Microsoft SQL Server的dll都在x86文件夹下、GAC_32下或GAC_MSIL下,原因是这些dll用于查询或设计,例如在我的库EzApi2022中(https://www.nuget.org/packages/EzApi2022)用于从C#导出dtsx包的数据包都是32位的。

这并不意味着它将在32位上执行,因为在我的情况下,如果导出的dtsx文件(xml定义)部署在SQL Server 64位上,它将在64位下执行。

我不确定你使用的是什么dll,原因是什么,但如果你不想在做简单明了的事情时遇到任何限制,我认为使用你找到的那些dll(32位)没有任何问题。(在我的例子中,我通过SQL Server dll达到了1GB的C#对象限制,所以为了克服这个问题,我必须改进代码并更改逻辑)。

最后,也许复制dll和我用于设计dtsx的dll具有相同的策略。我想您将要使用编程语言创建发布/订阅,因此不需要64位来进行此类操作。复制性能是指在64位引擎内运行的SQL Server版本。

希望我能澄清一下。