Tutorial C# – ADO.NET
Olá a todos, hoje vamos falar de ADO.NET e dos elementos que o compõem. E vamos começar a desenvolver a nossa aplicação de Despesas pessoais que irá ter uma BD em access.
O ADO.NET é uma versão ultra melhorada do velhinho ADO, e com esta nova versão a Microsoft conseguiu atingir a perfeição na ligação a Bases de dados (relacionais, texto ou XML).
O ADO.NET dispõe de muitos métodos e componentes mas os que podemos de chamar de pilares são o Dataset, e os elementos do tipo de ligação que escolhermos (SQL, Oracle, Oledb, Odbc) que são o Command, Connection , DataReader e DataAdapter.
Todos os recursos ADO.NET são oferecidos através dos Namespaces da classe .NET.
- System.Data - (Dados do sistema) - contém as classes fundamentais para gerir dados como DataSet e DataRelation.
- System.Data.OleDb - Possui classes usadas para realizar uma ligação com o OLE DB.
- System.Data.SqlClient - Possui classes para ligação a uma base de dados SQL Server via interface TDS (Tabular Data Stream).
- System.Data.OracleClient – Ligação a BD Oracle.
Connection:
O objecto connection serve para fazer a ligação á base de dados. Para que a ligação possa acontecer temos de definir na propriedade ConnectionString a string de ligação á Base de dados.
Dica: Se não souberem qual a string de ligação a uma BD especifica podem criar um ficheiro com a extensão udl, este ficheiro permite configurar o acesso a uma BD de uma forma simples. Ou então podem fazê-lo no Visual studio como mostra a imagem em baixo.
Command:
Utilizado para executar comandos em SQL (querys) contra a BD que nos ligamos na connection.
O command tem de saber qual é a ligação que vai receber o comando.
Existem 3 métodos muito importantes no objecto Command:
- ExecuteNonQuery: Executa comandos Insert,Delete,Update
- ExecuteReader: Retorna um resultado de um select pode ser uma ou varias linhas (rows) de uma tabela para um objecto DataReader.
- ExecuteScalar: Retorna um único valor, ou seja, o primeiro valor que encontra depois de executar um select
DataReader:
Objecto utilizado para receber os resultados de um ExecuteReader do Command e permite aceder a todas as colunas e linhas da tabela com o método Read().
DataSet:
Representação em memória de uma base de dados com uma ou mais tabelas (datatables). Permite receber os dados de uma BD e trabalhar com eles mesmo estando desligado da BD.
DataTable:
Tabela “Virtual” que representa em memória uma tabela existente numa BD. Tem colunas (datacolumns) e linhas (datarows).
DataAdapter:
“A cereja no topo do bolo” È um conjunto de commands e uma ligação a uma BD, que servirá para alimentar um dataset através do método Fill(). Com o DataAdapter e possível encapsular num único objecto todos os comandos existentes (Select,Insert…) e uma ligação (a qual não necessita de abrir nem fechar, o DataAdapter faz isso por nós).
Com os comandos bem definidos, podemos fazer todo o tipo de operações na BD com o método Update do DataAdapter que consegue ver as alterações que foram feitas num DataSet e replicar isso para a BD.
Passando ao programa: É um programa muito simples de despesas diárias. Em que podemos colocar o valor o dia e a descrição e vamos guardando esses dados. No ecrã de histórico podemos ver entre datas todas essas despesas.
- Passo 1:
Como a ligação é OLEDB temos de importar esse namespace: using System.Data.OleDb;
Criamos a variável global que vai conter a string de ligação: string ligacao = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Henrique Graça\Desktop\pplware\tut4\Despesas.mdb"; Esta string vai ser utilizada no decorrer do programa.
- Passo 2:
Feito isto criamos o método CarregaDados() que iremos colocar no Load da nossa form.
Neste método criamos usamos duas maneiras para ligar a BD uma da forma tradicional outra com o dataadapter.
- Passo 3:
Clique do botão nova despesa.
Criamos um datarow que ira ter como valor inicial uma row com as especificações da nossa tabela despesas DataRow dr = DsDespesas.Tables[0].NewRow(); Depois damos os valores a cada celula da row: dr["VALOR"] = txtValor.Text; Valor é o nome da coluna
- Passo 4:
Pesquisa por datas
Neste método usamos uma dataView que é como o nome indica uma visão diferente dos nossos dados, com a DataView podemos definir filtros, ordem e ate se queremos trabalhar com os dados iniciais ou alterados.
Como funciona a aplicação:
Para adicionar despesas basta ir carregando no botão e preencher os campos desejados, verá na lista os itens que estão no dataset.
Isto serve para mostrar como podemos trabalhar com dados estando desligados da BD. As alterações só são guardadas quando carregar no botão gravar.
Se carregar em Cancelar todas as alterações serão ignoradas.
Bom por hoje é tudo, sei que poderia ter falado de muito mais ou de outra forma, mas como este tema é muito vasto tentei somente falar do essencial. Espero que tenham gostado e que melhorem esta aplicação.
Download: Código ADO.NET [90.11KB]
Para a semana… Na altura em que escrevi isto ainda não sei o que irei falar, portanto é surpresa.
Cumprimentos a todos e boa programação.
Licença: Freeware
Sistemas Operativos: Windows 2k/XP/Vista/Win7
Download: Peopleware Despesas 0.1 [26.31KB]
Homepage: Peopleware
Este artigo tem mais de um ano
estes artigos devem dar uma trabalheira gigante, por isso é que o site/blog tem tanta qualidade/comunidade!
continua o bom trabalho.
http://www.tagravado.com
olá… estou a dar os primeiros passos na c# com acesso a base de dados no MySql, usando o mode de acesso desconectado..
se fosse possivel postar qualquer coisa,a explicar como fazer esta operações:adição, remoção e alteração de dados na base de dados… agradecia a ajuda
já que me encontro,bastante deprimida…pois os exemplos k encontro são em vb.net 🙁
espero que postem alguma coisa,
cumprimentos
Maria
Maria, encontrei algo que talvez te possa ajudar em alguma coisa. No entanto acho que nao aborda o “modo desconectado”, pois não li o tutorial.
http://www.macoratti.net/08/08/c_mysql1.htm
Bem, abre o Google e procura algo como isto: “C# with MySQL”, “C# MySQL modo desconectado”. Se perceberes ingles, tenta tambem dar uma busca em ingles, talvez encontres melhores resursos de estudo.
É so preciso ter paciencia que logo logo encontras algo pela net. Boa sorte,
Ricardo
@Henrique Graça
Parabéns pelo excelente tutorial. Para quem não sabe é uma mais valia tremenda e para quem já sabe, uma mais valia tremenda é porque relembra certos conceitos.
Nunca trabalhei com ADO.NET, mas pelo que percebi, se a BD tiver password de acesso, a mesma é passada na ConnectionString ou no ficheiro com extensão udl com as definições de acesso.
Qual o grau de segurança (baixo, médio, alto) que o ADO.NET oferece no código compilado para que a password não seja vista de “fora” (por exemplo, com um editor hexadecimal ou mesmo um editor de texto)?
Eu sei que a segurança é um factor relativo, mas se alguém tiver algum conhecimento nesta área, agradecia.
Muito bem sr.Henrique Graça…
Tou a gostar de ver.
Este semestre vai ser só 20.
oi estou iniciando a programar em visual basic 2008.
a cerca de uma base de dados onde tenha codigo de acesso, eu vi uma materia onde eles geravam um Hasha para os passwords. isso criava uma criptografia para os passwords inrreversiveis.
procura ver.
Boas, mais uma vez ainda n tive tempo para ler nem este artigo nem o anterior como deve ser e com a atencao k merecem embora o anterior ja tenha ido la buscar uma ou duas linhas de codigo para fazer umas cenas k n me lembrava (delegates :P) em relacao a este, a minha sugestao é em vez do ADO.Net usares o Linq em conjunto com o entity model, pareceme ser mais produtivo e mais agradavel de se trabalhar,mas por alguma razao que eu gostava que explicasses escolheste o ADO.Net , por isso n kero tar a falar para o ar sem saber as razoes.Eu nc usei o ADO.Net mas pelo k li por alto, n me agradou mt pelo menos qd comparado com outras solucoes como o linq por exemplo ou o SqlCommand k apenas tens k por a connection string.
Mais uma vez parabens e continua 😉
Bom artigo. Continuem, mesmo que todos nós tenhamos diferentes formas de ver/fazer/programar as coisas, encontra-se sempre boas dicas que melhoram ou recordam alguns itens já são feitos como rotinas…
@Shogun
Devido aos teus comentários já me fui informar sobre o entity model 🙂 .
E houve uma coisa que não gostei e é o que muita gente diz, é uma framework espectacular mas ainda não está muito eficaz, parece que regredimos e porquê? Porque ainda não suporta o ambiente desconectado, ou seja, temos de estar sempre a fazer chamadas á BD. Eu sinceramente prefiro TypedDatasets (aqueles que arrastamos para o visual studio) e é como se fossem objectos. Quanto ao linq adoro. E pronto vai ser isso que irei falar no próximo tutorial.
@Rascunho
Realmente dá trabalho mas depois de ler os comentários, passa logo. 🙂
@Henrique
Sim ainda tem alguns bugs, mas n percebi o que quiseste dizer com ambiente desconectado, eu posso dizer que ja a uns meses que trabalho com o entity model e so n uso para fazer ligaca a base de dados kd o proprio link n me permite fazer as querys que eu quero e ai sim, vai a bruta com SqlCommand 😛 mas de resto em termos produtivos e fantastico, eu disse que iria fazer um webcast de introducao ao entity model para aqui, a ver se para a semana consigo apresentar alguma coisa.
@Shogun
Só se eu estou a cometer alguma gafe. O que eu quero dizer com ambiente desconectado é o funcionamento para que foram criados os datasets para serem uma copia em memoria da BD, ou seja podes perder a ligação com a BD e mesmo assim adicionar rows, tabelas, fazer querys aos dados, etc. Depois de voltar a ter ligação á bd podes gravar tudo para lá. Isso é possivel com o entity model ou estamos sempre a fazer querys á BD e se não estivermos ligados dá erro?
Venha de lá esse video vou ver de certeza.
AH ok, sim tens que tar sp a fazer querys á BD, mas vou explorar isso a ver se consigo manter um ambiente desconectado, embora possas enviar tudo para memoria na mesma, depois a forma como acedes as cenas é k é diferente axo eu, mas heide experimentar, de kk forma n entendo a vantagem de poderes estar desconectado da bd, imagina que existe uma falha de luz a meio da operacao e k ja fizeste mt operacoes referentes a BD? perdes tudo, como nc trabalhei dessa forma n consigo ver vantagens, mas acredito que haja, com em tudo existem sp vantagens/desvantagens em kk solucao.Olha eu estava a pensar era fazer um webcast tipo akeles da microsoft, ao vivo, o k axas? podiamos organizar isso num fds kk e anunciar aki, n sei se a aceitacao seria grande mas nd como os responsaveis do pplware fazerem ai uma votacaozita 😛 senao faco msm stand-alone.
As maiores vantagens são a menor sobrecarga da BD a rapidez e o facto de poderes cancelar operações. Imagina um ecrã em que tens uma lista de clientes e queres adicionar um cliente. O que fazes? O caso mais prático e simples será criar uma nova row num dataset em memoria, se quiseres cancelar/anular essa operação bastava carregar no cancelar do ecrã e nenhuma alteração é feita na BD, mas adicionaste tudo certinho com os tipos de dados e tudo numa BD “Virtual”.
Ao vivo julgo que será complicado não sei como funcionaria e se o servidor aguentava as pessoas que estariam a ver :). Mas era uma ideia porreira, com perguntas dos utilizadores e tudo. Só mesmo o Vitor saberá se é possivel ou não.
@Paulo Nunes
A segurança não é nada relativo, é muito importante principalmente no que toca a dados, e sim tens razão a password pode ou não ser passada na ConnectionString.
Existem algumas formas de proteger a ConnectionString:
– Hardcoded no código (Pouco seguro)
– Usando na string a flag Integrated Security=true (que vai utilizar as credenciais do utilizador windows para aceder á bd só SQL)
– O melhor mesmo será guardar a ligação no app.config e encriptar com os metodos que o objecto Configuration nos fornece, podemos usar dois providers para as encriptações o “DataProtectionConfigurationProvider” e o “RSAProtectedConfigurationProvider”.
Num post futuro irei falar sobre segurança.
@Henrique Graça
Eu tenho uma base de dados em access para os funcionários de uma empresa fazerem as participações de risco. No access embora não tenha aprendido nada de programação, consigo desenrascar-me e fiz essa pequena base de dados. Fiquei interessado nestes vossos artigos e tentei ver se conseguia fazer em c#. Um ou outro comando já consegui fazer, mas colocar toda a base de dados a funcionar não está fácil. Gostaria de saber se seria possível enviar a base de dados para me poder dar uma ideia de como fazê-lo.
Será possível?
Grato pela atenção
@Henrique Graça e Paulo Nunes
O henrique tem razão na forma como esta a dizer para protejeres a tua password.. o “menos seguro” é sim meteres a passa hardcoded na connection string..
mas um problema mto maior levanta-se aqui relativamente a segurançao que é o ofuscator .. se nao protegeres bem o codigo esteja a pass onde estiver no codigo consegue-se achar com as ferramentas certas em menos de 1 min. 😉 o Henrique sabe do que estou a falar….
@Henrique Graça
O que achas de fazer um programa em C# para iniciar um WordPress Portable?
Muitos parabéns, pelo tutorial;
O ano passado numa das minha cadeiras tive de desenvolver um sistema de gestão semelhante, interligado com o Second Life…
Como posso adicionar um separador (tab) entre os 2 existentes? Já tentei mas só acrescenta no fim… e não o consigo arrastar para onde quero.
@ Ecrã Azul, fazer isso é muito simples, por isso vou tentar ser o mais directo e possível:
Muito bem, tens a TabControl na form, certo? (ao inserires uma nova o Visual Studio já a coloca no form com 2 tabs (ou abas como preferires). Tudo ok, agora fazes o seguinte: right-mouse click onde diz “tabPage1” e selecionas a opção, no pop-up menu, “Properties” (Propriedades). Daí, se reparares onde tens a janela de propriedades (Properties window) aparece selecionada a propriedade chamada “TabPages” em que o seu valor é uma Collection (Coleção). Ok, carrega no botãozinho com os três pontinhos e daí abre um janela “TabPage Collection Editor”. Se reparares, na lista do lado esquerdo aparecem as páginas que tens no Separador inserido no Form. Pronto aqui fazes o gerenciamento da TabControl (as tais tabs).
Muito bem, agora, deves ver 2 buttons (Add e Remove, Adicionar e Remover respectivamente). Carrega lá em Add. Inseriu uma tab chamada TabPage3 ou algo semelhante? De certeza que sim.
Ok, cá vai o que querias – seleciona na lista do lado esquerdo a TabPage3, depois, mesmo ao lado da lista vês 2 buttons, um com uma setinha para cima e outro com setinha para baixo). Pronto, carregas nas setinhas e deslocas as páginas para ficarem nos lugares que tu queres. Tal como perguntaste, para colocares uma terceira página no meio, carregas na tal TabPage3 e carregas no button com a setinha para cima… e voilá, está pronto.
Era bom que estudasses essas janelinha, pois existem outras semelhantes para ListBox’s, ComboBox, etc! bom estudo
Peço desculpas por não acompanhar com screenshots, mas não existe qualquer opção para tal. Pode ser que o Henrique Graça possa fazer um post breve a explicar o objectivo de uma window Collection Editor, pois ela evita ter de se usar código para controlar o objecto. No entanto, o código é bastante útil para fazer mudanças nos objectos em run-time.
Bem, espero ter sido claro na minha resposta. Apenas tentei ajudar 🙂
Boa sorte para o Pplware.
@Ricardo
Obrigadão. Das ListBox e comboBox eu sei que é assim (embora eu use mais a preencher dinâmicamente pela base de dados. Não me lembrei que as tabs também pudessem ser. Ás vezes um gajo não se lembra das coisas mais óbvias e anda à procura de soluções mais complicadas…
@Ricardo
E por mim não preciso dos screenshots… se tivesses falado só nas colecctions eu tinha lá ido ter logo. No entanto fica a explicação mais detalhada para alguém que necessite.
numa boa, pensei que pouco percebias da interface do programa. É como dizes, para aqueles que precisem de uma info mais detalhada, assim podem “brincar” com o tutorial do Henrique e implementar coisas novas. É que tanto existem pessoas que já “sabem” como as que “não sabem” que seguem vários tutoriais disponíveis 🙂
Fico contente por ter ajudado, Abraço
Quando eu vou fazer o download do Ado net ele da ERRO!Alguém me ajude por favor…
um grande abraço a esta equipa fastastica…
venho apelar para postarem mais coisas sobre ADO.net e c#
como criar uma base de dados, qual a importancia das chaves secundárias…
como fazer a ligação á base de dados utilizando C# e mysql
seria umas boas entradas
cumprimentos
Parabéns, estou estudando c# agora pouco e tenho encontrado aqui, uma boa fonte de informação, foi muito massa a ideia dos tutorias sobre C# tendo em vista que não é tão facio de encontrar em PT os artigos bons!
Se vc puder manda teu e-mail pra mim tirar algumas duvidas!
Saudações
Apesar de ser uma dúvida fora de tempo, gostaria de saber onde é que o objecto DsDespesa é declarado.
Obrigado
cara, sensacional, salva de palmas, continue assim, li tudinho, muito bem explicado, muito bom o portugues e a metodologia, qualidade 100%