Acesso a Banco de Dados em C# - Nível Básico (Parte 1)

Criação e acesso a um banco de dados, programa básico que insere, deleta e altera o mesmo.

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.

Figura 1

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

Figura 2

Agora clique em New Connection.

Figura 3

Depois clique em Change

Figura 4

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

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

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

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

Dê um Next na próxima janela.

Figura 9

E finalmente clique em Finish na ultima.

Figura 10

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

Figura 11

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

Figura 12

Escolha Database Explorer.

Figura 13

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

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

Coloque o nome de Tabela

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

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

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

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

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

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

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

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

Confira também

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados