Um dos objetivos deste artigo é demonstrar como criar e acessar um banco de dados pelo C#, para que sejam feitas operações básicas como: buscar, inserir, excluir e alterar dados. Outro objetivo é deixar o código fonte o mais claro e simples possível, ótimo para aqueles que estão começando a conhecer o C#
Estarei utilizando o C# Express para esse projeto, abra um novo projeto do tipo WindowsApplication, dê um nome e clique em OK. Primeiro vamos criar um banco de dados, escolha s guia Data e clique em Add New Data Source.
Na próxima tela escolha Database e clique em Next.
Agora clique em New Connection.
Depois clique em Change
Escolha Microsoft SQL Server Database File, pois estaremos utilizando o banco de dados do SQL Server, depois dê um OK.
Agora clique na caixa de texto do Database file name e digite “banco_dados”, esse será o nome do nosso banco de dados, depois clique no botão OK.
Aproveite para copiar o Connection String, clique no “+”, e copie tudo o que estiver escrito, será necessário para utilizar depois.
Como o banco de dados não existe aparecerá uma janela perguntando se deseja criá-lo, clique em “sim”.
Também aparecerá uma janela perguntando se deseja copiar o banco de dados para mesma pasta onde o projeto está salvo, escolha “não”, se quiser copiar o banco para pasta do projeto tudo bem, mas se quiser utilizar o banco terá que mudar o Connection String.
Dê um Next na próxima janela.
E finalmente clique em Finish na ultima.
Agora que o banco foi criado vamos criar uma tabela, clique na guia Data, e escolha Show Data Sources.
Clique com o botão direito em cima do banco_dadosDataSet, depois escolha Edit Data Set with Designer.
Escolha Database Explorer.
Agora clique no “+” do banco_dados.mdf, clique com o botão direito sobre Tables e escolha Add New Table.
Em Column Name, vamos dar um nome a nossa coluna, em Data Type diremos que tipo de dados serão armazenados nessa coluna, criarei apenas dois campos, desta forma:
Em Column Name coloque “nome”, em Data Type coloque nvarchar(50) (quer dizer que este campo receberá uma string de 50 caracteres), em Allow Nulls deixe marcado (serão permitidas linhas vazias)
Vamos criar outro campo, coloque “número” e em Data Type coloque float (isso quer dizer que este campo irá receber números inteiros ou com casas decimais), em Allow Nulls deixe marcado.
Coloque o nome de Tabela
Após a tabela ser salva já podemos armazenar dados dentro do banco se quisermos, note que em Tables agora possui uma tabela como no nome que demos a ela e com os campos nome e número, se não estiver visualizando clique no “+” de Tables, agora clique com o botão direito em cima de “tabela” e escolha Show Table Data.
Do lado esquerdo aparecerá a tabela pronta para ser preenchida, coloque algo para que possamos testar o banco de dados, eu irei colocar dois nomes e números, façam o mesmo.
Bom até aqui criamos o banco de dados e o preenchemos, agora vamos fazer um programa para conectarmos ao banco. Para começar insira dois Forms, no Form1 coloque 3 botões, e 1 DataGridView
Depois arraste os objetos Dataset e BindingSource, normalmente eles são inseridos automaticamente.
Agora vamos montar o Form2, arraste para ele os seguintes objetos: 4 botões, 1 DataGridView e 8 TextBox. Deixe os texbox do lado esquerdo dos botões "Delete" e "Insert" em ReadOnly, arraste também o Dataset e BindingSource.
Vamos começar pelo Código do Form1, então volte para o Form1 e entre no código do botão1 (clique duas vezes em cima do botão), no meu caso o button1 será o botão “Select” conforme as imagens 20 e 24. Antes de tudo acrescente os namespaces using System.Data e using System.Data.SqlClient no topo do código, conforme a imagem 23.
O código do button1 ficará assim:
private void button1_Click(object sender, EventArgs e)
{
/*A variável strcon é o connection string que copiamos anteriormente
enquanto criávamos o
banco de dados, essa variável poderia ser utilizada para todos os
botões do programa, mas
irei repeti-la várias vezes para fixar a idéia dos passos que
precisamos seguir para fazer
a conexão com o banco, Obs.: note que o caminho do seu banco
precisa estar com “\\” se
não estiver coloque */
string strcon = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:
\\Documents and Settings\\k\Meus documentos\\banco_dados.mdf;Integrated Security=True;Connect
Timeout=30;User Instance=True";
SqlConnection conexao = new SqlConnection(strcon); /* conexao irá
conectar o C# ao banco de dados */
SqlCommand cmd = new SqlCommand("SELECT * FROM tabela", conexao);
/*cmd possui mais de um
parâmetro, neste caso coloquei o comando SQL "SELECT * FROM tabela"
que irá selecionar tudo(*)
de tabela, o segundo parâmetro indica onde o banco está conectado,
ou seja se estamos selecionando
informações do banco precisamos dizer onde ele está localizado */
Try //Tenta executar o que estiver abaixo
{
conexao.Open(); // abre a conexão com o banco
cmd.ExecuteNonQuery(); // executa cmd
/*Pronto após o cmd.ExecuteNonQuery(); selecionamos tudo o
que tinha dentro do banco,
agora os passos seguintes irão exibir as informações para
que o usuário possa vê-las
*/
SqlDataAdapter da = new SqlDataAdapter(); /* da, adapta o
banco de dados ao nosso projeto */
DataSet ds = new DataSet();
da.SelectCommand = cmd; // adapta cmd ao projeto
da.Fill(ds); // preenche todas as informações dentro do
DataSet
dataGridView1.DataSource = ds; //Datagridview recebe ds
já preenchido
dataGridView1.DataMember = ds.Tables[0].TableName;
/*Agora Datagridview exibe o banco de dados*/
}
catch (Exception ex)
{
MessageBox.Show("Erro "+ex.Message); /*Se ocorer algum
erro será informado em um msgbox*/
throw;
}
finally
{
conexao.Close(); /* Se tudo ocorrer bem fecha a conexão
com o banco da dados,
sempre é bom fechar a conexão após executar até o final
o que nos interessa,
isso pode evitar problemas futuros */
}
}
Agora escolha um dos botões que sobraram para limpar o DataGridView, e o outro para chamar o Form2, ficará dessa forma:
private void button2_Click(object sender, EventArgs e)
{
Form2 f = new Form2(); //instância de Form2
f.Show(); //abre o Form2
}
private void button3_Click(object sender, EventArgs e)
{
dataGridView1.Columns.Clear(); //apenas limpa o DataGridView
}
Esses foram os códigos do Form1, agora vamos escrever o código do Form2.
Primeiramente não esqueça de colocar using System.Data e using System.Data.SqlClient no topo, agora vamos para o código do button1, no meu caso o botão “Insert”.
private void button1_Click(object sender, EventArgs e)
{
string strcon = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Documents and
Settings\\k\\Meus documentos\\Visual Studio 2005\\Projects\\conect_sql_server
\\conect_sql_server\\banco_dados.mdf;
Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlConnection conexao = new SqlConnection(strcon);
SqlCommand cmd = new SqlCommand("INSERT INTO tabela(nome,numero)
VALUES('" + textBox1.Text + "'," + textBox2.Text.Replace(",", ".") + ")",
conexao); /* Insere no banco dentro de tabela nos campos nome e número os
valores de textBox1 e 4, é necessário colocar o replace no texBox4, pois se
o numero tiver "," não irá inserir no banco de dados, a "," representa o
próximo campo nessa sintaxe, experimente deixar sem o replace para ver o que acontece
Obs. quando estamos inserindo, deletando, ou alterando um valor no banco
de dados, é importante notar que o textbox1 está entre ‘””’ pois essa é sintaxe
que usamos quando o valor é uma string, note também que o texbox2 está entre ””
apenas, pois o valor é numérico, nesse caso do tipo float */
try
{
conexao.Open();
cmd.ExecuteNonQuery();
button2_Click(sender, e);
/* chama o evento do click do button2 (na verdade é como se o button2 tivesse sido
clicado, ou botão select do form2)sempre que quiser fazer com que ocorra um evento
sem que o usuário tenha feito, é só passar o comando acima (se tiver duvida dê com
copiar no "private void button2_Click(object sender, EventArgs e)" e deixe do jeito
que eu modifiquei) o evento que ocorre quando clicamos no button2 é aquele que busca
as informações no banco de dados e depois preenche o DataGridView com elas, ao usar
button2_Click(sender, e); estamos fazendo com que aconteça exatamente isso, ao
clicarmos no botão Insert ou Delete vai parecer q o campo inserido ou deletado no
datagridview foi inserido ou deletado na mesma hora. Experimente comentar a linha
button2_Click(sender, e); para ver a diferença. */
}
catch (Exception ex)
{
MessageBox.Show("Erro " + ex.Message);
throw;
}
finally
{
conexao.Close();
}
}
O button2 é idêntico ao botão “Select” do Form1, no Form2 não houve mudanças:
private void button2_Click(object sender, EventArgs e)
{
string strcon = "Data Source=.\\SQLEXPRESS;AttachDbFilename=
C:\\Documents and Settings\\k\\Meus documentos\\Visual Studio 2005
\\Projects\\conect_sql_server\\conect_sql_serverbanco_dados.mdf;Integrated Security=True;Connect Timeout=30;User
Instance=True";
SqlConnection conexao = new SqlConnection(strcon);
SqlCommand cmd = new SqlCommand("SELECT * FROM tabela", conexao);
try
{
conexao.Open();
cmd.ExecuteNonQuery();
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
da.SelectCommand = cmd;
da.Fill(ds);
dataGridView1.DataSource = ds;
dataGridView1.DataMember = ds.Tables[0].TableName;
}
catch (Exception ex)
{
MessageBox.Show("Erro " + ex.Message);
throw;
}
finally
{
conexao.Close();
}
}
Para o DataGridView faremos algumas mudanças em suas propriedades antes de colocarmos o código, então volte para o Desing do Form2, clique no DataGridView e entre na janela à direita de propriedades e deixe a propriedade ReadOnly=true e propriedade SelectionMode=FullRowSelect, para quando clicarmos no DataGridView a linha ser selecionada por inteiro. O código será colocado dentro do evento CellClick, então entre nesse evento e cole o código abaixo:
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) {
textBox3.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString();
/* ao clicar em uma linha do datagridview, o conteudo é transferido para o texbox 3,4,5 e 6 */
textBox4.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString(); //
/* os números [0] e [1] representam o índice da coluna que será transferido para o texbox,
nesse caso o texbox4 recebe a coluna [1], texbox5 recebe a coluna [0] */
textBox5.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString();
textBox6.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
}
O button3 representa o botão “Delete”, o código segue abaixo:
private void button3_Click(object sender, EventArgs e)
{
string strcon = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Documents
and Settings\\k\\Meus documentos\\Visual Studio 2005\\Projectsconect_sql_server\\conect_sql_server\\banco_dados.mdf;
Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlConnection conexao = new SqlConnection(strcon);
//SqlCommand cmd = new SqlCommand( ("DELETE FROM tabela WHERE nome=
'"+textBox3.Text+"' "), conexao);
SqlCommand cmd = new SqlCommand( ("DELETE FROM tabela WHERE
nome='"+textBox3.Text+"' AND numero="+textBox4.Text.Replace(",",".")+"
"), conexao); /* é necessário colocar o replace no texbox 4, pois se o numero
tiver "," não irá deletar do banco de dados, a "," representa o próximo campo
nessa sintaxe, e não queremos isso, apenas queremos deletar o número q possui "," */
try
{
conexao.Open();
cmd.ExecuteNonQuery(); // deleta valores do banco de dados
button2_Click(sender, e);
}
catch (Exception ex)
{
MessageBox.Show("Erro " + ex.Message);
throw;
}
finally
{
conexao.Close();
}
}