criei este exemplo porque não consegui encontrar uma explicação simples para usar o MySQL 5 com ObjectDataSources no ASP.NET 2.0.
Introdução
criei este exemplo porque não consegui encontrar uma explicação simples para usar o MySQL 5 com ObjectDataSources no ASP.NET 2.0.
deixe-me dizer, estou realmente impressionado com o MySQL. Consegui instalá-lo facilmente em minha máquina com Windows XP e colocá-lo em execução em cerca de uma hora. Sou usuário de MS SQL há muito tempo e fiquei muito frustrado ao tentar usar Oracle e Firebird. Eu percebo que o problema é que estou estragado com o MS SQL Server, mas ei, estou ocupado e gosto de ferramentas fáceis de usar :)
se você está começando com MySQL e ASP.NET, recomendo estas etapas:
Vá para o site do MySQL, baixe e instale “Versão Atual (recomendado)”.
Baixe e instale: MySQL Administrator (para administrar seu servidor MySQL, o primeiro download instala apenas o servidor).
Baixe e instale: Connector/Net 1.0 (você precisa disso para que suas páginas ASP.NET se comuniquem com seu servidor MySQL).
Você também pode baixar: MySQL Query Browser – (um cliente gráfico para trabalhar com seus bancos de dados MySQL e executar consultas).
Leia e siga este guia: Um guia passo a passo para usar MySQL com ASP.NET.
Para instalar o código:
Você deve ter o MySQL 5 instalado e funcionando.
Instale o MySQL Connector/Net 1.0.
Crie um banco de dados MySQL 5 chamado Test.
Crie uma tabela nesse banco de dados chamada Mensagem:
CREATE TABLE test.message ( Entry_ID INT (10) UNSIGNED NOT NULL AUTO_INCREMENT, Nome VARCHAR (45), Email VARCHAR (45), Mensagem VARCHAR (200), PRIMARY KEY (Entry_ID) ) AUTO_INCREMENT = 32 CHARACTER SET latin1 COLLATE latin1_swedish_ci;
Crie estes quatro procedimentos armazenados do MySQL no banco de dados de teste:
PROCEDIMENTO `test`.`DeleteMessage`(IN param1 INT)BEGINDeletar de test.messageWHERE Entry_ID = param1;END
PROCEDIMENTO `test`.`InsertMessage`(IN param1 VARCHAR(50), IN param2 VARCHAR(50), IN param3 VARCHAR(200))BEGININSERT INTO mensagem(Nome, Email, Mensagem)VALUES(param1,param2,param3);END
PROCEDIMENTO `test`.`ShowAll`()BEGINSELECT mensagem.Entry_ID, mensagem.Nome, mensagem.Email, mensagem.MessageFROM test.message;END
PROCEDIMENTO `test`.`UpdateMessage`(IN paramkey INT, IN param1 VARCHAR(50), IN param2 VARCHAR(50), IN param3 VARCHAR(200))BEGINUPDATE messageSET Nome = param1, Email = param2, Mensagem = param3WHERE (message. Entry_ID = paramkey);END
Descompacte o "MySQL" e configure o IIS para apontar para ele. Certifique-se de configurar o servidor web para usar ASP.NET 2.0.
Abra "web.config" e altere a linha:
para conectar-se ao seu banco de dados MySQL.
Navegue até a página default.aspx por meio do IIS.
esta é a classe que usa Generics para fornecer os dados que são consumidos pelo controle ObjectDataSource:
using System;using System.Collections.Generic;using System.Data;using MySql.Data.MySqlClient;using System.Configuration;using System.ComponentModel ;[DataObject(true)]classe estática pública MessagesDB{ string estática privada GetConnectionString() { return ConfigurationManager.ConnectionStrings ["MySQLConnectionString"].ConnectionString; } [DataObjectMethod(DataObjectMethodType.Select)] public static List GetMessages() { MySqlCommand cmd = new MySqlCommand("ShowAll", new MySqlConnection(GetConnectionString())); cmd.CommandType = CommandType.StoredProcedure; cmd.Connection.Open(); MySqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); ListaMensagemItemlista = new Lista(); while (dr.Read()) { MessageItem MessageItem = new MessageItem(); MessageItem.Entry_ID = Convert.ToInt32(dr["Entry_ID"]); MessageItem.Message = Convert.ToString(dr["Mensagem"]); MessageItem.Name = Convert.ToString(dr["Nome"]); MessageItem.Email = Convert.ToString(dr["E-mail"]); MessageItemlist.Add(MessageItem); } dr.Fechar(); retornar lista de itens de mensagem; } [DataObjectMethod(DataObjectMethodType.Insert)] public static void InsertMessage(MessageItem MessageItem) { MySqlCommand cmd = new MySqlCommand("InsertMessage", new MySqlConnection(GetConnectionString())); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new MySqlParameter("param1", MessageItem.Name)); cmd.Parameters.Add(new MySqlParameter("param2", MessageItem.Email)); cmd.Parameters.Add(new MySqlParameter("param3", MessageItem.Message)); cmd.Connection.Open(); cmd.ExecuteNonQuery(); cmd.Connection.Close(); } [DataObjectMethod(DataObjectMethodType.Update)] public static int UpdateMessage(MessageItem MessageItem) { MySqlCommand cmd = new MySqlCommand("UpdateMessage", new MySqlConnection(GetConnectionString())); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new MySqlParameter("paramkey", MessageItem.Entry_ID)); cmd.Parameters.Add(new MySqlParameter("param1", MessageItem.Name)); cmd.Parameters.Add(new MySqlParameter("param2", MessageItem.Email)); cmd.Parameters.Add(new MySqlParameter("param3", MessageItem.Message)); cmd.Connection.Open(); int i = cmd.ExecuteNonQuery(); cmd.Connection.Close(); retornar eu; } [DataObjectMethod(DataObjectMethodType.Delete)] public static int DeleteMessage(MessageItem MessageItem) { MySqlCommand cmd = new MySqlCommand("DeleteMessage", new MySqlConnection(GetConnectionString())); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new MySqlParameter("param1", MessageItem.Entry_ID)); cmd.Connection.Open(); int i = cmd.ExecuteNonQuery(); cmd.Connection.Close(); retornar eu; }
a classe acima usa a classe "MessageItem" para passar os parâmetros de e para o controle ObjectDataSource:
using System;public class MessageItem{ int _Entry_ID; string _Mensagem; string _Nome; string _E-mail; public MessageItem() { } public int Entry_ID { get { return _Entry_ID; } definir { _Entry_ID = valor; } } public string Mensagem { get { return _Message; } set { _Mensagem = valor; } } string pública Nome { get { return _Nome; } definir { _Nome = valor; } } public string E-mail { get { return _Email; } set { _E-mail = valor; } }}
este é o arquivo .aspx que contém o controle ObjectDataSource, bem como um GridView para edição de dados e um DetailsView para inserção de um registro: