SQL Server Management Studio - 無法連接 - 找不到方法 SqlConnectionInfo.set_IsActiveDirectoryUniversalAuth
我有一個全新安裝的 Windows 10,上面安裝了 Microsoft Visual Studio 2015(因此,也安裝了預設數據庫)。我安裝了 SQL Server Management Studio 2016 (v13.0.16106.4) 但無法連接並出現以下錯誤消息:
無法連接到 MYSERVER\SQLEXPRESS。
找不到方法:‘無效 Microsoft.SqlServer.Management.Common.SqlConnectionInfo.set_IsActiveDirectoryUniversalAuth(Boolean)’。(連接Dlg)
從那以後,我試圖:
- 安裝 SQL Server 2016
- 解除安裝 SQL Server 2016 和 Visual Studio 2015 附帶的一個(按照http://intellitect.com/sql-server-2008-install-nightmare/)
- 清理完所有內容並重新啟動後,使用預設設置安裝 SQL Server 2016
- 修復 Microsoft SQL Server Management Studio
請注意,無論我嘗試連接什麼(包括在伺服器文本框中輸入垃圾郵件),我都會收到相同的消息,這使我相信錯誤發生在 SSMS 實際嘗試連接到伺服器之前。
我沒主意了;似乎缺少一個 DLL 文件,但我不能說是哪個以及為什麼。
我發現的唯一“有用”參考是this technet forum post,它提到了一個“更新檔”,但我找不到這個“更新檔”的位置,如果它存在的話。
我可以連接
sqlcmd -S mymachine\SQLEXPRESS
;我也可以SELECT * from sys.databases
成功執行查詢。
請注意,此答案將允許一些操作,但您仍然會有一個損壞的環境。
重要提示:這允許連接到數據庫並執行查詢,但您仍然會在 SSMS 中遇到錯誤!
我並不是說它很漂亮,但我現在可以使用 SQL Server Express 2016。
從文件夾中復製
Microsoft.SqlServer.ConnectionInfo.dll
文件:C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn\ManagementStudio
到這個文件夾(我強烈建議你先備份文件,然後你可以覆蓋文件):
C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.ConnectionInfo\13.0.0.0__89845dcd8080cc91
為什麼它有效?
請注意,Microsoft 工程師會更好地回答這個問題,但這是我的理論:出於某種原因,已公開發布相同版本的程序集的不同
Microsoft.SqlServer.ConnectionInfo
版本(例如,作為 Visual Studio 和 SQL Server Express 版本的一部分)。GAC 中的那個不包含該SqlConnectionInfo.IsActiveDirectoryUniversalAuth
屬性,但 SQL Server Management Studio Express 需要它。我們在這裡所做的只是將 GAC 中的版本替換為 SSMS Express 附帶的版本,以便它載入這個版本。這將影響依賴於該 dll 文件的所有內容,但希望在具有相同版本號的程序集中沒有重大更改……
我是怎麼找到這個的?
我通過搜尋 intertubes 找到了在哪個 dll 文件中指定了該類。然後我使用 sysinternal
procmon
來查看實際上傳入了哪個版本的 dll。我在我的電腦上搜尋了該文件的其他潛在版本,並簡單地嘗試禁用版本,直到出現不同的錯誤。然後我嘗試用 SSMS Express 安裝文件夾中的其他版本替換它,它工作正常。所以我們來了!更新
它並沒有解決所有問題……這是我在右鍵點擊數據庫並選擇屬性時遇到的錯誤。
Cannot show requested dialog. (SqlMgmt) Method not found: 'Microsoft.SqlServer.Management.Common.DatabaseEngineEdition Microsoft.SqlServer.Management.Smo.SqlSmoObject.get_DatabaseEngineEdition()'. (SqlManagerUI)`
我嘗試在 GAC 中安裝所有內容但均未成功:
ls "C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn\ManagementStudio\*.d ll" | % { &"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\gacutil.exe" /if $_.FullName }
我和你有同樣的錯誤,SQLServer 2016 也一樣。
從 SQL Server 2017 開始,SMO 作為 Nuget 包分發。
從 SQL Server 2017 開始,SMO 作為 Microsoft.SqlServer.SqlManagementObjects NuGet 包分發,以允許使用者使用 SMO 開發應用程序。
請參閱 msdn 頁面上的連結:安裝 SMO
即使我使用 SQL Server 2016,我似乎也需要安裝 nuget 包,而不是像以前那樣引用 Dll。