web-dev-qa-db-fra.com

SQL Server Management Studio - Connexion impossible - Méthode introuvable SqlConnectionInfo.set_IsActiveDirectoryUniversalAuth

J'ai une nouvelle installation de Windows 10, sur laquelle Microsoft Visual Studio 2015 a été installé (par conséquent, une base de données par défaut a également été installée). J'ai installé SQL Server Management Studio 2016 (v13.0.16106.4) mais je n'ai pas pu me connecter avec le message d'erreur suivant:

Impossible de se connecter à MYSERVER\SQLEXPRESS.

Méthode non trouvée: "Void Microsoft.SqlServer.Management.Common.SqlConnectionInfo.set_IsActiveDirectoryUniversalAuth (Boolean)". (ConnectionDlg)

J'ai depuis essayé de:

  • Installer SQL Server 2016
  • Désinstallez SQL Server 2016 et celui fourni avec Visual Studio 2015 (suivant http://intellitect.com/sql-server-2008-install-nightmare/ )
  • Une fois que tout a été nettoyé et après un redémarrage, installez SQL Server 2016 avec les paramètres par défaut
  • Réparer Microsoft SQL Server Management Studio

Notez que, indépendamment de ce à quoi j'essaie de me connecter (y compris en tapant indésirable dans la zone de texte du serveur), j'ai le même message, ce qui m'amène à croire que l'erreur se produit avant que SSMS n'essaie réellement de se connecter au serveur.

Je suis à court d'idées; il semble qu'un fichier DLL peut être manquant, mais lequel et pourquoi, je ne peux pas le dire.

La seule référence "utile" que j'ai trouvée est cette article du forum technet qui fait référence à un "patch", mais je ne trouve pas où ce "patch" pourrait être trouvé, s'il existe.

4
Christian Rondeau

Notez que cette réponse permettra certaines opérations, mais vous aurez toujours un environnement cassé.

IMPORTANT: cela permet de se connecter à une base de données et d'exécuter des requêtes, mais vous obtiendrez toujours des erreurs dans SSMS!

Je ne dis pas que c'est joli, mais je peux maintenant utiliser SQL Server Express 2016.

Copiez le fichier Microsoft.SqlServer.ConnectionInfo.dll Du dossier:

C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn\ManagementStudio

dans ce dossier (je vous suggère fortement de sauvegarder le fichier en premier, puis vous pouvez écraser le fichier):

C:\Windows\Assembly\GAC_MSIL\Microsoft.SqlServer.ConnectionInfo\13.0.0.0__89845dcd8080cc91

Pourquoi ça marche?

Notez qu'un ingénieur Microsoft ferait mieux de répondre à cette question, mais voici ma théorie: pour une raison quelconque, une version différente de la même version de l'assembly Microsoft.SqlServer.ConnectionInfo A été publiée publiquement (par exemple sous la forme partie de Visual Studio et SQL Server Express). Celui du GAC ne contenait pas la propriété SqlConnectionInfo.IsActiveDirectoryUniversalAuth, Mais SQL Server Management Studio Express l'attend.

Ce que nous faisons ici est simplement de remplacer la version du GAC par la version livrée avec SSMS Express, afin qu'il charge celle-ci à la place. Cela va affecter tout ce qui dépend de ce fichier dll, mais j'espère qu'il n'y a pas de changements de rupture dans un assembly qui a le même numéro de version ...

Comment ai-je trouvé ça?

J'ai trouvé le fichier dll dans lequel la classe a été spécifiée en recherchant les intertubes. J'ai ensuite utilisé procmon de sysinternal pour voir quelle version de cette DLL était en fait chargée. J'ai recherché sur mon ordinateur d'autres versions potentielles de ce fichier et j'ai simplement essayé de désactiver les versions jusqu'à ce que j'aie une erreur différente. J'ai ensuite essayé de le remplacer par d'autres versions dans le dossier d'installation de SSMS Express, et cela a fonctionné. Donc nous en sommes là!

Mise à jour

Mais cela ne résout pas tout ... voici une erreur que j'ai en cliquant avec le bouton droit sur une base de données et en sélectionnant une propriété.

Cannot show requested dialog. (SqlMgmt)
Method not found: 'Microsoft.SqlServer.Management.Common.DatabaseEngineEdition Microsoft.SqlServer.Management.Smo.SqlSmoObject.get_DatabaseEngineEdition()'. (SqlManagerUI)`

J'ai essayé d'installer tout dans le GAC sans succès non plus: 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 }

2
Christian Rondeau

J'ai eu la même erreur que vous, avec SQLServer 2016 aussi.
À partir de SQL Server 2017, SMO est distribué en tant que package Nuget.

À partir de SQL Server 2017, SMO est distribué sous la forme du package Microsoft.SqlServer.SqlManagementObjects NuGet pour permettre aux utilisateurs de développer des applications avec SMO.

Voir le lien sur la page msdn: Installation de SMO

Même si j'utilise SQL Server 2016, il semble que je devais installer le package nuget au lieu de référencer les DLL comme je le faisais auparavant.

1

Cela vient de se produire sur une installation SQL 2016, exécutant la dernière installation de Microsoft Office Manager pour accéder à la base de données après l'installation.

Un simple redémarrage de la post-installation du serveur aidera à résoudre le problème. (si vous ne l'avez pas fait lors de l'installation du package SSMS en premier lieu).

Une fois redémarré, tout allait bien.

enter image description here

0
Andrew