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 :
  • Codigo
  • Mensagem
  • Nome
  • Email

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