ASP.NET 2.0 - O controle de dados ObjectDatasource
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:
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:
|
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.
Uma aplicação prática de design de aplicativo muito comum é separar a camada de apresentação da lógica comercial e encapsular a lógica comercial em objetos comerciais. Esses objetos comerciais formam uma camada distinta entre a camada de apresentação e a camada de dados, resultando em uma arquitetura de aplicativo em três camadas. O controle ObjectDataSource permite aos desenvolvedores usar um controle de fonte de dados ASP.NET mantendo sua arquitetura de aplicativo em três camadas.
O controle ObjectDataSource usa Reflection para criar instâncias de objetos comerciais e para chamar métodos para recuperar, atualizar, inserir e excluir dados. A propriedade TyepeName identifica o nome da classe com a qual o controle ObjectDataSource funciona. O controle ObjectDataSource cria e destrói uma instância da classe para cada chamada de método; ele não tem o objeto na memória para o tempo de vida da solicitação da Web. Esta é uma consideração séria se o objeto comercial que você usar requerer muitos recursos ou caso contrário é dispendioso para criar e destruir. Usando um objeto que consome muitos recursos pode não ser uma opção de Design ideal, mas você pode controlar o ciclo de vida do objeto usando os eventos ObjectCreating, ObjectCreated, e ObjectDisposing.
Como já foi dito acima, uma grande aplicação web geralmente possui uma arquitetura dividida em diferentes camadas, sendo que o mais comum é usar 3 camadas:
Assumindo que você tenha definido uma camada de acesso a dados (DAL) o controle ObjectDataSource pode ser usado para encapsular a informação retornada da DAL. Quando usar um controle ObjectDataSource você tera que fornecer duas informações:
Usando o controle ObjectDataSource
Para demonstrar a utilização do controle ObjectDataSource vamos criar uma camada de acesso a dados (DAL) bem simples para interagir com o banco de dados Northwind.mdb.
Vamos acessar os dados da tabela Products cuja estrutura é exibida na figura a seguir:
A nossa DAL é constituída de:
1-) uma classe Produtos que possui as seguintes propriedades:(Refletindo os campos da tabela Products)
2-) Uma classe ProdutoDAL que contém um método estático chamado GetProdutos() e que retorna a lista de produtos. Vamos incluir o código da classe Produtos e da classe ProdutoDAL em um arquivo chamado DAL.vb que deverá ser colocado na pasta App_Code.
Vamos usar o Visual Web Developer 2005 Express Edition e criar um novo site web na opção File -> New Web Site com o nome de objectDataSourceNet
Na janela Solution Explorer clique com o botão direito do mouse sobre o nome do projeto e escolha Add New Item, e na janela a seguir selecione o template Class e informe o nome DAL.vb
Será apresentada uma janela solicitando a sua intervenção para colocar o arquivo a ser criado na basta App_Code da aplicação. Clique no botão Sim, desta forma garantimos que ele será compilado automaticamente e acessado pelas páginas da aplicação.
A seguir temos o código da classe Produtos e da classe ProdutoDAL no arquivo DAL.vb;
Imports System.Configuration Imports System.Data Imports System.Data.SqlClient Imports System.Collections.Generic Public Class DAL Public Class Product #Region "variaveis membros Privadas" Private _productID As Integer Private _productName As String Private _quantityPerUnit As String Private _unitPrice As Decimal Private _unitsInStock As Integer #End Region #Region "Construtores" Public Sub New() End Sub Public Sub New(ByVal productID As Integer, ByVal productName As String, ByVal quantityPerUnit As String, ByVal unitPrice As Decimal, ByVal unitsInStock As Integer) Me._productID = productID Me._productName = productName Me._quantityPerUnit = quantityPerUnit Me._unitPrice = unitPrice Me._unitsInStock = unitsInStock End Sub #End Region #Region "Public Properties" Public Property ProductID() As Integer Get Return _productID End Get Set(ByVal value As Integer) If value < 0 Then Throw New ArgumentException("O valor de ProductID precisa ser maior ou igual a zero.") Else _productID = value End If End Set End Property Public Property ProductName() As String Get Return _productName End Get Set(ByVal value As String) _productName = value End Set End Property Public Property QuantityPerUnit() As String Get Return _quantityPerUnit End Get Set(ByVal value As String) _quantityPerUnit = value End Set End Property Public Property UnitPrice() As Decimal Get Return _unitPrice End Get Set(ByVal value As Decimal) If value < 0 Then Throw New ArgumentException("O valor de UnitPrice precisa ser maior ou igual a zero.") Else _unitPrice = value End If End Set End Property Public Property UnitsInStock() As Integer Get Return _unitsInStock End Get Set(ByVal value As Integer) If value < 0 Then Throw New ArgumentException("O valor de UnitsInStock precisa ser maior ou igual a zero.") Else _unitsInStock = value End If End Set End Property #End Region End Class Public Class ProductDAL Public Shared Function GetProdutos() As List(Of Product) ' retorna uma lista de instâncias de Produtos baseado na tabela Product do banco de dados Northwind Dim sql As String = "SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice, UnitsInStock FROM Products"
Dim myConnection As New
SqlConnection(ConfigurationManager.ConnectionStrings("NWConnectionString").ConnectionString) |
No código acima o método GetProdutos retorna os campos relacionados da tabela Products do banco de dados Northwind.mdb e em seguida percorre (loop) o resultado obtido criando uma instância Product para cada um e incluindo a instância a uma Lista (List) de Produtos. Esta lista é então retornada no final do método.
A seguir a string de conexão usada :
"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\dados\NORTHWND.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True"
Para exibir dados das classes DAL em páginas ASP.NET inclua um controle ObjectDataSource a página Default.aspx e clique na opção Configure Data Source na Smart tag - ObjectDataSource Tasks:
O assistente de configuração será iniciado. Selecione a opção contendo o objeto de negócio criado com a classe ProdutoDAL:
Na aba SELECT escolha o método indicado - GetProdutos e clique no botão Finish:
Inserindo um controle GridView no formulário e definindo o seu DataSource para o objectDataSource1 definido (poderíamos ter usando um nome mais pertinente para o objeto criado) já estamos prontos para exibir os dados da tabela Products na página web.
Efetuando uma formatação no GridView através da opção Auto Format... da GridView Tasks e executando o projeto iremos obter:
Como vemos através do controle ObjectDataSource podemos acessar a camada de dados através da DAL usando os s métodos definidos, no caso getProdutos.
Uma pergunta: Como fazemos para excluir dados e para editar dados de uma fonte de dados usando o ObjectDataSource ?
Criando os métodos para excluir e editar na classe ProdutoDAL , é claro. Vejamos como realizar esta tarefa...
Acompanhe o artigo - ASP.NET 2.0 - ObjectDataSource : Incluindo e atualizando dados
José Carlos Macoratti