调用`Invoke-sqlcmd`时无法加载adalsql.dll错误

Jth*_*rpe 22 sql-server invoke-sqlcmd

我安装了带有SSDT的 VS2015 ,以及 SSMSSqlServer PowerShell模块(包括invoke-sqlcmd命令),但是如果我尝试对Azure SQL数据仓库执行查询,如下所示:

invoke-sqlcmd  -Query "Select top 5 * from customer"  -ConnectionString "Server=tcp:my.database.windows.net,1433;Database=Customer;  Authentication=Active Directory Integrated; Encrypt=True; "
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

invoke-sqlcmd : Unable to load adalsql.dll (Authentication=ActiveDirectoryIntegrated). Error code: 0x2. For more information, see
http://go.microsoft.com/fwlink/?LinkID=513072
At line:1 char:1
+ invoke-sqlcmd  -Query "Select top 5 * from vwOffer"  -ConnectionStrin ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Invoke-Sqlcmd], SqlException
    + FullyQualifiedErrorId : SqlExectionError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand

invoke-sqlcmd :
At line:1 char:1
+ invoke-sqlcmd  -Query "Select top 5 * from vwOffer"  -ConnectionStrin ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ParserError: (:) [Invoke-Sqlcmd], ParserException
    + FullyQualifiedErrorId : ExecutionFailureException,Microsoft.SqlServer.Management.PowerShell.GetScriptComman
Run Code Online (Sandbox Code Playgroud)

如果我尝试直接安装adalsql.dll,我会收到一条消息,说明A higher version already exists我可以在这里找到这两个版本的dll:

 C:\Windows\SysWOW64\adalsql.dll
 C:\Windows\System32\adalsql.dll
Run Code Online (Sandbox Code Playgroud)

然而,invoke-sqlcmd无法找到它.任何想法如何(A)注册现有的DLL,以便invoke-sqlcmd可以找到它或(B)卸载它,以便它可以重新安装?

顺便说一句,我能够使用Active Directory Authenticatoin与32位SQLCMD.exe,所以我知道32位DLL工作正常.这只是64位dll没有正确加载...

Bil*_*one 35

所以,这个问题也让我感到烦恼.我不清楚它是如何发生的,但也许只是巧合,它发生在我安装最新版本的SSMS时.我的修复是:

1)导航到"添加或删除程序"

2)在小搜索窗口中键入sql,或者直接找到:"SQL Server的Active Directory身份验证库".

3)卸载那个小家伙

4)在此处导航并下载最新的ADAL库(选择x64):

https://www.microsoft.com/en-us/download/confirmation.aspx?id=48742

5)只是为了踢,重启

6)你的东西现在应该正确加载adalsql.dll!

  • SSMS的每次血腥更新我都需要回到这个答案,因为每次他们打破它!我希望我能不止一次地投票 (5认同)
  • 我发现一个简单的“修复”解决了同样的问题,而无需重新启动。幸运的。 (2认同)

Tul*_*x86 9

这个烦人的问题的令人眼花缭乱的简单解决方案

  1. 确保您确实安装了 ADAL(存在C:\Windows\system32\adal.dll很多)

  2. 将其粘贴到 .reg 文件中:

     Windows Registry Editor Version 5.00
    
     [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSADALSQL]
     "TargetDir"="C:\\Windows\\System32\\adal.dll"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 双击 .reg 文件以安装该值

你完成了。去庆祝吧!

解释WTF正在进行中。为什么这是必要的?

发生此错误是因为 SQL Server 的 .NET 适配器找不到 adal.dll。但这是为什么呢?安装好了对吧?

那么,对于ADAL的最新版本(与VS 2019包装和SQL塞雷尔语Management Studio中的最新版本)的安装程序中增加了对DLL(在32位版本的注册表项C:\Windows\SysWOW64\adal.dll),但并没有添加对入境64 位版本(安装到C:\Windows\system32\adal.dll)。如果您在 32 位模式下构建和运行您的应用程序,您将永远不会看到此错误清单。

这只是 ADAL 安装程序中的一个错误。微软可能没有检测到它,因为Visual Studio 和 SSMS 都是 32 位应用程序,因此不会去寻找 64 位版本。