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.

Figure 1
Figura 1

Na próxima tela escolha Database e clique em Next.

Figura 2
Figura 2

Agora clique em New Connection.

Figura 3
Figura 3

Depois clique em Change

Figura 4
Figura 4

Escolha Microsoft SQL Server Database File, pois estaremos utilizando o banco de dados do SQL Server, depois dê um OK.

Figura 5
Figura 5

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.

Figura 6
Figura 6

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”.

Figura 7
Figura 7

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.

Figura 8
Figura 8

Dê um Next na próxima janela.

Figura 9
Figura 9

E finalmente clique em Finish na ultima.

Figura 10
Figura 10

Agora que o banco foi criado vamos criar uma tabela, clique na guia Data, e escolha Show Data Sources.

Figura 11
Figura 11

Clique com o botão direito em cima do banco_dadosDataSet, depois escolha Edit Data Set with Designer.

Figura 12
Figura 12

Escolha Database Explorer.

Figura 13
Figura 13

Agora clique no “+” do banco_dados.mdf, clique com o botão direito sobre Tables e escolha Add New Table.

Figura 14
Figura 14

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.

Figura 15
Figura 15

Coloque o nome de Tabela

Figura 16
Figura 16

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.

Figura 17
Figura 17

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.

Figura 19
Figura 19
Figura 19
Figura 19

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

Figura 20
Figura 20

Depois arraste os objetos Dataset e BindingSource, normalmente eles são inseridos automaticamente.

Figura 21
Figura 21

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.

Figura 22
Figura 22

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.

Figura 23
Figura 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 */
    }
}
Figura 24
Figura 24

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();
    }
}
img

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();
    }
}

Confira também