 ASP
.NET - Usando ObjectDataSource com MySQL para manutenção de dados
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 :
 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 )
 
objDSMensagens.zip 
(sem o MySQL )
Eu sei é apenas ASP .NET mas eu gosto...

José Carlos Macoratti