Débuter avec SMO et C# pour piloter SQL Server

SMO est un ensemble de bibliothèques fournies par Microsoft pour automatiser le pilotage des bases de données SQL Server. Je m’en sers beaucoup dans le développement de Kankuru ou dans mon quotidien de DBA. Dans Kankuru par exemple, je les utilise pour afficher la liste des bases de données d’une instance ou la liste des tables d’une base de données.

Je trouve ces librairies très pratique bien que parfois plus lent que du code T-SQL. En effet, l’utilisation de SMO revient souvent à faire du traitement unitaire plutôt que du traitement ensembliste. Je reviendrai dans un futur article sur ces problèmes de performance.

Dans cet article, je vais vous montrer un exemple de base pour apprendre à vous connecter à une instance.

Prérequis

Bien que l’on puisse utiliser ces bibliothèques avec Powershell, pour ma part je préfère le C#. Je vais donc utiliser Visual Studio 2012 Express Edition for Windows Desktop.

Vous trouverez les dll SMO dans le répertoire d’installation de SQL Server (sur mon PC : C:Program FilesMicrosoft SQL Server110SDKAssemblies).

Préparation du projet

Dans Visual Studio, je vais créer une application console. Mais bien évidemment, vous pouvez l’utiliser dans une application WPF, Windows Forms ou ASP.Net.

Création du projet d'application console

Une fois le projet créé, il faut importer les DLL requises. A minima, vous aurez besoin de :

  • Microsoft.SqlServer.Smo.dll
  • Microsoft.SqlServer.ConnectionInfo.dll
  • Microsoft.SqlServer.Management.Sdk.Sfc.dll

Ajouter les références

Connexion à une instance avec SMO

Il faut tout d’abord commencer par importer les bibliothèques :

using smoCommon = Microsoft.SqlServer.Management.Common;
using smo = Microsoft.SqlServer.Management.Smo;

Ensuite, on peut se connecter à l’instance. Ci-dessous, un simple test de connexion puis déconnexion.

NB : Cet exemple utilise l’authentification Windows. Votre utilisateur Windows doit avoir des droits sur l’instance.

Si vous n’arrivez pas à exécuter ceci, pas la peine d’aller plus loin ! Vérifier le nom de votre instance (serveurinstance)

string _instanceName = "localhost";
smoCommon.ServerConnection sc = new smoCommon.ServerConnection(_instanceName);
sc.Connect();
sc.Disconnect();

Afficher le nom des bases de données

Une fois connecté à l’instance, on peut facilement récupérer la liste de toutes les bases de données:


string _instanceName = "localhost";
smoCommon.ServerConnection sc = new smoCommon.ServerConnection(_instanceName);
sc.Connect();
smo.Server monServeur = new smo.Server(sc);
foreach (smo.Database maBase in monServeur.Databases)
{
 Console.WriteLine(maBase.Name);
}
sc.Disconnect();

Afficher la liste des bases de données avec SMO

Dans un prochain article, je rentrerai plus dans le détail de l’utilisation de SMO. Je vous montrerai comment scripter des objets par exemple.

5 thoughts on “Débuter avec SMO et C# pour piloter SQL Server

  1. Pingback: Gregory Smith

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Time limit is exhausted. Please reload CAPTCHA.