Você está na página 1de 13

ASP .

NET - Usando ObjectDataSource com MySQL para manuteno de dados


Neste artigo vamos acessar um banco de dados MySQL em um projeto ASP .NET usando ObjectDataSource. Para saber mais sobre o ObjectDataSource veja os meus artigos: ASP.NET 2.0 - ObjectDataSource : Incluindo e atualizando dados VB 2005 - Usando o ObjectDataSource ObjectDataSource - Trabalhando em camadas ASP.NET 2.0 - ObjectDataSource - trabalhando em camadas II

Primeiro baixe a verso 5 MySQL Community Server , que gratuito no stio: http://dev.mysql.com/downloads/ Em seguida baixe tambm o conector NET para a plataforma .NET em : http://dev.mysql.com/downloads/connector/net/5.2.html A instalao padro muito simples, basta seguir as orientaes do assistente. Recomendo alterar a senha do usurio root. Agora baixe e instale o MySQL Administrator para administrar o servidor MySQL. Vamos instalar tambm uma ferramenta grfica para poder trabalhar com o MySQL para executar consultas e criar stored procedures: MySQL Query Browser Obs: As duas ltimas ferramentas so disponbilizadas em um nico pacote em : http://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-gui-tools-5.0-r12-win32.msi/from/pick Haja download , mas em compensao tudo grtis... Aps terminar a instalao de todas as ferramentas indicadas voc pode conferir no Windows , Menu Iniciar -> Todos Programas a relao dos programas instalados:

Criando o Banco de dados e as tabelas no MySQL


Agora execute o MySQL Administrato r e abra o MySQL; se tudo foi realmente instalado corretamente voc dever obter o seguinte resultado:

Informando o usurio root e senha definida na etapa da instalao ser aberta a janela abaixo:

Como padro o MySQL apresenta um banco de dados Test. Selecionando o banco de dados vemos que no existe nenhuma tabela criada.

Para criar um novo banco de dados clique sobre a rea vazia que apresenta os schemas e selecione a opo Create New Schema;

Vamos criar um banco de dados chamado Cadastro para usar como exemplo neste artigo. Digite o nome Cadastro e clique em OK para criar o banco de dados.

Agora que j temos o banco de dados vamos clicar no boto Create Table e definir a tabela Mensagens conforme abaixo:

Clicando no boto Apply Changes ser exibida o comando SQL para criao da tabela. Clique em Execute para gerar a tabela Mensagens.

Agora vamos criar as stored procedures. Selecione a guia Stored Procedures e clique no boto Create PROCEDURE e informe o nome sp_DeletarMensagem para criar a stored procedure para excluir mensagens da tabela Mensagens;

Usando o editor SQL digite o texto para criar a stored procedure que ir excluir mensagens da tabela Mensagens:

Clicando no boto Execute SQL veremos a stored procedure exibida no MySQL Administrator:

A seguir repita os passos acima para criar as demais stored procedures, vamos l: 1- sp_InserirMensagem - Inclui uma mensagem na tabela Mensagens;

2- sp_AtualizarMensagem - Atualiza uma mensagem na tabela Mensagens;

3- sp_ListaMensagens - Exibe todas as mensagens da tabela Mensagens;

Ao final teremos as stored procedures criadas e armazenadas no banco de dados Cadastro .

E com isso j criamos a infra-estrutura necessria para podermos criar nossa aplicao ASP .NET usando o ObjectDataSource com MySQL.

Criando o web site no Visual Web Developer 2008 Express


Abra o Visual Web Developer 2008 Express Edition e crie um novo web site chamado objDsMySQL; Altere o nome do arquivo Default.aspx para Manutencao.aspx (ou se preferir deixe com o nome padro).

Abra o arquivo web.config e defina a string de conexo conforme abaixo na seo <connectionStrings> :

Nota: Para cifrar as informaes sobre a string de conexo uma opo utilizar a ferramenta ASP NET IIS Registration Tool (Aspnet_regiis.exe). Para isso basta identificar a seo que deseja cifrar e especific-la na a linha de comando chamando este aplicativo. A linha de comando para a seo <connectionStrings> seria: aspnet_regiis -pef

connectionStrings.
A prxima etapa criar uma classe onde iremos definir os mtodos que iro retornar os dados atravs do objeto ObjectDataSource; Vamos criar duas classes: 1 - A classe MensagemItem que ir representar a nossa mensagem e ser usada para passar os parmetros para o controle ObjectDataSource; 2 - A classe acessoBD que ir efetuar o acesso aos dados executando as stored procedures definidas; No menu Web Site selecione a opo Add New Item e em Templates Class e informe o nome MensagemItem.vb; a classe ser criada na pasta App_Code. Digite o cdigo para a classe MensagemItem conforme abaixo:

Imports Microsoft.VisualBasic Public Class MensagemItem Private _Codigo As Integer Private _Mensagem As String Private _Nome As String Private _Email As String Public Sub New() End Sub Public Property Codigo() As Integer Get Return _Codigo End Get Set(ByVal value As Integer) _Codigo = value End Set End Property Public Property Mensagem() As String Codigo Get Mensagem Return _Mensagem Nome End Get Email Set(ByVal value As String) _Mensagem = value representando cada um dos campos da tabela Mensagens. End Set End Property Public Property Nome() As String Get
Na classe MensagemItem criamos as propriedades :

Return _Nome End Get Set(ByVal value As String) _Nome = value End Set End Property Public Property Email() As String Get Return _Email End Get Set(ByVal value As String) _Email = value End Set End Property End Class
Agora vamos criar outra classe chamada acessoBD que ser responsvel pelo acesso aos dados armazenados no MySQL. No menu Web Site selecione a opo Add New Item e em Templates Class e informe o nome acessoBD.vb; a classe ser criada na pasta App_Code. Imports Microsoft.VisualBasic Imports System Imports System.Collections.Generic Imports System.Data Imports MySql.Data.MySqlClient Imports System.Configuration Imports System.ComponentModel <DataObject(True)> _ Public NotInheritable Class acessoBD Private Sub New() End Sub Private Shared Function GetConnectionString() As String Return ConfigurationManager.ConnectionStrings("MySQLConnectionString").ConnectionString End Function <DataObjectMethod(DataObjectMethodType.[Select])> _ Public Shared Function GetMensagems() As List(Of MensagemItem) Dim cmd As New MySqlCommand("sp_ListaMensagens", New MySqlConnection(GetConnectionString())) cmd.CommandType = CommandType.StoredProcedure cmd.Connection.Open() Dim dr As MySqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection) Dim MensagemItemlist As New List(Of MensagemItem)() While dr.Read() Dim MensagemItem As New MensagemItem() MensagemItem.Codigo = Convert.ToInt32(dr("Codigo")) MensagemItem.Mensagem = Convert.ToString(dr("Mensagem")) MensagemItem.Nome = Convert.ToString(dr("Nome")) MensagemItem.Email = Convert.ToString(dr("Email")) MensagemItemlist.Add(MensagemItem) End While dr.Close() Return MensagemItemlist End Function

<DataObjectMethod(DataObjectMethodType.Insert)> _ Public Shared Sub AddMensagem(ByVal MensagemItem As MensagemItem) Dim cmd As New MySqlCommand("sp_InserirMensagem", New MySqlConnection(GetConnectionString())) cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add(New MySqlParameter("param1", MensagemItem.Nome)) cmd.Parameters.Add(New MySqlParameter("param2", MensagemItem.Email)) cmd.Parameters.Add(New MySqlParameter("param3", MensagemItem.Mensagem)) cmd.Connection.Open() cmd.ExecuteNonQuery() cmd.Connection.Close() End Sub <DataObjectMethod(DataObjectMethodType.Update)> _ Public Shared Function UpdateMensagem(ByVal MensagemItem As MensagemItem) As Integer Dim cmd As New MySqlCommand("sp_AtualizarMensagem", New MySqlConnection(GetConnectionString())) cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add(New MySqlParameter("paramkey", MensagemItem.Codigo)) cmd.Parameters.Add(New MySqlParameter("param1", MensagemItem.Nome)) cmd.Parameters.Add(New MySqlParameter("param2", MensagemItem.Email)) cmd.Parameters.Add(New MySqlParameter("param3", MensagemItem.Mensagem)) cmd.Connection.Open() Dim i As Integer = cmd.ExecuteNonQuery() cmd.Connection.Close() Return i End Function <DataObjectMethod(DataObjectMethodType.Delete)> _ Public Shared Function DeleteMensagem(ByVal MensagemItem As MensagemItem) As Integer Dim cmd As New MySqlCommand("sp_DeletarMensagem", New MySqlConnection(GetConnectionString())) cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add(New MySqlParameter("param1", MensagemItem.Codigo)) cmd.Connection.Open() Dim i As Integer = cmd.ExecuteNonQuery() cmd.Connection.Close() Return i End Function End Class Para saber mais sobre as operaes comuns com banco de dados acompanhe os meus artigos : Operaes bsicas com ASP.NET VB.NET - Operaes com dados que retornam registros. VB.NET - Operaes com dados que no retornam registros. Definimos 4 mtodos na nossa classe acessoBD: GetMensagens - usa a stored procedure sp_ListaMensagens para exibir todas as mensagens usando um DataReader e retornando uma lista de mensagens; AddMensagem - usa a stored procedure sp_InserirMensagem para inserir uma nova mensagem; UpdateMensagem - usa a stored procedure sp_AtualizarMenagem para atualizar uma mensagem na base de dados retorna o nmero de linhas afetadas; DeleteMensagem - usa a stored procedure sp_DeletarMensagem para excluir uma mensagem da base de dados; Observe que definimos os mtodos usando o atributo DataObjectMethod() para identificar os mtodos de dados criados desta forma a nossa classe identificada com este atributo faz com que o nosso componente tambm aparea no wizard quando a opo "Show only data components" estiver marcada; no nosso exemplo estamos indicando a finalidade de cada um :

<DataObjectMethod(DataObjectMethodType.[Select])> <DataObjectMethod(DataObjectMethodType.Insert)>

<DataObjectMethod(DataObjectMethodType.Update)> <DataObjectMethod(DataObjectMethodType.Delete)>
A string de conexo esta sendo obtida a partir do arquivo web.config pelo mtodo : GetConnectionString() Vamos incluir a partir da ToolBox um controle GridView (ID= gdvMensagens) para realizar a edio e excluso de mensagens e um controle DetailsView ( ID= dtvMensagens) para realizar a incluso de mensagens na pgina Manutencao.aspx. Abaixo temos o leiaute j definido para estes dois controles na pgina Manutencao.aspx;

Selecione o GridView e em GridView Tasks marque as opes Enable Editing e Enable Deleting ;

Vamos criar uma fonte de dados para o controle GridView . Selecione GridView Tasks e em Choose Data Source selecione <New Data Source>; Na janela do assistente selecione o item Object e informe o nome objDSMenasgens e clique em OK;

Na janela Choose a Business Object selecione o nosso objeto de negcio, a classe acessoBD;

Agora vamos definir os mtodos para selecionar, atualizar , inserir e deletar dados. Em cada uma das abas clique na combo Choose a method e selecione o mtodo que criamos na classe acessoBD. (Aqui que funciona a identificao usando a classe DataObjectMethod feita anteriormente.)

Aps definio de cada um dos mtodos clique em Finish. Voltando para o nosso GridView podemos visualizar os campos usados e em CommandField vamos definir a aparncia para o tipo Button em ButtonType e alterar o nome dos botes conforme a figura abaixo:

Selecione o DetailsView e em DetailsView Tasks marque as opes Enable Inserting ;

Agora ainda em DetailsView Task -> Choose a Data Source selecione o mesmo objectDataSource, objDSMensagens, que

criamos nos passos anteriores para o GridView pois vamos tratar com a mesma tabela. Ao final clique em Finish e configure o controle DetailsView para o modo de incluso definindo sua propriedade DefaultMode para Insert; Eu realizei pequenos ajustes transformando os campos Mensagem e Email para um TemplateField e em seguida em Edit Templates reconfigurando o controle TextBox conforme figura abaixo:

Executando o projeto podemos visualizar a pgina Manutencao.aspx onde temos as funcionalidades de editar e deletar implementadas no GridView e de incluir no DetailsView ;

E com isso estamos acessando um banco de dados no MySQL e realizando as tarefas de manuteno da tabela Mensagens : incluindo, alterando , excluindo e listando dados. Tudo isso em uma pgina ASP .NET usando o ObjectDataSource. (Poderamos efetuar o mesmo procedimento com qualquer banco de dados.) Pegue o projeto completo aqui : objDSMensagens.zip (sem o MySQL )

Eu sei apenas ASP .NET mas eu gosto...


Jos Carlos Macoratti

Você também pode gostar