ASP.NET 2.0 - Usando o  controle SqlDataSource


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 Edition:

  • 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 do SQL Server.

Usando o controle SqlDataSource

O controle SqlDataSource permite que você use um controle da Web para acessar dados localizados em um banco de dados relacional, inclusive bancos de dados Microsoft SQL Server e Oracle, bem como fontes de dados OLE DB e ODBC. Você pode usar o controle SqlDataSource com outros controles que exibem dados, como os controles GridView, FormView e DetailsView para exibir e manipular dados em um página da Web do ASP.NET, usando pouco ou nenhum código.

O controle SqlDataSource usa classes ADO.NET para interagir com qualquer banco de dados suportados para ADO.NET. Isto inclui o Microsoft SQL Server e o Oracle. O uso de um controle SqlDataSource permite-lhe acessar e manipular dados em uma página ASP.NET sem usar classes ADO.NET diretamente.

Você fornece uma seqüência de caracteres de conexão para se conectar ao seu banco de dados e definir as instruções SQL ou procedimentos armazenados que trabalham com os dados. Em tempo de execução, o controle SqlDataSource automaticamente abre a conexão de banco de dados, executa a instrução SQL ou procedimento armazenado, retorna os dados selecionados (se houver), e em seguida, fecha a conexão.

O controle SqlDataSource pode retornar dados de duas formas: como um objeto DataSet ou como um leitor de dados- DataReader- ADO.NET. Você pode especificar qual formulário retornar ao definir a propriedade DataSourceMode do controle de origem de dados.

Como regra, você opta por retornar um dataset se você desejar filtrar, classificar, ou pajear por dados após recuperá-los ou se você desejar manter um cache.

Em contraste, você usa um DataReader quando você simplesmente desejar retornar os dados e estiver usando um controle na página para exibir esses dados. Por exemplo, o uso de DataReader é ideal para retornar dados que você deseja exibir em um controle ListBox, DropDownList, ou GridView onde uma os resultados são exibidos em um formato somente leitura.

Referência: http://msdnwiki.microsoft.com/pt-br/mtpswiki/dz12d98w(VS.80).aspx

Para saber mais acompanhe os artigos: ASP.NET 2.0  - Os novos controles para acesso a dados - SqlDataSource.

Acessando dados e exibindo na página web

A seguir um exemplo de utilização do controle SqlDataSource em páginas ASP.NET. Vou usar o Visual Web Developer Express Edition (SP1)

Crie um novo web site via menu File opção New Web Site com o nome de gdvProcura e altere o nome da página Default.aspx para Busca.aspx.

A seguir inclua os controles TextBox, Button , GridView e SqlDataSource conforme a figura a abaixo:

Neste exemplo vou acessar a tabela Products do banco de dados Northwind no SQL Server 2005. Nosso objetivo será:

 Nota: Para saber mais sobre o SQL Server 2005 acompanhe os artigos:

Vamos configurar o acesso aos dados usando o SqlDataSource. Temos que definir duas consultas distintas que acessam a mesma tabela.

Selecione o controle SqlDataSource1 e clique na opção Configure Data Source...

Na janela Choose Your Data Connection clique no botão New Connection(1) e a seguir na janela Add Connection clique em Browse(2) para selecionar o arquivo Northwind no local onde você o instalou quando fez o download. Finalmente clique em Abrir (3)

A retornar clique em OK e primeira janela clique no botão Next> . Na janela Configure the Select Statement selecione a tabela Products e escolha os campos indicados.

Após clicar no botão WHERE vamos montar a instrução SQL contendo o critério que deverá ser informado na caixa de texto txtCriterio conforme abaixo, para isso selecione:

- Column - ProductName - Pois iremos selecionar o produto pelo nome;
- Operator=  - Iremos selecionar o nome do produto igual ao informado pelo usuário;
- Source - Control - Vamos obter o critério a partir de um controle do formulário web;
- Control ID - txtCriterio - É o ID do controle TextBox usado no web form;

Clique no botão Add para que a cláusula Where seja montada

Realizamos todas as etapas anteriores apenas para mostrar como o Assistente cria a os parâmetros que serão usados com o controle SqlDataSource. Veja o trecho gerado no modo Source:

Vamos agora inclui no código fonte da página , modo Source, o seguinte código:

No arquivo code-behind - busca.aspx.vb inclua o código a seguir:

Imports System.configuration
Partial Class _Default
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

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

SqlDataSource1.SelectCommand = "SELECT [ProductID], [ProductName], [UnitPrice], [UnitsInStock] FROM [Products] WHERE ([ProductName] = @ProductName)"
SqlDataSource1.ConnectionString = conexaoBD

SqlDataSource2.SelectCommand = "SELECT [ProductID], [ProductName], [QuantityPerUnit], [UnitPrice], [UnitsInStock] FROM [Products]"
SqlDataSource2.ConnectionString = conexaoBD
End Sub


Sub mostraSelecao(ByVal Source As Object, ByVal E As EventArgs)
   GridView1.DataSourceID = "SqlDataSource1"
   GridView1.DataBind()
End Sub

Sub mostraTudo(ByVal Source As Object, ByVal E As EventArgs)
   GridView1.DataSourceID = "SqlDataSource2"
   GridView1.DataBind()
End Sub

End Class

No código acima destacamos :

  1. A definição da string de conexão - conexaoBD - usando o banco de dados Northwind.mdf; (Você pode usar o assistente para montar a string de conexão para você...)
  2. A instrução SQL para SelectCommand e a ConnectionString para cada um dos objetos SqlDataSource usados no projeto:

sqlDataSource1 -  "SELECT [ProductID], [ProductName], [UnitPrice], [UnitsInStock] FROM [Products] WHERE ([ProductName] = @ProductName)"
sqlDataSource2 -  SELECT [ProductID], [ProductName], [QuantityPerUnit], [UnitPrice], [UnitsInStock] FROM [Products]

  1. O método mostraSelecao para exibir o produto pelo nome informado pelo usuário e ao evento OnClick do botão - Mostrar Seleção
  2. O método mostraTudo exibindo todos os produtos e vinculado ao evento OnClick do botão - Mostrar Tudo

Executando o projeto e informando o nome Tofu, após clicar no botão Mostrar Seleção iremos obter;

O resultado abaixo mostra a página obtida se clicarmos no botão - Mostrar Tudo.

Pegue o projeto completo aqui: gdvProcura.zip

E até o próximo artigo ASP.NET 2.0 ...