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.Codigo = 10

novoClienteDS.Nome = "Macoratti"


ClientesDS1.Clientes.Rows.Add(novoClienteDS)

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:

Dim novoCliente As DataRow = DataSet1.Tables("Clientes").NewRow()
 

novoClienteDS("Codigo") = 10

novoClienteDS("Nome") = "Macoratti"


DataSet1.Tables("Clientes")..Rows.Add(novoCliente)

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 :

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)

Neste caso você deve usar o método Select do DataTable para localizar uma linha específica e atribuir novos valores a coluna desejada. Nos DataSets não tipados os DataTables são criados com o método Select que retorna um array de DataRows.

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:


José Carlos Macoratti