SMO (SQL Management Object) Sample #1 : Balade dans les API / Connexion et récupérer la liste des bases
J'aurais pu faire un simple package SSIS à cet effet, mais dans la pratique les modèles de donnée changent régulièrement, donc SSIS s'adapate mal car cela supposera de maintenir les métadonnées :(
Il s'agit donc de créer dynamiquement ces packages, tout un programme...
Le code source du projet est sur www.codeplex.com/bilab sous $/POC/BILABHistory/
Dans ce projet, je m'appuie sur une classe clef "TablePath". Elle embarquera toute la logique.
SMO est une API qui permet de se balader dans un SQL Server. Pour se connecter, il faudra passer par la classe Server :
sqlserver =
new Server(sc);
Commençons par du basique : afin de récupérer l'arbre des dépendances, je vous propose déjà de se connecter et de récupérer la liste des bases existantes dans l'instance concernée. C'est que fait la méthode GetDatabaseList :
27 public List<string> GetDatabaseList(string server, ServerAuthMode mode, string user, string password)
28 {
29 List<string> dblist = new List<string>();
30 ServerConnection sc = null;
31 Server sqlserver;
32
33 log.Info("connecting");
34
35
36 // Sets appropriate connections proerties accordign db context
37 if (mode == ServerAuthMode.SqlServer)
38 {
39 sc = new ServerConnection(server, user, password);
40 }
41 else if (mode == ServerAuthMode.Integrated)
42 {
43 sc = new ServerConnection(server);
44 }
45
46
47 try
48 {
49 sqlserver = new Server(sc);
50 log.Info("Creating db list");
51 foreach (Database db in sqlserver.Databases)
52 {
53 log.Info("adding " + db.Name + " to the list ");
54 dblist.Add(db.Name);
55 }
56 }
57 catch (Exception e)
58 {
59 log.Debug("Error obtaining database list connecting : " + e.Message);
60 }
61 finally
62 {
63 sc = null;
64 _server = null;
65 }
66
67 return dblist;
68 }