ASP.NET 2.0 - ObjectDatasource : Atualizando e excluindo dados.


Se você quer criar páginas na internet para interagir com banco de dados tem a obrigação de conhecer os novos controles de acesso a dados da ASP.NET versão 2.0.

Podemos visualizar os principais controles de acesso a dados a partir da ToolBox do Visual Web Developer Express:

  • SqlDataSource
  • AccessDataSource
  • ObjectDataSource
  • XmlDataSource
  • SiteMapDataSource

Cada um deles tem um propósito específico e neste artigo vamos ver como podemos usar estes controles para acessar dados e exibi-los em páginas ASP.NET. Vamos lá...

Para acompanhar este artigo você necessitará dos seguintes recursos (todos gratuitos) instalados:

  • Visual Web Developer Express Edition
  • SQL Server 2005 Express Edition
  • Banco de dados Northwind

Usando o controle ObjectDataSource

O ObjectDataSource é um controle de origem de dados ASP.NET que representa um objeto de camada intermediária que reconhece dados ou um objeto de interface de dados para controles ligados a dados. Você pode usar o controle ObjectDataSource em conjunto com um controle ligado a dados para exibir, editar, e classificar dados em uma página da Web com pouco ou nenhum código.

No artigo - ASP.NET  2.0 - O controle ObjectDataSource : gerenciando dados apresentamos o controle e mostramos uma utilização básica que era obter dados de uma camada de acesso aos dados (DAL).

Neste artigo ou mostrar como podemos efetuar as operações básicas de inclusão , alteração e exclusão de dados usando o componente ObjectDataSource.

Para aplicações web mais complexas , ao invés de simplesmente usar o objeto SqlDataSource, uma melhor estratégia é dividir a arquitetura da aplicação em diferentes camadas;  geralmente se usa 3 camadas:

  1. A camada de apresentação que contém as páginas ASP.NET;
  2. A cada de acesso a dados ou DAL , que consiste de classes que são usadas para receberem as requisições da camada de apresentação e acessarem a camada de dados;
  3. A camada de armazenamento de dados, neste caso , um banco de dados SQL Server ou Microsoft Access.

O pré-requisito para usar o ObjectDataSource é criar a camada de acesso aos dados (DAL), após fazermos isto , o componente pode ser usado para encapsular a informação retornada a partir da DAL. As tarefas que temos que realizar para preparar o ambiente para isso são:

No primeiro artigo acima citado eu já criei a camada de acesso a dados (DAL), defini o nome da camada e criei um método para obter dados da tabela  Products do banco de dados Northwind.mdf chamado getProdutos.

ObjectDataSource - Atualizando e Excluindo dados

Excluir um registro em um componente GridView que esta vinculado a um ObjectDataSource segue a mesma lógica usada para excluir um registro de um GridView vinculado a um SqlDataSource. A única diferença é que a camada de acesso aos dados tem que fornecer o método para deletar o registro.

Cabe ressaltar que quando estamos manipulando os dados exposto por um ObjectDataSource existem dois métodos que podem ser usados para tratar os dados. O ObjectDataSource possui uma propriedade chamada ConfictDetection que pode possuir um dos seguintes valores:

Nota: Para saber mais leia o artigo - VB2005 - Introdução a concorrência de dados

No exemplo abaixo estamos usando o valor padrão (OverwriteChanges)

Vamos definir os método para excluir e para atualizar um registro da tabela Products do banco de dados Northwind.mdf usando a camada de acesso a dados criada no artigo : ASP.NET  2.0 - O controle ObjectDataSource : gerenciando dados. Para ficar mais fácil a visualização vou exibir no código somente os métodos excluiProduto() e atualizaProduto():

Nota: Ambos os métodos serão criados na classe ProdutoDAL e são métodos estáticos (Shared).

...
Public Class ProdutoDAL

 

Public Shared Sub atualizaProduto(ByVal ProductID As Integer, ByVal productName As String, ByVal unitPrice As Decimal, ByVal unitsInStock As Integer, ByVal quantityPerUnit As String)


'Atualiza a tabela Products

Dim sql As String = "UPDATE Products SET ProductName = @ProductName, UnitPrice = @UnitPrice, UnitsInStock = @UnitsInStock, QuantityPerUnit = @quantityPerUnit WHERE ProductID = @ProductID"
 

Using conexaoBD As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=C:\dados\NORTHWND.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True")

Dim comandoBD As New SqlCommand(sql, conexaoBD)

comandoBD.Parameters.Add(New SqlParameter("@ProductName", productName))

comandoBD.Parameters.Add(New SqlParameter("@UnitPrice", unitPrice))

comandoBD.Parameters.Add(New SqlParameter("@UnitsInStock", unitsInStock))

comandoBD.Parameters.Add(New SqlParameter("@QuantityPerUnit", quantityPerUnit))

comandoBD.Parameters.Add(New SqlParameter("@ProductID", ProductID))

conexaoBD.Open()

comandoBD.ExecuteNonQuery()

conexaoBD.Close()

End Using

End Sub

 

Public Shared Sub excluiProduto(ByVal ProductID As Integer)


' Exclui um regitro especifico da tabela Products do banco de dados Northwind

Dim sql As String = "DELETE FROM [Products] WHERE ProductID = @ProductID"

Dim strConexao As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\dados\NORTHWND.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True"


Using
conexaoBD As New
SqlConnection(strConexao)

Dim comandoBD As New SqlCommand(sql, conexaoBD)

comandoBD.Parameters.Add(New SqlParameter("@ProductID", ProductID))

conexaoBD.Open()

comandoBD.ExecuteNonQuery()

conexaoBD.Close()

End Using

 

End Sub

End Class

End Class

End Class

Nota:  Para excluir um registro da tabela Products eu exclui todos os relacionamentos da tabela, caso contrário ocorreria um erro.

Após definir os métodos na classe ProdutoDAL temos que ajustar o componente ObjectDataSource para usar as classes criadas.

Voltemos ao DataGridView e na opção GridView Tasks clique em Configure Data Source ...

A seguir na janela Configure Data Source , selecione os objetos de negócio conforme abaixo e clique em Next>

A próxima tarefa é mapear o ObjectDataSource para os métodos criados:

Após efetuarmos o mapeamento vamos configurar o DataGridView; Clique em Edit Columns(1) e a seguir em CommandField(2) e altere o texto para exibir os comandos em português(3) e altere a propriedade ButtonType para Button afim de exibir botões de comando no datagridview,  conforme a figura:

Após clicarmos em Auto Format.. e selecionarmos uma formatação mais atraente podemos executar o projeto.

 Executando o projeto iremos obter o seguinte resultado:

Pegue o projeto completo aqui: objectDataSourceNet.zip

Você vai notar que basta clicar no botão Excluir para que o registro seja excluído sumariamente do grid, que tal incluirmos uma solicitação de confirmação ao usuário antes de excluir ?

Verei isso amanhã...

Acompanhe ainda o  artigo ASP.NET 2.0 - ObjectDataSource : inserindo dados (ainda não esta ativo)


José Carlos Macoratti