VB.NET - Editando de dados em um DataSet
Este artigo pretende apresentar um roteiro básico do processo usado para editar dados em um DataSet. Quando eu digo editar estou me referindo as tarefas de alterar, incluir , excluir e consultar dados em um fonte de dados qualquer.
Editar dados em um DataSet é o processo de manipular os dados atuais em objetos DataTable individuais que compõem o DataSet. O processo refere-se as tarefas de incluir, atualizar, excluir e consultar registros em tabelas de um banco de dados.
Além de gerenciar o processo de alteração dos dados atuais, você pode também efetuar consultas em um DataTable para retornar linhas específicas de dados, por exemplo, linhas individuais, linhas com uma versão específica, somente as linhas que foram alteradas e linhas que contenham erros.
Podemos traçar um roteiro que compreende as tarefas comuns relacionadas a edição e a consulta de dados em um DataSet. A seguir temos este roteiro:
Tarefa | Descrição |
---|---|
1- Incluir novos registros em um DataTable | Crie um novo DataRow e inclua-o na coleção de linhas da tabela. |
2- Atualizar registros existentes em um DataTable | Atribua um valor diretamente a uma coluna específica de um DataRow. |
3- Deletar registros existentes de um DataTable | Invoque o método Delete do DataRow do qual você deseja remover. |
4- Localizar registros alterados na DataTable | Invoque o método GetChanges da DataTable. |
5- Acessar versões diferentes de uma linha em um DataTable | Acesse as colunas individuais do DataRow passando a DataRowVersion que você deseja ver. |
6- Localizar linhas com erros em um DataTable. | Inspecione a propriedade HasErros do DataTable. |
Vamos agora detalhar cada uma das tarefas acima mapeadas para que você tenha um visão global do processo de edição de dados em um DataSet.
1- Incluir novos registros em um DataTable
Para incluir novos registros em um DataSet , um novo data row precisa ser criado e incluído na coleção DataRow (Rows) de um DataTable em um data set. Veremos como efetuar este procedimento em um DataSet tipado e em um DataSet não tipado.
Nota: Se você estiver usando os controles vinculados de dados em sua aplicação, estes controles possuem a habilidade de incluir novos registros através de um botão Add New do controle BindingNavigator.
a-) Incluindo um novo registro em um DataSet Tipado
Vamos supor que estamos trabalhando com uma fonte de dados que possui uma tabela chamada Clientes, e, que esta tabela possui duas colunas : Codigo e Nome.
Um DataSet tipado expõe os nomes das colunas como propriedades do objeto tipado DataRow, neste caso ClientesRow.
Obs: Uma das formas de criar um
dataset tipado e clicar com o botão direito do mouse sobre o nome do projeto e
selecionar a opção
Add->New item. A seguir da janela que se abre selecione o template DataSet
e informe um nome ao mesmo. A seguir clique no ícone Configure
DataSet with
Wizard localizado na janela
Data Sources da janela
Solution Explorer .
1- Declare uma nova instância do dataset tipado, no artigo vamos
declarar uma nova instância da classe ClientesRow
2- A seguir vamos atribuir a esta instância uma nova linha (row)
3- O próximo passo é preencher as colunas com dados
4- Finalmente inclua a nova linha na coleção de linhas da tabela Clientes
Dim novoClienteDS
As ClientesDS.ClientesRow novoClienteDS = ClientesDS1.Clientes.NewClientesRow
novoClienteDS.Nome = "Macoratti"
|
Nota: ClientesDS1 é uma instância de ClientesDS
b-) Incluindo um novo registro em um DataSet não tipado
Um dataset não tipado é aquele que você cria via código de programação; desta forma ao trabalhar com um dataset não tipado você precisa saber o nome das colunas ou índices quando estiver criando o seu código.
Vamos supor que estamos trabalhando com uma fonte de dados que possui uma tabela chamada Clientes, e, que esta tabela possui duas colunas : Codigo e Nome.
Para incluir um registro em um dataset não tipado siga o roteiro:
Invoque o método NewRow do objeto DataTable para cria uma nova linha vazia. (esta nova linha herda a sua estrutura das colunas a partir da coleção DataColumnCollection do datatable.)
A seguir atribua os valores diretamente as respectivas colunas
Finalmente inclua a nova linha na coleção Rows da tabela
Dim novoCliente
As DataRow =
DataSet1.Tables("Clientes").NewRow() novoClienteDS("Codigo") = 10 novoClienteDS("Nome") = "Macoratti"
|
2- Atualizando registros em um DataTable
Afim de editar uma linha existente em um DataTable você precisa localizar o DataRow que você deseja editar, e então atribuir os valores atualizados para as colunas desejadas. Vejamos um panorama de atuação:
a-) Atualizando um registro em um DataTable quando você não conhece o índice da linha que você quer editar em um dataset tipado
Geralmente você não conhece o índice da linha que deseja editar. Os DataTables nos datasets tipados são criados com o método FindBy que usa a chave primária da tabela para localizar a linha do registro desejado.
Para editar registros existentes em dataset tipados (quando não se conhece o índice) faça o seguinte :
Atribua um DataRow específico para uma variável usando o método FindBy gerado e então use a variável para acessar as colunas que você deseja editar e atribuir novos valores
No trecho de código a seguir a coluna Codigo é a chave primária da tabela Cliente , logo o método FindBy gerado será FindByCodigo.
Dim ClientesRow
As ClientesDS.ClientesRow ClientesRow = ClientesDS.Clientes.FindByCodigo(10) ClientesRow.Nome = "Macoratti" |
b-) Atualizando um registro em um dataset não tipado (quando o índice não é conhecido)
No trecho de código a seguir a coluna Codigo é a chave primária da tabela Clientes, desta forma chamado o método Select e procurando pela chave primária irá encontrar uma única linha. O tipo retornado é ainda um array de DataRows, desta forma nos acessamos o primeiro índice (0) , ou primeira linha , no array.
Dim clienteLinha
As Data.DataRow clienteLinha = DataSet1.Tables("Clientes").Select("Codigo = 10") clienteLinha(0)("Nome")
= " Macoratti " |
c-) Atualizando um registro em um DataTable quando você conhece o índice da linha que deseja editar usando dataset tipados
Para esta situação você atribui um valor para a coluna específica usando o objeto DataRow.
Os datasets tipados utilizam a vinculação precoce , a qual expõe os nomes das tabelas e colunas como propriedades em tempo de projeto. Isto resulta em um código que fácil de ler e manter.
No exemplo a seguir estamos atualizando os dados da coluna Nome do quinto registro na tabela Clientes no dataset
ClientesDS1.Clientes(4).Nome = "Macoratti"
d-) Atualizando registros existentes em um dataset não tipado (quando se conhece o índice da linha)
Neste caso atribua um valor a coluna específica com um objeto DataRow.
Os nomes das colunas e das tabelas em um dataset não tipado não estão disponível em tempo de projeto e precisam ser acessados através do seu respectivo índice.
O trecho de código a seguir mostra como atualizar os dados da primeiras coluna do quinto registro da primeira tabela no DataSet1 acessando os valores dos dados através da coleção de índices das tabelas, linhas e itens(colunas).
DataSet1.Tables(0).Rows(4).Item(1) =
"Macoratti"
3- Excluindo linhas em um DataTable
A fim de reter a informação que o dataset precisa para enviar atualizações para a fonte de dados, use o método Delete para remover as linhas no DataTable. Desta forma se sua aplicação utiliza um TableAdapter ou um DataAdapter, o método Update do adaptador irá deletar as linhas no banco de dados que tem a propriedade RowState igual a Deleted.
Se a sua aplicação não precisa enviar atualizações para fonte de dados , então é possível remover os registros acessando diretamente a coleção datarow.
Para deletar registros de um Datable chame o método Delete do objeto DataRow. Este método não remove fisicamente o registro , apenas o marca para exclusão.
Nota: Se você obter a propriedade Count de um DataRowCollection , o resultado incluirá registros que foram marcados para exclusão. Para obter um valor preciso ao usar Count dos registros que não estão marcados para exclusão, você pode percorrer a coleção e inspecionar a propriedade RowState de cada registro (registros marcados para deleção tem RowState igual a Deleted). Outra alternativa é criar um data view do dataset que filtra os registros baseado no estado da linha (row state).
No exemplo a seguir estamos invocando o método Delete para marcar a primeira linha da tabela Clientes como deletada:
a-) DataSet tipado
ClientesDS1.Clientes.Rows(0).Delete()
b-) DataSet não tipado
DataSet1.Tables("Clientes").Rows(0).Delete()
Acabei de apresentar os princípios básicos envolvidos nas operações de edição de uma fonte de dados para os dataset tipados e não tipados. Estes conceitos foram praticamente traduzidos da MSDN e são de fundamental importância para quem deseja trabalhar com acesso a banco de dados no VB.NET.
Aguardo você no próximo artigo VB.NET...
referencias:
Editing Data in your application - http://msdn2.microsoft.com/en-US/library/ms171928.aspx
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?
|
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: