using System;
using System.Diagnostics;
using SQLDMO;
using Microsoft.Office.Interop.Word;
using ApplicationClass = SQLDMO.ApplicationClass;
namespace WordAddin
{
public class SQLDocumenter
{
#region Member variables
internal SQLDMO.SQLServer server;
internal SQLDMO.Database db;
internal string serverName;
internal string databaseName;
internal string username;
internal string password;
#endregion
/// Costruttore
public SQLDocumenter()
{
server = new SQLDMO.SQLServer();
}
public void Connect()
{
try
{
server.Connect(serverName, username, password);
}
catch (Exception ex)
{
Trace.Fail(ex.Message);
}
}
/// Elenca i Server registrati su un PC.
public void getServers(Microsoft.Office.Interop.Word.Range rng)
{
try
{
ApplicationClass APP = new ApplicationClass();
foreach (ServerGroup Sg in APP.ServerGroups)
foreach (RegisteredServer srv in Sg.RegisteredServers)
rng.InsertAfter(srv.Name + Environment.NewLine);
}
catch (Exception ex)
{
Trace.Fail(ex.Message);
}
}
/// Elenca i database di un server
/// e scrive la lista su un oggetto Range di Microsoft Word.
public void getDatabases(Microsoft.Office.Interop.Word.Range rng)
{
rng.InsertAfter(string.Format("Database del server {0}{1}{1}",
server.Name, Environment.NewLine));
foreach (SQLDMO.Database db in server.Databases)
{
rng.InsertAfter(db.Name.ToUpper() + Environment.NewLine);
rng.InsertAfter("Database files: " + Environment.NewLine);
getDatabaseFiles(db, rng);
rng.InsertAfter("TABELLE: "+ Environment.NewLine);
myGetTables(db, rng);
rng.InsertAfter("STORED PROCEDURES:" + Environment.NewLine);
myGetStoredProcedures(db, rng);
rng.InsertAfter("------------------------" +
Environment.NewLine);
}
}
/// Enumera i nomi di file fisici del database (con il percorso completo),
/// le loro dimensioni in Megabyte
/// e le dimensioni massime del file.
/// -1 significa che il file non ha una dimensione massima.
private void getDatabaseFiles(SQLDMO.Database db,
Microsoft.Office.Interop.Word.Range rng)
{
foreach (SQLDMO.FileGroup fg in db.FileGroups)
{
foreach (SQLDMO.DBFile dbf in fg.DBFiles)
rng.InsertAfter(string.Format("Nome file: {0}; " +
"Size {1}MB; MaximumSize : {2}{3}" ,
dbf.PhysicalName, dbf.Size,
dbf.MaximumSize, Environment.NewLine));
}
}
/// Elenca le tabelle di un database
/// e scrive la lista su un oggetto Range di Word.
/// Vengono escluse le tabelle di sistema.
private void myGetTables(SQLDMO.Database db,
Microsoft.Office.Interop.Word.Range rng)
{
foreach (SQLDMO.Table tb in db.Tables)
{
if (!tb.SystemObject)
rng.InsertAfter(string.Format("\t{0}{1}",
tb.Name, Environment.NewLine));
}
}
public void GetStoredProcedures(Microsoft.Office.Interop.Word.Range rng,
string databaseName)
{
foreach (SQLDMO.Database db in server.Databases)
{
if (string.Compare(db.Name, databaseName, true) == 0)
{
rng.InsertAfter(string.Format("Stored procedures " +
"del database {0}{1}{1}",
databaseName,
Environment.NewLine));
myGetStoredProcedures(db,rng);
}
}
}
/// Elenca le stored procedures di un database,
/// e le scrive su un oggetto Range di Word.
/// Sono escluse le stored procedures di sistema
private void myGetStoredProcedures(SQLDMO.Database db,
Microsoft.Office.Interop.Word.Range rng)
{
foreach (SQLDMO.StoredProcedure sp in db.StoredProcedures)
if (!sp.SystemObject)
rng.InsertAfter(string.Format("\t{0}{1}",
sp.Name, Environment.NewLine));
}
}
}