Diversas vezes me perguntaram como é possível acessar os dados de metadados, de gerenciamento e manipulação de objetos de um banco de dados SQL Server. Para isso, podemos recorrer ao tradicional SqlConnection e SqlCommand, executando queries, stored procedures e views que trazem informações a respeito destes recursos.
Como alternativa, a Microsoft disponibilizou um conjunto de tipos que permitem o acesso e manipulação, de forma tipada, à um servidor SQL Server, podendo extrair informações ou até mesmo criar novos objetos dentro do mesmo. O namespace em questão é o Microsoft.SqlServer.Management.Smo e está contido no assembly Microsoft.SqlServer.Smo.dll que, em conjunto com alguns outros, permitem acessar um servidor e extrair tais informações, como é mostrado através do exemplo abaixo:
foreach (Database db in new Server(“localhost”).Databases)
{
Console.WriteLine(db.Name);
foreach (Table t in db.Tables)
{
Console.WriteLine(“t” + t.Name);
foreach (Column c in t.Columns)
{
Console.WriteLine(“tt” + c.Name);
}
}
}