Introdução
Neste primeiro artigo estarei demonstrando um exemplo de gerador de scripts em Visual Studio 2008 com banco de dados SQL Server 2005. Este exemplo é essencial para aqueles momentos que temos duas bases de dados e precisamos importar algumas tabelas, porem aplicando alguns filtros.
Primeiro passo – Montaremos a tela de conexão que conterá os seguintes componentes:
· pictureBox1 imagem de preferência;
· ComboBox 1 alterar a propriedade name para cbxServers e FlatStyle para Flat;
· ComboBox2 alterar a propriedade name para cbxLogin e FlatStyle para Flat;
· TextBox1 alterar a propriedade name para txtPass , BorderStyle para None e UseSystemPasswordChar para True;
· ComboBox3 alterar a propriedade name para cbxDataBase e FlatStyle para Flat;
· Button1 alterar a propriedade name para btnConect o text para Conect e o FlatStyle para Flat;
· Button2 alterar a propriedade name para btnClose o text para Close e o FlatStyle para Flat;
· Label1 alterar a propriedade text para Server name;
· Label2 alterar a propriedade text para Login;
· Label2 alterar a propriedade text para Password;
· Label4 alterar a propriedade text para DataBases.
Imagem com as disposições dos componentes:

Segundo passo – Iremos implementar as rotinas dos componentes da imagem anterior.
Primeiro teremos que criar uma referencia da SQLDMO.DLL em nosso projeto. Exiba a Solution Explorer e clique com o botão direito do mouse em References em seguida Add Reference conforme imagem abaixo:


Caso não encontre na aba COM procure na aba Browse e localize o seguinte caminho:
C:Arquivos de programasMicrosoft SQL Server80ToolsbinnSQLDMO.DLL
Em todo caso estarei postando junto com o projeto.
Depois de referenciado nossa DLL no evento Form_Load iremos colocar a seguinte rotina:
//Criaremos uma instância da DLL
SQLDMO.ApplicationClass myApplicationClass = new SQLDMO.ApplicationClass();
SQLDMO.NameList myNameList = myApplicationClass.ListAvailableSQLServers();
//Limparemos os combos
cbxServers.Items.Clear();
cbxBaseDados.Items.Clear();
//Inserimos um bloco de repetição foreach para incluir em nossa lista de servidores disponíveis na rede.
foreach (string SQLServer in myNameList)
{
cbxServers.Items.Add(SQLServer);
}
Para o segundo componente cbxLogin, podemos incluir manualmente o login de acesso ao servidor de SQL mais utilizado, no meu caso são SA e Programador na propriedade Items.
Já para implementar o terceiro componente txt Pass, teremos que criar algumas funções que iremos utilizar no projeto em vários momentos.
Na Classe Program (esta classe é criada automaticamente quando criamos uma solução) criaremos uma nova classe chamada Acesso
public class Acesso
{
//Variáveis para conexão
private SqlConnection Conexao;
private string cConn;
//Construtor da classe
public Acesso()
{
}
//Conexão com a base de dados
public void sConexao (string cServer,string cBase, string cUser, string cPass)
{
//String de conexão
cConn = “Data Source=” + cServer + “;Initial Catalog=” + cBase + “;User ID=” + cUser + “;Password=” + cPass;
Conexao = new SqlConnection(cConn);
}
// Retorna dados em um DatSet
public DataSet GetDados(string cQuery, string tblName)
{
SqlCommand cmd = new SqlCommand(cQuery, Conexao);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
try
{
Conexao.Open();
adapter.Fill(ds, tblName);
}
finally
{
Conexao.Close();
}
return ds;
}
}
}
Depois de criado as funções na classe Acesso será necessário criar uma instância da classe no formulário que estaremos utilizando como Form1:
//Instância da Classe Acesso
ExportSQL.Acesso conect = new ExportSQL.Acesso();
No evento tbxPass_Leave será implementado a seguinte rotina para buscar as bases de dados do servidor informado:
private void tbxPass_Leave(object sender, EventArgs e)
{
if (tbxPass.Text != “”)
{
try
{
//Neste momento estaremos chamando a função sConexao para alimentar a string de conexão
conect.sConexao(cbxServers.Text, “Master”, cbxLogin.Text, tbxPass.Text);
//Declaração do DataSet utilizando a função GetDados da Classe acesso para carregar o DataSet
DataSet ds = conect.GetDados(“SELECT Name FROM SysDataBases WHERE NOT Name IN(‘MASTER’,'TEMPDB’,'MODEL’,'MSDB’) ORDER BY Name”, “Tabelas”);
n = 0;
cbxBaseDados.Items.Clear();
cbxBaseDados.Text = “”;
//Bloco For para alimentar o combobox cbxBaseDados
for (n = 0; n >= ds.Tables[0].Rows.Count-1; n++)
{
cbxBaseDados.Items.Add(ds.Tables[0].Rows[n]["Name"].ToString().Trim());
}
ds.Dispose();
}
catch (Exception)
{
MessageBox.Show(“Senha Incorreta!”);
tbxPass.Focus();
}
}
else
return;
}
Para o botão Conect será necessário declarar algumas variáveis públicas e estáticas para enxergarmos no projeto, que será declarada junto com a instância da classe Acesso
//Instância da Classe Acesso
ExportSQL.Acesso conect = new ExportSQL.Acesso();
//Variaveis públicas e estáticas para serem utilizadas no projeto
public static string sServer, sBase, sLogin, sPass;
int n;
No evento Click do botão Conect colocaremos o seguinte código:
//Ocultaremos o formuário atual
this.Hide();
//Chamaremos a função sConexao para alimentar a string de conexão
conect.sConexao(cbxServers.Text, cbxBaseDados.Text, cbxLogin.Text, tbxPass.Text);
//As variáveis serão carregadas para utilizarmos no formulário de geração de script
sServer = cbxServers.Text;
sBase = cbxBaseDados.Text;
sLogin = cbxLogin.Text;
sPass = tbxPass.Text;
//Instância do formulário
ExportSQL.frmExportImpor frmExportImport = new frmExportImpor();
frmExportImport.ShowDialog();
frmExportImport.Dispose();
Close();
Dispose();
E para finalizar, no evento Click do botão Close coloque:
Close();
Nos próximos dias estarei disponibilizando a segunda parte deste projeto.
Glauber Pinto