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.

Ouverture du blog

Bonjour à tous !

Ceux qui me connaissent déjà savent que depuis plus de 2 ans je publie mes articles sur le blog Kankuru. Quoi ? Vous ne connaissez pas encore cette application que je développe et qui permet de connaitre tout ce qui se passe sur vos bases de données SQL Server ? Téléchargez la sans tarder, c’est gratuit, non intrusif et facile à utiliser. En plus, le développeur est très sympa !

Il y a beaucoup de choses à dire sur SQL Server, le développement, les performances. Dans la vrai vie, je ne suis pas que le développeur de Kankuru mais je suis DBA SQL Server (oui j’ai un vrai métier à coté !) Comme je préfère dédier le blog Kankuru aux news de l’application, aux nouveautés, aux réponses à vos questions, j’ai décidé d’en ouvrir un nouveau plus personnel et moins centré sur l’application.

Dans ce nouveau blog, je vais donc vous tenir informé sur toute l’actualité SQL Server comme par exemple la sortie de SQL Server 2014 le 1er avril, vous parler des différents outils de l’éco-système SQL Server (SSIS, SSRS, SSAS, Management Studio, etc…), de mes déboires de DBA, de mes problématiques de développement (C#, WPF, ASP.net) et de tout ce que je rencontre au quotidien. Je vous ferai donc partager toute mon expérience avec des articles, des tutoriels, des tests, etc…

Bien évidemment, je relayerai également certaines news importantes du GUSS (Groupe des Utilisateurs de SQL Server) dont je fais parti depuis février 2014. Si vous ne connaissez pas le GUSS, c’est l’association qui organise :

  • les journées SQL Server chaque année chez Microsoft
  • les SQL Saturday
  • les Webcasts mensuels (sessions techniques en direct de 30 minutes. Une bonne occasion de se former gratuitement !)
  • les afterworks tous les 2 mois car c’est important aussi de savoir se détendre 🙂 Le prochain aura lieu le 2 avril au Charly-Birdy. Ce sera un bon moyen de faire connaissance et de discuter technique.

A très bientôt pour de nouveaux articles.