ASP .NET - Usando ObjectDataSource com MySQL para manutenção 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:
|
Primeiro baixe a versão 5 MySQL Community Server , que é gratuito no sítio: http://dev.mysql.com/downloads/
Em seguida baixe também o conector NET para a plataforma .NET em : http://dev.mysql.com/downloads/connector/net/5.2.html
A instalação padrão é muito simples, basta seguir as orientações do assistente. Recomendo alterar a senha do usuário root.
Agora baixe e instale o MySQL Administrator para administrar o servidor MySQL.
Vamos instalar também uma ferramenta gráfica para poder trabalhar com o MySQL para executar consultas e criar stored procedures: MySQL Query Browser
Obs: As duas últimas ferramentas são 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 compensação é tudo grátis...
Após terminar a instalação de todas as ferramentas indicadas você pode conferir no Windows , Menu Iniciar -> Todos Programas a relação dos programas instalados:
Criando o Banco de dados e as tabelas no MySQL
Agora execute o MySQL Administrator e abra o MySQL; se tudo foi realmente instalado corretamente você deverá obter o seguinte resultado:
Informando o usuário root e senha definida na etapa da instalação será aberta a janela abaixo: |
Como padrão o MySQL apresenta um banco de dados Test. Selecionando o banco de dados vemos que não existe nenhuma tabela criada.
Para criar um novo banco de dados clique sobre a área vazia que apresenta os schemas e selecione a opção 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 botão Create Table e definir a tabela Mensagens conforme abaixo:
Clicando no botão Apply Changes será exibida o comando SQL para criação da tabela. Clique em Execute para gerar a tabela Mensagens.
Agora vamos criar as stored procedures. Selecione a guia Stored Procedures e clique no botão 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 botão 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 necessária para podermos criar nossa aplicação 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 padrão).
Abra o arquivo web.config e defina a string de conexão conforme abaixo na seção <connectionStrings> :
Nota: Para
cifrar as informações sobre a string de conexão uma opção é
utilizar a ferramenta ASP NET IIS Registration Tool
(Aspnet_regiis.exe). Para isso basta identificar a seção que
deseja cifrar e especificá-la na a linha de comando chamando
este aplicativo. A linha de comando
para a seção <connectionStrings> seria: aspnet_regiis -pef
connectionStrings. |
A próxima etapa é criar uma classe onde iremos definir os métodos que irão retornar os dados através do objeto ObjectDataSource;
Vamos criar duas classes:
1 - A classe MensagemItem
que irá representar a nossa mensagem e será usada para passar
os parâmetros 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 opção Add New Item e em Templates Class e informe o nome MensagemItem.vb; a classe será criada na pasta App_Code.
Digite o código 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 Get Return _Mensagem End Get Set(ByVal value As String) _Mensagem = value End Set End Property Public Property Nome() As String Get 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 |
Na classe
MensagemItem criamos as propriedades :
representando cada um dos campos da tabela Mensagens.
|
Agora vamos criar outra classe chamada acessoBD que será responsável pelo acesso aos dados armazenados no MySQL.
No menu Web Site selecione a opção 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 operações comuns com banco de dados acompanhe os meus artigos :
Definimos 4 métodos na nossa classe acessoBD:
Observe que definimos os métodos usando o atributo DataObjectMethod() para identificar os métodos de dados criados desta forma a nossa classe identificada com este atributo faz com que o nosso componente também apareça no wizard quando a opção "Show only data components" estiver marcada; no nosso exemplo estamos indicando a finalidade de cada um :
A string de conexão esta sendo obtida a partir do arquivo web.config pelo método : GetConnectionString()
Vamos incluir a partir da ToolBox um controle GridView (ID= gdvMensagens) para realizar a edição e exclusão de mensagens e um controle DetailsView ( ID= dtvMensagens) para realizar a inclusão de mensagens na página Manutencao.aspx.
Abaixo temos o leiaute já definido para estes dois controles na página Manutencao.aspx;
Selecione o GridView e em GridView Tasks marque as opções 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 negócio, a classe acessoBD;
Agora vamos definir os métodos para selecionar, atualizar , inserir e deletar dados. Em cada uma das abas clique na combo Choose a method e selecione o método que criamos na classe acessoBD. (Aqui é que funciona a identificação usando a classe DataObjectMethod feita anteriormente.)
Após definição de cada um dos métodos clique em Finish.
Voltando para o nosso GridView podemos visualizar os campos usados e em CommandField vamos definir a aparência para o tipo Button em ButtonType e alterar o nome dos botões conforme a figura abaixo:
Selecione o DetailsView e em DetailsView Tasks marque as opções 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 inclusão 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 página 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 manutenção da tabela Mensagens : incluindo, alterando , excluindo e listando dados.
Tudo isso em uma página ASP .NET usando o ObjectDataSource. (Poderíamos 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