Você está na página 1de 55

FATEC Guaratinguet

XVII Semana de Tecnologia (19 de Nov de 2012 a 23 de Nov de 2012)

Minicurso Desenvolvimento de aplicao web usando C# e MySQL


(20 de Nov de 2012 a 22 de Nov de 2012)

Luiz Eduardo Guarino de Vasconcelos

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

Contedo
O minicurso .................................................................................................................. 3 Tema ............................................................................................................................ 5 Objetivos....................................................................................................................... 5 Requisitos ..................................................................................................................... 5 Assuntos Abordados ..................................................................................................... 5 O prottipo .................................................................................................................... 6 Diagrama de Caso de Uso ............................................................................................ 6 No sero contemplados .............................................................................................. 6 Modelo Entidade Relacionamento ................................................................................ 7 Detalhamento das Entidades ........................................................................................ 7 Criao do Banco de Dados ....................................................................................... 10 Criao do Prottipo Web ........................................................................................... 12 Criao da conexo com o Banco de Dados .............................................................. 14 Desenvolvimento da Aplicao - Listar e Cadastrar Categorias (Lista.aspx) ............... 16 Desenvolvimento da Aplicao - Listar Produtos (Lista.aspx) ..................................... 24 Desenvolvimento da Aplicao - Cadastrar Produtos (Cadastro.aspx) ....................... 25 Desenvolvimento da Aplicao - Cadastrar Categorias para o Produtos (Cadastro.aspx) .......................................................................................................... 29 Desenvolvimento da Aplicao - Listar Categorias do Produto (Lista.aspx) ................ 33 Desenvolvimento da Aplicao Menu (Menu.ascx) .................................................. 35 Desenvolvimento da Aplicao Visualizar Produtos (Principal.aspx) ....................... 36 Desenvolvimento da Aplicao Login (Login.aspx) .................................................. 39 Desenvolvimento da Aplicao Cadastro de Usurio (Cadastro.aspx) ..................... 41 Desenvolvimento da Aplicao Visualizar Produtos (Principal.aspx) ....................... 43 Desenvolvimento da Aplicao Carrinho de Produtos (Carrinho.aspx) .................... 44 Desenvolvimento da Aplicao Finalizar a Compra (Boleto.aspx)............................ 49 Desenvolvimento da Aplicao Sair (Principal.aspx)................................................ 54 Agradecimento............................................................................................................ 55 Contato ....................................................................................................................... 55

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

O minicurso
A plataforma .NET a plataforma desenvolvida pela Microsoft para o desenvolvimento de aplicaes, inclusive dos seus prprios produtos. Esta plataforma foi lanada em 2002 com a verso do .NET Framework 1.0, totalmente orientado a objetos. O objetivo da empresa era ganhar espao na comunidade de desenvolvimento de software. Naquela poca, o Visual Studio, que a ferramenta de desenvolvimento (IDE) oficial, era proprietrio o que dificultou a absoro da plataforma pela comunidade. Em 2003, foi lanada uma nova verso do Visual Studio e o .NET Framework 1.1. Somente em 2005 a Microsoft lanou verses gratuitas da sua IDE, a denominada verso Express Edition. Neste mesmo ano, foi lanado o .NET Framework 2.0 que base para os frameworks atuais (e.g. 3.0, 3.5, 4.0 e 4.5) e o SQL Server Express Edition (gratuito mas com restries no uso de hardware). Atualmente, a IDE encontra-se na verso 2012 e .NET Framework 4.5. Para este minicurso, ser adotado o Visual Studio 2008 Express Edition usando o modelo de desenvolvimento Web Forms. Atualmente existem mais de 25 linguagens suportadas pelo .NET Framework, j que todas fazem uso da Base Class Library (BCL) que um conjunto de interfaces, bibliotecas e funes. Ao usar a BCL como base, a linguagem passa a ser interopervel com as demais. Neste minicurso, ser utilizada a principal linguagem da plataforma .NET que o C#. O C# server-side, case sensitive e permite o desenvolvimento de todos os tipos de aplicaes citadas anteriormente. A plataforma .NET permite o desenvolvimento dos mais diversos tipos de aplicaes, tais como: Windows Forms, Web Forms, Mobile, Embedded, XBOX (XNA), Cloud Computing, entre outras. Neste minicurso, ser desenvolvido um prottipo web, j que como a prpria Microsoft afirma, a tendncia criar aplicaes que sejam disponveis anytime, anywhere. Alm disso, aplicaes web tem as vantagens de manutenabilidade, escalabilidade, facilidade de operao pelos usurios (i.e. no precisam instalar nada, alm do browser), entre outras. Para executar as aplicaes web necessrio um Servidor Web. Em ambiente de produo, deve ser usado o Internet Information Services (IIS), que o Servidor web da Microsoft. Para o desenvolvimento de aplicaes (local), pode ser utilizado um servidor web integrado ao Visual Studio (i.e. Whidbey). Em aplicaes web, geralmente, as pginas tero uma parte interpretada pelo browser (e.g. HTML, CSS, Javascript), denominada client-side e outra parte compilada/interpretada pelo compilador/interpretador da linguagem no servidor (e.g. C#), denominada server-side. As aplicaes web, em geral, necessitam persistir dados de forma permanente e para isso so usados, em geral, sistemas gerenciadores de banco de dados (SGBDs). Existem diversos SGBD disponveis no mercado. Para este minicurso, ser

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

utilizado o SGBD MySQL da Oracle que tem como caractersticas principais a portabilidade, ser gratuito (e pago), dar suporte a transao, ser leve e robusto. Para este cenrio, necessrio ter as seguintes ferramentas/tecnologias instaladas: Server-side .NET Framework IIS MySQL e drivers de conexo

Client-side Browser

Desenvolvedor .NET Framework Visual Studio (Whidbey) MySQL e drivers de conexo Browser

Espero que voc tenha um bom minicurso e que esse seja apenas o pontap inicial para sua carreira na rea de desenvolvimento.

Se eu soubesse o que estava fazendo, no seria chamada pesquisa Albert Einstein

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

Tema
Desenvolvimento de aplicao web usando C# e MySQL.

Objetivos
Conhecer a plataforma de desenvolvimento .NET usando a linguagem C#. Conhecer o SGBD MySQL. Desenvolver um prottipo em ambiente web (e-commerce).

Requisitos
Microsoft Windows XP ou superior .NET Framework 3.5 Visual Studio 2008 (Professional ou Express Edition) ou superior
Disponvel em http://www.microsoft.com/visualstudio/ptb/downloads#d-2010-express

MySQL Server 5.0 ou superior


Disponvel em http://dev.mysql.com/tech-resources/articles/mysql-installer-forwindows.html

MySQL Query Browser


Disponvel em http://downloads.mysql.com/archives.php

MySQL Administrator
Disponvel em http://downloads.mysql.com/archives.php

DLL de comunicao do .NET com o MySQL


Disponvel em http://www.4learn.pro.br/guarino/tabd/MySql.Data.dll

DLL para gerao de boleto


Disponvel em http://www.devmedia.com.br/gerando-boletos-em-seu-site-asp-netc/17820

Conector .NET MySQL (verso utilizada 6.6.4)


Disponvel em http://www.4learn.pro.br/guarino/tabd/mysql-connector-net-6.6.4.msi

Assuntos Abordados
Banco de Dados (Conceitos, SQL, DML, DDL, MER) Stored Procedures e Cursor Orientao a Objetos (Conceitos) UML (Diagrama de Caso de Uso) Conceitos de Internet, WWW e Arquitetura de Aplicaes para Web. Linguagens (HTML, CSS e C#) Session Componentes (Label, TextBox, Button, LinkButton, Image, Hyperlink, DropDownList, CheckBoxList, GridView, Repeater, SqlDataSource, FileUpload, Panel) Web Form e Web User Control

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

O prottipo
Desenvolvimento de um e-commerce com gerenciamento de produtos, categorias e usurios, permitindo a elaborao de um Carrinho de Compras e pagamento via boleto.

Diagrama de Caso de Uso


Na Figura 1 pode ser visualizado o Diagrama de Caso de Uso para o desenvolvimento das funcionalidades do minicurso.

Figura 1 Diagrama de Caso de Uso do MiniCurso

No sero contemplados
Implementaes sobre Segurana de Sites o Controle de Autorizao nas Pginas o Criptografia o Ataques web o Auditoria (log) Desenvolvimento em Classes (Classes de Definio e de Manipulao) Alteraes e Excluses em Geral Controle da Quantidade de Itens dos Produtos Filtro dos Produtos por Categorias Detalhamento dos Componentes do Visual Studio Princpios de Usabilidade Redimensionamento das Imagens (Thumbnails) Compra sem usurio estar logado Funcionalidade de Esqueci Senha Tratamento de excees

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

Modelo Entidade Relacionamento


Na Figura 2, pode ser visualizada a estrutura do banco de dados utilizado no minicurso.

Minicu Figura 2 Modelo Entidade Relacionamento utilizado no Minicurso

Detalhamento das Entidades


TB_CARRINHO Armazena o Carrinho de Compras do Usurio logado.

e TB_CATEGORIA Armazena as categorias do e-commerce

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

TB_PRODUTO Armazena as informaes dos produtos do e-commerce e commerce

TB_CATEGORIAPRODUTO Define as categorias dos produtos

TB_PESSOA Armazena as informaes dos usurios do e-commerce e commerce

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

TB_COMPRA Armazena as informaes relacionadas as compras dos usurios.

TB_COMPRAITEM Armazena as informaes dos produtos comprados pelos usurios. . Essas informaes so originadas do Carrinho de Compras.

TB_ESTADO Armazena os estados brasileiros.

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

Criao do Banco de Dados


1) Abra o MySQL Query Browser a. Server Host: localhost b. UserName: root c. Password: senha do banco de dados d. Port: 3306 (verifique (verif a porta que o MySQL foi instalado)

2) Como o Default Schema no foi preenchido no item 1, nenhum banco de dados foi selecionado. Clique em Ignore.

3) Criar um novo banco de dados. Clique com o boto direito na rea indicada. Selecione a opo Create New Schema. a. Nome do schema: minicurso

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

4) Aps criar o banco de dados, podem ser criadas as tabelas conforme o item Detalhamento das Entidades, citado anteriormente. Para criar cada tabela, clique com o boto direito sobre o schema minicurso e selecione a opo Create New Table.

5) Repita o procedimento do item 4 para todas as Entidades (Tabelas) do banco de dados. 6) Importe o banco de dados com as tabelas usando o arquivo minicursoTabelas.sql usando o MySQL Administrator.

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

Criao do Prottipo Web


1) Abra o Visual Studio 2) Selecione a opo File > New Web Site

3) Defina as informaes do prottipo a. Selecione a aplicao do tipo ASP.NET Web Site b. Selecione o .NET Framework 3.5 c. Defina a Linguagem da aplicao Language C# d. Defina o nome da aplicao MiniCurso

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

4) Na Solution Explorer, xplorer, exclua a pgina Default.aspx a. O arquivo web.config possui muitas opes de configurao da aplicao (e.g. string de conexo do banco de dados, session timeout, formas de autenticao, pginas de erros, globalization).

5) Crie a seguinte estrutura de pastas e inclua os arquivos: a. Mapped.cs na pasta App_Code b. Boleto.Net.dll na pasta Bin c. MySql.Data.dll na pasta Bin d. Para incluir os arquivos na pasta, clique na pasta desejada e depois na opo em Add Existing Item.

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

Criao da conexo com o Banco de Dados D


1) Na Server Explorer, clique em Add Connection

2) Selecione o Data Source MySQL DataBase e clique em Continue

3) Preencha as informaes de conexo ao banco de dados a. Server name: localhost b. User name: root c. Password: senha do banco de dados d. Marque a opo Save my Password e. Selecione o database minicurso f. Clique em Test Connection e verifique se a conexo foi bem sucedida.

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

4) Aps isso, possvel ter acesso a diversas funcionalidades (e.g. Tables, Stored Procedures) do banco de dados MySQL integrado ao Visual Visua Studio.

Esta ser a conexo utilizada no desenvolvimento da aplicao.

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

Desenvolvimento da Aplicao - Listar e Cadastrar Categorias (Lista.aspx)


1) Criar uma nova pgina (Web Form). Na Solution Explorer, na pasta Paginas > Categoria, clique com o boto bo direito e selecione Add New Item.

2) Selecione Web Form. Defina o nome da pgina como Lista.aspx. Deixe marcada a opo Place Code in separate file.

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

3) Defina esta pgina como a primeira a ser executada (Set As Start Page).

4) Execute a aplicao (pressione a tecla F5). Uma mensagem ser aberta informando se deseja habilitar a opo de Debug. Marque a primeira opo e clique em OK.

5) Feche o browser e verifique se a aplicao est parada. Somente com a aplicao parada que deve ser feita qualquer modificao modificao no cdigo da aplicao.

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

6) Com a aplicao parada. Vamos comear o Codigo. Selecione o MODO DESIGN (no canto inferior esquerdo da figura).

7) Na Toolbox, selecione a opo SqlDataSource e arraste para a tela.

8) Siga os passos: a. Clique na opo Configure Data Source b. Selecione a conexo c. Clique em NEXT d. Clique em NEXT e. Marque a primeira opo (Specify a custom SQL statement...) f. Na aba SELECT coloque:

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

i. SELECT TB_CATEGORIACODIGO, TB_CATEGORIADESCRICAO, TB_CATEGORIAPAI FROM TB_CATEGORIA ORDER BY TB_CATEGORIADESCRICAO RIADESCRICAO g. Na aba DELETE, coloque: i. DELETE FROM TB_CATEGORIA WHERE TB_CATEGORIACODIGO=?TB_CATEGORIACODIGO h. Clique em NEXT i. Clique em Test Query j. Clique em FINISH 9) Na Toolbox, arraste um GridView para a tela e siga os passos: a. Choose Data Source b. Selecione o SqlDataSource1 Sq c. Marque a opo Enable Deleting d. Marque a opo Enable Selection 10) Na Toolbox, arraste outro SqlDataSource e siga os passos: a. Clique na opo Configure Data Source b. Selecione a conexo c. Clique em NEXT d. Marque a segunda opo (Specify columns from a table table or view) e. Selecione a tabela TB_CATEGORIA f. Marque a coluna (*) g. Clique no boto Advanced... h. Marque a opo Generate INSERT, UPDATE and DELETE i. Clique em OK j. Clique em NEXT k. Clique em FINISH 11) No Modo Source, aperte CTRL+H para fazer duas substituies. a. Primeira a substituio i. Find what [ ii. Replace With (em branco) iii. Clique em Replace All

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

b. Segunda substituio i. Find what ] ii. Replace With (em branco) iii. Clique em Replace All c. Isto necessrio porque o Visual Studio gera os campos da SQL com [] que o padro padro para o SQL Server, porm, para MySQL no funciona. 12) Alm disso, ainda em Modo Source, adicione o bloco em destaque na figura dentro do SqlDataSource2

13) No Modo Design, na toolbox, arraste um FormView para a tela e siga os passos: a. Choose Data Source b. Selecione ione SqlDataSource2 c. Clique em Refresh Schema

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

14) Adicione o evento para vincular o GridView ao FormView. Para adicionar um evento, selecione o componente desejado, v nas Propriedades e depois em Eventos.

protected void GridView1_SelectedIndexChanged()


SqlDataSource2.SelectParameters["TB_CATEGORIACODIGO"].DefaultValue = GridView1.SelectedValue.ToString(); //na mesma linha FormView1.ChangeMode(FormViewMode.Edit); FormView1.Visible = true;

15) Adicione os eventos para atualizar o GridView aps uma interao no FormView protected void FormView1_ItemInserted() { GridView1.DataBind(); FormView1.Visible = false; } protected void FormView1_ItemDeleted() { GridView1.DataBind(); FormView1.Visible = false; } protected void FormView1_ItemUpdated() { GridView1.DataBind(); FormView1.Visible = false; }

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

16) Adicione um LinkButton a. Text = Cadastrar b. ID = lbCadastrar c. Evento Click

protected void lbCadastrar_Click() { FormView1.ChangeMode(FormViewMode.Insert); FormView1.Visible = true; }


17) EXECUTAR A APLICAO a. possvel Cadastrar Vrias Categorias b. preciso preencher a Descrio e o Cdigo da Categoria Pai ("0") c. possvel Editar apenas a primeira Categoria d. As demais categorias no podero ser editadas, pois ainda necessria uma alterao no SqlDataSource2 18) Pare a aplicao. Selecione o SqlDataSource2. a. Configure Data Source b. Clique em NEXT c. Clique em NEXT d. Na Aba SELECT altere para i. SELECT * FROM tb_categoria WHERE TB_CATEGORIACODIGO=? e. Clique em NEXT f. Clique em FINISH 19) EXECUTAR A APLICAO a. Agora possvel Gerenciar todas as Categorias b. Se der erro "Parameter index is out of range" porque est faltando um Parameter no SqlDataSource2 c. Adicione novamente (semelhante ao passo 12) <SelectParameters> <asp:Parameter Name="TB_CATEGORIACODIGO" Type="Int32"/> </SelectParameters> 20) Formatando o GridView. Pare a aplicao. a. Selecione o GridView b. Selecione Auto Format. c. Selecione um estilo (e.g. Professional) d. Edit Columns i. Remova a coluna do Cdigo ii. Altere o HeaderText das colunas iii. Altere o texto dos botes (CommandField) 21) EXECUTAR A APLICAO

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

22) Formatando o FormView a. Selecione o Form View b. Selecione Auto Format (e.g. Professional) c. Edit Templates i. Selecione InsertItemTemplate ii. Remova a TB_CATEGORIACODIGO iii. Altere os demais textos iv. End Templates 23) EXECUTAR A APLICAO 24) Paginao e Ordenao no GridView a. Selecione o GridView b. Marque a opo Enable Paging c. Altere a propriedade PageSize d. Marque a opo Enable Sorting 25) EXECUTAR A APLICAO 26) Colocando mensagem de confirmao antes de excluir a. Selecione o GridView b. Adicione o evento RowDataBound
if (e.Row.RowType == DataControlRowType.DataRow) { // varre linhas foreach (DataControlFieldCell cell in e.Row.Cells) { // verifica controles da linha foreach (Control control in cell.Controls) { if (control.ToString() == "System.Web.UI.WebControls.DataControlLinkButton") { LinkButton button = control as LinkButton; string texto = button.Text; if (texto == "Excluir") // adiciona mensagem button.Attributes.Add("onclick", "return confirm ('Deseja excluir?')"); } } } }

27) EXECUTAR A APLICAO

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

Desenvolvimento da Aplicao - Listar Produtos (Lista.aspx)


1) Criar uma nova pgina (Web Form) na pasta Paginas > Produto, denominada Lista.aspx 2) Definir esta pgina como Set As Start Page. 3) No Modo Design, arrastar um GridView e seguir os passos: a. Choose Data Source b. New Data Source c. Selecionar Database d. Clique em OK e. Selecionar a conexo f. Clique em NEXT g. Marque a primeira opo (Specify a custom SQL...) h. Na aba SELECT i. SELECT * FROM TB_PRODUTO ORDER BY TB_PRODUTOTITULO; i. Clique em NEXT j. Clique em Test Query k. Clique em FINISH 4) Formate o GridView usando Auto Format 5) Adicione um LinkButton na tela a. Text = Cadastrar b. ID = lbCadastrar c. Evento Click i. Response.Redirect(Cadastro.aspx); 6) EXECUTAR A APLICAO

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

Desenvolvimento da Aplicao - Cadastrar Produtos (Cadastro.aspx)


1) Criar uma nova pgina (Web Form) na pasta Paginas > Produto, denominada Cadastro.aspx 2) No modo Design, insira uma Tabela com 7 Rows e 2 Columns 3) Crie a seguinte tela a. 6 Labels b. 3 TextBox c. 1 FileUpload d. 1 Button

4) Na pasta Paginas > Produto > Foto sero armazenadas as fotos selecionadas no componente fileFoto. 5) Crie uma StoredProcedure (SP) para inserir o produto a. Na Server Explorer, boto direito em Stored Procedures, Create Stored Procedure

b. Cdigo da SP. A SP recebe as informaes do Produto nos parmetros (IN) e retorna o cdigo do Produto inserido no parmetro (OUT).
CREATE PROCEDURE sp_InsereProduto(IN titulo Varchar(100), IN descricao TEXT, IN preco Decimal(10,2), IN foto Varchar(255), OUT codigo INT) BEGIN INSERT INTO TB_PRODUTO (TB_PRODUTOTITULO, TB_PRODUTODESCRICAO, TB_PRODUTOPRECO, TB_PRODUTOFOTO) VALUES (titulo, descricao, preco, foto); SELECT LAST_INSERT_ID() INTO codigo; END

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

6) Abra o arquivo appsettings.txt e copie as variveis URLSite e PathSite para o web.config dentro das tags AppSettings
<appSettings> <add key="URLSite" value="http://localhost:1986/MiniCursoo/"/> <add key="PathSite" value="C:\Documents\Visual Studio 2008\WebSites\MiniCursoo\"/> </appSettings>

7) Na pgina, d dois cliques para acessar o cdigo (Cadastro.aspx.cs) e insira dois namespaces no topo do cdigo.

using System.IO; using MiniCurso;


8) Crie o mtodo para Verificar as extenses permitidas no upload da foto.
//Mtodo que verifica uma extenso private bool VerificarExtensaoPermitida(string extensaoArquivo) { //Array com as extenses permitidas string[] extensoesPermitidas = { ".gif", ".png", ".jpeg", ".jpg" }; //Linq que verifica a extenso do arquivo com as permitidas return extensoesPermitidas.Where(extensaoArquivo.EndsWith).FirstOrDefault() != null; }

9) Crie o mtodo que far o Upload da Foto.


private string Upload() { string retorno = string.Empty; if (fileFoto.FileName != "") { //Verifica o tamanho do arquivo em bytes. Nesse caso fao Upload de at 500KB if (fileFoto.PostedFile.ContentLength < 512000) { if (VerificarExtensaoPermitida(fileFoto.FileName.ToLower())) { //Caminho do diretrio onde vamos salvar os Uploads String caminho = ConfigurationManager.AppSettings["PathSite"] + "Paginas\\Produto\\Foto\\"; string nomeFile = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString() + Path.GetExtension(fileFoto.PostedFile.FileName); fileFoto.PostedFile.SaveAs(caminho + nomeFile); lblMensagem.Text = "Upload realizado com sucesso!"; retorno = caminho+nomeFile; } else { lblMensagem.Text = "Extenso de arquivo no permitida. O arquivo deve ser uma imagem (png, jpg, gif ou jpeg)!"; }

} else { lblMensagem.Text = "No existe arquivo selecionado para Upload."; } } return retorno;

} else { lblMensagem.Text = "A foto deve ter no mximo 500 KB."; }

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

10) Crie o mtodo que far o Cadastro do Produto.


private void Cadastrar() { //FAZ UPLOAD DA FOTO string foto = Upload(); if (foto != string.Empty) { System.Data.IDbConnection conexao; System.Data.IDbCommand comando; //ABRE A CONEXAO COM O BD conexao = Mapped.Connection(Mapped.conexao.ServerExplorer); //COMANDO A SER EXECUTADO string storedprocedure = "sp_InsereProduto"; comando = Mapped.Command(storedprocedure, conexao); comando.CommandType = CommandType.StoredProcedure; //PARAMETROS DE ENTRADA (IN) comando.Parameters.Add(Mapped.Parameter ("titulo", txtTitulo.Text, DbType.String, ParameterDirection.Input)); comando.Parameters.Add(Mapped.Parameter ("descricao", txtDescricao.Text, DbType.String, ParameterDirection.Input)); comando.Parameters.Add(Mapped.Parameter ("preco", txtPreco.Text, DbType.Decimal, ParameterDirection.Input)); comando.Parameters.Add(Mapped.Parameter ("foto", foto, DbType.String, ParameterDirection.Input)); //PARMETRO DE SADA (OUT) comando.Parameters.Add(Mapped.Parameter ("codigo", "", DbType.Int32, ParameterDirection.Output)); //COMANDO EXECUTADO comando.ExecuteNonQuery(); int codigo = 0; //varre todos os parametros do comando na busca do OUT foreach (var item in comando.Parameters) { IDbDataParameter p = (IDbDataParameter)item; if (p.Direction == ParameterDirection.Output) if (p.ParameterName == "codigo") codigo = Convert.ToInt32(p.Value); } //FECHA CONEXAO conexao.Close(); //MOSTRA O PARAMETRO OUT Response.Write("codigo" + codigo.ToString());

11) Dois clique no boto Salvar para acessar o evento btnSalvar_CLICK. Insira a chamada no mtodo Cadastrar(). Cadastrar(); 12) EXECUTAR A APLICAO a. Cadastre um Produto b. Acesse a Pgina Lista.aspx

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

13) Exibindo a foto na Lista. Pare a aplicao. Acesse a Lista.aspx novamente. 14) Crie o mtodo que transforma o caminho fsico no caminho relativo da imagem.
private string PathAbsolute2PathRelative(string nomeImagem) { string caminhoHTTP = ConfigurationManager.AppSettings["URLSite"] + "Paginas/Produto/Foto/"; int final = nomeImagem.LastIndexOf("\\"); string novonomeImagem = caminhoHTTP + nomeImagem.Substring(final + 1); return novonomeImagem; }

15) Importe o namespace para manipulao de arquivos


using System.IO;

16) Acesse o evento GridView_RowDataBound. Esse evento permitir manipular as colunas do GridView em tempo de execuo.
if (e.Row.RowType == DataControlRowType.DataRow) { string foto = (Convert.ToString(DataBinder.Eval(e.Row.DataItem, "TB_PRODUTOFOTO"))); if (foto!=string.Empty) { if (File.Exists(foto)) { string img = PathAbsolute2PathRelative(foto); e.Row.Cells[4].Text = "<img src='" + img + "' width='80px'>"; } } }

17) EXECUTAR A APLICAO a. Na lista j aparece a foto do produto. 18) Formatando o GridView a. Remova a coluna de Cdigo (dever alterar o nmero da coluna (e.Row.Cells[XXX].Text) no cdigo do evento GridView1_RowDataBound b. Altere o HeaderText das colunas c. Formate a coluna do preo (DataFormatString = {0:c}) d. Enable Sorting 19) EXECUTAR A APLICAO

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

Desenvolvimento da Aplicao - Cadastrar Categorias para o Produtos (Cadastro.aspx)


1) Criar uma nova pgina (Web Form) na pasta Paginas > CategoriaProduto, denominada Cadastro.aspx 2) Defina esta pgina como Set As Start Page. 3) No modo Design, crie a seguinte tela a. 3 Labels b. 1 DropDownList c. 1 CheckBoxList d. 1 Button

4) Crie a Stored Procedure (SP) para Inserir uma Categoria ao Produto (sp_InsereProdutoCategoria)
CREATE PROCEDURE sp_InsereProdutoCategoria (IN categoria INT, IN produto INT) BEGIN INSERT INTO TB_CATEGORIAPRODUTO (TB_CATEGORIACODIGO, TB_PRODUTOCODIGO) VALUES (categoria, produto); END

5) Crie a Stored Procedure (SP) para Deletar Categoria do Produto (sp_DeleteProdutoCategoria)


CREATE PROCEDURE sp_DeleteProdutoCategoria(IN produto INT) BEGIN DELETE FROM TB_CATEGORIAPRODUTO WHERE TB_PRODUTOCODIGO=produto; END

6) Importe o namespace MiniCurso

using MiniCurso;
7) Carregar DropDownList com a lista de produtos. Arraste um SqlDataSource, selecione a opo para especificar a SQL e configure na aba SELECT. a. SELECT TB_PRODUTOCODIGO, TB_PRODUTOTITULO FROM TB_PRODUTO ORDER BY TB_PRODUTOTITULO; 8) Associe o DropDownList ao SqlDataSource1. a. Selecione o ddlProduto b. Choose Data Source c. Configure conforme a imagem a seguir

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

9) Carregar o CheckBoxList com a lista de Categorias. Arraste mais um SqlDataSource, selecione a opo para especificar a SQL e configure na aba SELECT. a. SELECT TB_CATEGORIACODIGO, TB_CATEGORIADESCRICAO FROM TB_CATEGORIA ORDER BY TB_CATEGORIADESCRICAO; 10) Associe o cblCategorias ao SqlDataSource2. a. Selecione o cblCategorias b. Choose Data Source c. Configure conforme a imagem a seguir

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

11) EXECUTAR A APLICAO a. Lista de Produtos carregada b. Lista de Categorias carregada 12) Colocando mais um item no ddlProduto. No evento ddlProduto_DataBound, insira a linha de cdigo.

ddlProduto.Items.Insert(0, "Selecione");
13) EXECUTE A APLICAO 14) Crie o mtodo para Cadastrar a Categoria ao Produto
private void Cadastrar(int categoria, int produto) { System.Data.IDbConnection conexao; System.Data.IDbCommand comando; //ABRE A CONEXAO conexao = Mapped.Connection(Mapped.conexao.ServerExplorer); //COMANDO A SER EXECUTADO string storedprocedure = "sp_InsereProdutoCategoria"; comando = Mapped.Command(storedprocedure, conexao); comando.CommandType = CommandType.StoredProcedure; //PARMETROS DE ENTRADA comando.Parameters.Add(Mapped.Parameter ("categoria", categoria, DbType.Int32, ParameterDirection.Input)); comando.Parameters.Add(Mapped.Parameter ("produto", produto, DbType.Int32, ParameterDirection.Input)); //EXECUTA O COMANDO comando.ExecuteNonQuery(); //FECHA A CONEXAO conexao.Close();

15) Crie o mtodo para Deletar a Categoria do Produto


private void Deletar(int produto) { System.Data.IDbConnection conexao; System.Data.IDbCommand comando; conexao = Mapped.Connection(Mapped.conexao.ServerExplorer); string storedprocedure = "sp_DeleteProdutoCategoria"; comando = Mapped.Command(storedprocedure, conexao); comando.CommandType = CommandType.StoredProcedure; comando.Parameters.Add(Mapped.Parameter ("produto", produto, DbType.Int32, ParameterDirection.Input)); comando.ExecuteNonQuery(); conexao.Close(); }

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

16) Dois cliques no boto SALVAR (evento CLICK)


//CODIGO DO PRODUTO int produto = Convert.ToInt32(ddlProduto.SelectedItem.Value); //DELETA TODAS AS CATEGORIAS DO PRODUTO Deletar(produto); //VARRE TODOS OS ITENS DO CBLCATEGORIAS for (int i = 0; i < cblCategorias.Items.Count; i++) { //VERIFICA QUAL ITEM EST SELECIONADO if (cblCategorias.Items[i].Selected) { //CODIGO DA CATEGORIA int categoria = Convert.ToInt32(cblCategorias.Items[i].Value); //CADASTRA CATEGORIA AO PRODUTO Cadastrar(categoria, produto);

} } //lblMensagem.Text = "Cadastro realizado com sucesso"; Response.Redirect("Lista.aspx");

17) EXECUTAR A APLICAO

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

Desenvolvimento da Aplicao - Listar Categorias do Produto (Lista.aspx)


1) Criar uma nova pgina (Web Form) na pasta Paginas > CategoriaProduto, denominada Lista.aspx 2) Defina esta pgina como Set As Start Page. 3) No modo Design, crie a seguinte tela: a. 1 Hyperlink i. Text = Cadastrar ii. NavigateUrl = Cadastro.aspx b. 2 Labels c. 1 DropDownList d. 1 GridView

4) Carregar DropDownList com a lista de produtos. Arraste um SqlDataSource, selecione a opo para especificar a SQL e configure na aba SELECT. a. SELECT TB_PRODUTOCODIGO, TB_PRODUTOTITULO FROM TB_PRODUTO ORDER BY TB_PRODUTOTITULO; 5) Associe o DropDownList ao SqlDataSource1. a. Selecione o ddlProduto b. Choose Data Source e configure da seguinte forma a. Data Source = SqlDataSource1 b. Data Field to display = TB_PRODUTOTITULO c. Data Field for the value = TB_PRODUTOCODIGO c. Enable AutoPostBack

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

6) Carregar GridView com a lista de categorias, porm, do produto selecionado. Ser necessrio fazer um INNER JOIN entre as tabelas TB_CATEGORIAPRODUTO E TB_CATEGORIA. Arraste um SqlDataSource, selecione a opo para especificar a SQL e configure na aba SELECT. a. SELECT tb_categoria.TB_CATEGORIACODIGO, tb_categoria.TB_CATEGORIADESCRICAO, tb_categoria.TB_CATEGORIAPAI, tb_categoriaproduto.TB_PRODUTOCODIGO FROM tb_categoria INNER JOIN tb_categoriaproduto ON tb_categoria.TB_CATEGORIACODIGO = tb_categoriaproduto.TB_CATEGORIACODIGO WHERE (tb_categoriaproduto.TB_PRODUTOCODIGO = ?produto); 7) No Modo Source, defina um parmetro para o SqlDataSource2, conforme a figura e o cdigo a seguir.

<SelectParameters> <asp:ControlParameter ControlID="ddlProduto" PropertyName="SelectedValue" Name="produto" Type="Int32" /> </SelectParameters>

8) Associe o GridView1 ao SqlDataSource2. a. Selecione o GridView b. Choose Data Source e selecione SqlDataSource2 9) EXECUTAR A APLICAO

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

Desenvolvimento da Aplicao Menu (Menu.ascx)


1) Criar um novo componente (Web User Control) na pasta Complemento > Controles, denominado Menu.ascx 2) No modo Design, insira uma tabela com 2 Rows e 3 Columns. 3) Insira 6 Hyperlinks e configure-os para chamar as pginas: a. Paginas > Categoria > Lista.aspx (Cadastro de Categoria) b. Paginas > Categoria > Lista.aspx (Lista de Categoria) c. Paginas > Produto > Cadastro.aspx (Cadastro de Produto) d. Paginas > Produto > Lista.aspx (Lista de Produto) e. Paginas > CategoriaProduto > Cadastro.aspx (Cadastro de Categorias ao Produto) f. Paginas > CategoriaProduto > Lista.aspx (Lista de Categorias do Produto)

4) Arraste o WebUserControl Menu.ascx nessas pginas. a. Abra a pgina desejada. b. Na Solution Explorer, selecione o Menu.ascx c. Arraste na posio desejada na pgina aberta d. Repita o procedimento para as 5 pginas. 5) EXECUTAR A APLICAO

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

Desenvolvimento da Aplicao Visualizar Produtos (Principal.aspx)


1) Criar uma nova pgina (Web Form) na pasta Paginas, denominada Principal.aspx 2) Defina esta pgina como Set As Start Page. 3) Visualizao dos Produtos dentro de um Repeater. No modo Source, dentro da tag <FORM> coloque o cdigo a seguir.

<div style="width:100%"> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Paginas/Carrinho.aspx">Meu Carrinho</asp:HyperLink> <br/> <asp:Repeater ID="Repeater1" runat="server"> <HeaderTemplate> </HeaderTemplate> <ItemTemplate> <div id="blocoBase" runat="server" style="float:left; padding:5px 5px 5px 5px; color:#3D3D3D; width:23%;"> <div style="border:1pt gray solid; background-color:#f2f2f2; text-align:center; padding: 5px 5px 5px 5px; "> <div> <asp:Image ID="foto" runat="server" Width="80" /> </div> <div> <b><%# DataBinder.Eval(Container.DataItem, "TB_PRODUTOTITULO") %></b> </div> <div> <%# DataBinder.Eval(Container.DataItem, "TB_PRODUTODESCRICAO") %> </div> <div> R$ <%# DataBinder.Eval(Container.DataItem, "TB_PRODUTOPRECO") %> </div> <a id="detalhes" href="<%# "Carrinho.aspx?ID=" + DataBinder.Eval(Container.DataItem, "TB_PRODUTOCODIGO") %>" style="font-family:Verdana; font-size:medium; font-weight:700"> Comprar</a> </div> </div> </ItemTemplate> <FooterTemplate> </FooterTemplate> </asp:Repeater> </div>

4) Crie a StoredProcedure sp_VisualizaProdutos para Listar Todos os Produtos cadastrados.


CREATE PROCEDURE sp_VisualizaProdutos() BEGIN SELECT * FROM TB_PRODUTO ORDER BY TB_PRODUTOTITULO; END

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

5) Importe o namespace MiniCurso.

using MiniCurso;
6) Crie o mtodo para Visualizar os Produtos
private void GetProdutos() { System.Data.IDbConnection conexao; System.Data.IDbCommand comando; System.Data.IDataAdapter adapter; DataSet ds = new DataSet(); //ABRE A CONEXAO conexao = Mapped.Connection(Mapped.conexao.ServerExplorer); //COMANDO A SER EXECUTADO string storedprocedure = "sp_VisualizaProdutos"; comando = Mapped.Command(storedprocedure, conexao); comando.CommandType = CommandType.StoredProcedure; adapter = Mapped.Adapter(comando); //PREENCHE O DATASET COM AS INFORMACOES DO BD adapter.Fill(ds); //ASSOCIA REPEATER AO DATASET Repeater1.DataSource = ds.Tables[0].DefaultView; Repeater1.DataBind(); //FECHA A CONEXAO conexao.Close(); }

7) Dentro do Page_Load, chame o mtodo GetProdutos()

if (!Page.IsPostBack) { GetProdutos(); }
8) EXECUTAR A APLICAO 9) Visualizar as fotos corretamente. Crie o mtodo para Transformar o caminho fsico da foto no caminho relativo.
private string PathAbsolute2PathRelative(string nomeImagem) { string caminhoHTTP = ConfigurationManager.AppSettings["URLSite"] + "Paginas/Produto/Foto/"; int final = nomeImagem.LastIndexOf("\\"); string novonomeImagem = caminhoHTTP + nomeImagem.Substring(final + 1); return novonomeImagem; }

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

10) Importe o namespace para manipulao de arquivos

using System.IO;
11) Os arquivos devem ser manipulados dentro do evento Repeater1_ItemDataBound
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { Image img = e.Item.FindControl("foto") as Image; DataRowView drv = e.Item.DataItem as DataRowView; string foto = drv.Row["TB_PRODUTOFOTO"].ToString(); if (foto != string.Empty) { if (File.Exists(foto)) { string caminho = PathAbsolute2PathRelative(foto); img.ImageUrl=caminho; } } }

12) EXECUTAR A APLICAO

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

Desenvolvimento da Aplicao Login (Login.aspx)


1) Criar uma nova pgina (Web Form) na pasta Paginas, denominada Login.aspx 2) Defina esta pgina como Set As Start Page. 3) No Modo Design, crie a tela conforme a imagem a seguir. a. Table com 5 Rows e 2 Columns b. 4 Labels c. 1 Button d. 2 TextBox e. 1 Hyperlink i. Text = Cadastrar ii. NavigateUrl = Pgina de Cadastro do Usurio (ainda ser criada)

4) Importe o namespace MiniCurso

using MiniCurso;
5) Crie a StoredProcedure para autenticao sp_Autenticacao
CREATE PROCEDURE sp_Autenticacao (IN email VARCHAR(100), IN senha VARCHAR(50), OUT codigo INT) BEGIN IF ((email != '') && (senha != '')) THEN SET codigo = (SELECT TB_PESSOACODIGO FROM TB_PESSOA WHERE TB_PESSOAEMAIL=email AND TB_PESSOASENHA=senha); ELSE SET codigo = 0; END IF; END

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

6) Crie o mtodo para Logar na aplicao


{ private void Logar() System.Data.IDbConnection conexao; System.Data.IDbCommand comando; //ABRE A CONEXAO conexao = Mapped.Connection(Mapped.conexao.ServerExplorer); //COMANDO A SER EXECUTADO string storedprocedure = "sp_Autenticacao"; comando = Mapped.Command(storedprocedure, conexao); comando.CommandType = CommandType.StoredProcedure; //DEFINE PARAMETROS DE ENTRADA DA SP comando.Parameters.Add(Mapped.Parameter ("email", txtEmail.Text, DbType.String, ParameterDirection.Input)); comando.Parameters.Add(Mapped.Parameter ("senha", txtSenha.Text, DbType.String, ParameterDirection.Input)); //DEFINE PARAMETRO DE SAIDA DA SP comando.Parameters.Add(Mapped.Parameter ("codigo", "", DbType.Int32, ParameterDirection.Output)); //EXECUTA O COMANDO comando.ExecuteNonQuery(); int codigo = 0; //VARRE TODOS OS PARAMETROS DO COMANDO foreach (var item in comando.Parameters) { //VERIFICA QUAL O PARAMETRO DE SAIDA IDbDataParameter p = (IDbDataParameter)item; if (p.Direction == ParameterDirection.Output) if (p.ParameterName == "codigo") codigo = Convert.ToInt32(p.Value); } //FECHA CONEXAO conexao.Close(); //DEFINE CODIGO DO USUARIO EM VARIAVEL DE SESSION Session["Codigo"] = codigo; } Response.Redirect("Principal.aspx");

7) No boto Entrar (evento CLICK), chame o mtodo Logar()

Logar();
8) EXECUTE A APLICAO a. Ainda falta cadastrar um usurio.

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

Desenvolvimento da Aplicao Cadastro de Usurio (Cadastro.aspx)


1) Criar uma nova pgina (Web Form) na pasta Paginas > Usuario, denominada Cadastro.aspx 2) Arraste um Label (ID = lblMensagem) 3) Arraste um Hyperlink a. Text = Pgina Principal b. NavigateUrl = Login.aspx 4) Na Toolbox, arraste um SqlDataSource e siga os passos: a. Clique na opo Configure Data Source b. Selecione a conexo c. Clique em NEXT d. Marque a segunda opo (Specify columns from a table or view) e. Selecione a tabela TB_PESSOA f. Marque a coluna (*) g. Clique no boto Advanced... h. Marque a opo Generate INSERT, UPDATE and DELETE i. Clique em OK j. Clique em NEXT k. Clique em FINISH 5) No Modo Source, aperte CTRL+H para fazer duas substituies. a. Primeira substituio i. Find what [ ii. Replace With (em branco) iii. Clique em Replace All b. Segunda substituio i. Find what ] ii. Replace With (em branco) iii. Clique em Replace All 6) Arraste um FormView 7) Associe o FormView1 ao SqlDataSource1 a. Choose Data Source b. Selecione SqlDataSource1 c. Refresh Schema d. Edit Template i. InsertItemTemplate 1. Delete o campo Cdigo 2. Delete o campo Data de Cadastro ii. End Template Editing 8) No Page_Load, altere o FormView para comear em modo de Cadastro
if (!Page.IsPostBack) { FormView1.ChangeMode(FormViewMode.Insert); }

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

9) Edite o evento FormView1_ItemInserting para preencher a Data de Cadastro, j que ela foi excluda do formulrio

e.Values["TB_PESSOADATACADASTRO"] = DateTime.Now;
10) Edite o evento FormView1_ItemInserted para finalizar o Cadastro
if (e.Exception != null) { e.ExceptionHandled = true; e.KeepInInsertMode = true; lblMensagem.Text = "Cadastro no completado"; } else { FormView1.Visible = false; lblMensagem.Text = "Cadastro realizado com sucesso"; }

11) EXECUTAR A APLICAO a. Cadastre um usurio b. Faa o login com o usurio

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

Desenvolvimento da Aplicao Visualizar Produtos (Principal.aspx)


1) Voltar na pgina Principal.aspx para mostrar o nome do usurio logado. 2) Crie a StoredProcedure sp_GetUsuario CREATE PROCEDURE sp_GetUsuario(IN codigo INT) BEGIN SELECT * FROM TB_PESSOA WHERE TB_PESSOACODIGO = codigo; END 3) Acrescente um Label na pgina (ID = lblNome) 4) Crie o mtodo para mostrar o nome do usurio
private bool GetUsuario(int codigo) { bool retorno = false; System.Data.IDbConnection conexao; System.Data.IDbCommand comando; System.Data.IDataReader reader; //ABRE A CONEXAO conexao = Mapped.Connection(Mapped.conexao.ServerExplorer); //COMANDO A SER EXECUTADO string storedprocedure = "sp_GetUsuario"; comando = Mapped.Command(storedprocedure, conexao); comando.CommandType = CommandType.StoredProcedure; //INPUT comando.Parameters.Add(Mapped.Parameter ("codigo", codigo, DbType.Int32, ParameterDirection.Input)); //EXECUTA O COMANDO reader = comando.ExecuteReader(); //LE REGISTRO DO BD while (reader.Read()) { lblNome.Text = Convert.ToString(reader["TB_PESSOANOME"]); retorno = true; } //FECHA CONEXAO reader.Close(); conexao.Close(); return retorno; }

5) Acrescentar o cdigo para a chamada do mtodo dentro do PAGE LOAD


if (Session["Codigo"] != null) { if (Session["Codigo"].ToString().Trim() != string.Empty) { int codigo = Convert.ToInt32(Session["Codigo"]); GetUsuario(codigo); } }

6) EXECUTAR A APLICAO

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

Desenvolvimento da Aplicao Carrinho de Produtos (Carrinho.aspx)


1) Criar uma nova pgina (Web Form) na pasta Paginas, denominada Carrinho.aspx 2) Importar o namespace MiniCurso.

using MiniCurso;
3) Crie a StoredProcedure para Inserir o produto no Carrinho
CREATE PROCEDURE sp_InsereCarrinho (IN produto INT, IN pessoa INT, OUT codigo INT) BEGIN DECLARE qtde INT; SET qtde = (SELECT COUNT(*) FROM TB_CARRINHO WHERE TB_PRODUTOCODIGO=produto AND TB_PESSOACODIGO=pessoa); IF qtde = 0 THEN INSERT INTO TB_CARRINHO (TB_PRODUTOCODIGO, TB_PESSOACODIGO) VALUES (produto, pessoa); ELSE END IF; END SET codigo = LAST_INSERT_ID(); SET codigo = 0;

4) Crie o mtodo para Inserir o Produto no carrinho


{ private int InsereCarrinho(int produto, int pessoa) System.Data.IDbConnection conexao; System.Data.IDbCommand comando; //ABRE A CONEXAO conexao = Mapped.Connection(Mapped.conexao.ServerExplorer); //COMANDO A SER EXECUTADO string storedprocedure = "sp_InsereCarrinho"; comando = Mapped.Command(storedprocedure, conexao); comando.CommandType = CommandType.StoredProcedure; //PARAMETROS DE ENTRADA comando.Parameters.Add(Mapped.Parameter ("produto", produto, DbType.Int32, ParameterDirection.Input)); comando.Parameters.Add(Mapped.Parameter ("pessoa", pessoa, DbType.Int32, ParameterDirection.Input)); //PARAMETRO DE SAIDA comando.Parameters.Add(Mapped.Parameter ("codigo", "", DbType.Int32, ParameterDirection.Output)); //EXECUTA O COMANDO comando.ExecuteNonQuery(); int codigo = 0; //RECUPERA CODIGO DO CARRINHO INSERIDO foreach (var item in comando.Parameters) { IDbDataParameter p = (IDbDataParameter)item; if (p.Direction == ParameterDirection.Output) if (p.ParameterName == "codigo") codigo = Convert.ToInt32(p.Value); } //FECHA CONEXAO conexao.Close(); return codigo; }

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

5) Chamar o mtodo no Page_Load


if (!Page.IsPostBack) { int produto = Convert.ToInt32(Request.QueryString["ID"]); int pessoa = Convert.ToInt32(Session["Codigo"]); switch (InsereCarrinho(produto, pessoa)) { case 0: Response.Write("Produto j cadastrado"); break; default: Response.Write("Produto cadastrado com sucesso"); break; } }

6) EXECUTAR A APLICAO a. Logar na aplicao b. Escolher um Produto c. Comprar o produto (ir para o Carrinho) i. Tente comprar o produto duas vezes. 7) Visualizar o Carrinho de Produtos. Crie a StoredProcedure sp_VisualizaCarrinho
CREATE PROCEDURE sp_VisualizaCarrinho(IN pessoa INT) BEGIN SELECT * FROM TB_CARRINHO INNER JOIN TB_PRODUTO ON TB_PRODUTO.TB_PRODUTOCODIGO = TB_CARRINHO.TB_PRODUTOCODIGO WHERE TB_CARRINHO.TB_PESSOACODIGO=pessoa; END

8) Criar um SqlDataSource chamando a StoredProcedure. Arraste o SqlDataSource e configure-o seguindo os passos: a. Configure Data Source b. Selecione a conexo c. Clique em NEXT d. Marque a primeira opo (Specify a custom SQL...) e. Marque a opo Stored Procedure f. Selecione a sp_VisualizaCarrinho g. Clique em NEXT h. Adicione um Parmetro i. Parameter Source = Session ii. Session Field = Codigo i. Clique em NEXT j. Clique em Test Query k. Clique em FINISH 9) Arraste um GridView e associe-o ao SqlDataSource1 a. Edite as colunas e deixe apenas as do Ttulo, Descrio,Preo e Foto.

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

10) Importe o namespace para manipulao de arquivo.

using System.IO;
11) Crie o mtodo que transforma o caminho fsico no caminho relativo
{ private string PathAbsolute2PathRelative(string nomeImagem) string caminhoHTTP = ConfigurationManager.AppSettings["URLSite"] + "Paginas/Produto/Foto/"; int final = nomeImagem.LastIndexOf("\\"); string novonomeImagem = caminhoHTTP + nomeImagem.Substring(final + 1); return novonomeImagem;

12) Edite o evento GridView_RowDataBound para mostrar a foto adequadamente.


if (e.Row.RowType == DataControlRowType.DataRow) { string foto = (Convert.ToString (DataBinder.Eval(e.Row.DataItem, "TB_PRODUTOFOTO"))); if (foto != string.Empty) { if (File.Exists(foto)) { string img = PathAbsolute2PathRelative(foto); e.Row.Cells[3].Text = "<img src='" + img + "' width='80px'>"; } } }

13) Acrescente um Hyperlink a. Text = Continuar Comprando b. NavigateURL = Principal.aspx 14) EXECUTAR A APLICAO 15) Excluir um Item do Carrinho. Crie a StoredProcedure sp_DeleteItemCarrinho
CREATE PROCEDURE sp_DeleteItemCarrinho(IN carrinho INT) BEGIN DELETE FROM TB_CARRINHO WHERE TB_CARRINHOCODIGO=carrinho; END

16) No Modo Source, adicionar uma coluna do tipo Item Template no GridView (dentro das tags <Columns></Columns>
<asp:TemplateField> <ItemTemplate> <asp:LinkButton CommandName="Deletar" CommandArgument='<%# Bind("TB_CARRINHOCODIGO") %>' ID="lbExcluir" runat="server">Excluir </asp:LinkButton> </ItemTemplate> </asp:TemplateField>

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

17) Crie o mtodo que Deleta o Item do Carrinho


private bool DeletaItemCarrinho(int carrinho) { System.Data.IDbConnection conexao; System.Data.IDbCommand comando; //ABRE A CONEXAO conexao = Mapped.Connection(Mapped.conexao.ServerExplorer); //COMANDO A SER EXECUTADO string storedprocedure = "sp_DeleteItemCarrinho"; comando = Mapped.Command(storedprocedure, conexao); comando.CommandType = CommandType.StoredProcedure; //PARAMETRO DE ENTRADA comando.Parameters.Add(Mapped.Parameter ("carrinho", carrinho, DbType.Int32, ParameterDirection.Input)); //EXECUTA O COMANDO comando.ExecuteNonQuery(); //FECHA CONEXAO conexao.Close(); return true; }

18) O mtodo dever ser chamado a partir do GridView. Para isso, edite o evento GridView_RowCommand.
if (e.CommandName == "Deletar") { int codigo = Convert.ToInt32(e.CommandArgument); DeletaItemCarrinho(codigo); GridView1.DataBind(); }

19) EXECUTAR A APLICAO 20) Limpar o carrinho. Crie a StoredProcedure sp_DeleteCarrinho


CREATE PROCEDURE sp_DeleteCarrinho(IN pessoa INT) BEGIN DELETE FROM TB_CARRINHO WHERE TB_PESSOACODIGO=pessoa; END

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

21) Crie o mtodo para Deletar o Carrinho


private bool DeletaCarrinho(int pessoa) { System.Data.IDbConnection conexao; System.Data.IDbCommand comando; //ABRE A CONEXAO conexao = Mapped.Connection(Mapped.conexao.ServerExplorer); //COMANDO A SER EXECUTADO string storedprocedure = "sp_DeleteCarrinho"; comando = Mapped.Command(storedprocedure, conexao); comando.CommandType = CommandType.StoredProcedure; //PARAMETRO DE ENTRADA comando.Parameters.Add(Mapped.Parameter ("pessoa", pessoa, DbType.Int32, ParameterDirection.Input)); //COMANDO EXECUTADO comando.ExecuteNonQuery(); //FECHA CONEXAO conexao.Close(); return true; }

22) Arraste um LinkButton (Text = Limpar Carrinho; ID = lbLimparCarrinho) e adicione o cdigo a seguir.

int pessoa = Convert.ToInt32(Session["Codigo"]); DeletaCarrinho(pessoa); GridView1.DataBind();


23) EXECUTAR A APLICAO 24) Acrescentar Hyperlink a. Text = Finalizar a Compra b. NavigateUrl = Boleto.aspx (ainda no foi criada)

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

Desenvolvimento da Aplicao Finalizar a Compra (Boleto.aspx)


1) Criar uma nova pgina (Web Form) na pasta Paginas, denominada Boleto.aspx 2) Importar os namespaces

using BoletoNet; using MiniCurso;


3) Criar PANEL com Labels dentro da tag <FORM></FORM>
<asp:Panel ID="pnlDados" runat="server"> <asp:Label ID="lblNome" runat="server"></asp:Label> <br /> <asp:Label ID="lblEndereco" runat="server"></asp:Label> <br /> <asp:Label ID="lblBairro" runat="server"></asp:Label> <br /> <asp:Label ID="lblCidade" runat="server"></asp:Label> <br /> <asp:Label ID="lblEstado" runat="server"></asp:Label> <br /> <asp:Label ID="lblComplemento" runat="server"></asp:Label> <br /> <asp:Label ID="lblNumero" runat="server"></asp:Label> <br /> <asp:Label ID="lblCEP" runat="server"></asp:Label> <br /> <asp:Button ID="btnGerar" runat="server" Text="Gerar Boleto" /> </asp:Panel>

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

4) Crie o mtodo para Mostrar as Informaes do Usurio


private bool GetUsuario(int codigo) { bool retorno = false; System.Data.IDbConnection conexao; System.Data.IDbCommand comando; System.Data.IDataReader reader; //ABRE A CONEXAO conexao = Mapped.Connection(Mapped.conexao.ServerExplorer); //COMANDO A SER EXECUTADO string storedprocedure = "sp_GetUsuario"; comando = Mapped.Command(storedprocedure, conexao); comando.CommandType = CommandType.StoredProcedure; //INPUT comando.Parameters.Add(Mapped.Parameter ("codigo", codigo, DbType.Int32, ParameterDirection.Input)); //EXECUTA O COMANDO reader = comando.ExecuteReader(); while (reader.Read()) { lblNome.Text = Convert.ToString(reader["TB_PESSOANOME"]); lblEndereco.Text = Convert.ToString(reader["TB_PESSOAENDERECO"]); lblNumero.Text = Convert.ToString(reader["TB_PESSOANUMERO"]); lblBairro.Text = Convert.ToString(reader["TB_PESSOABAIRRO"]); lblCidade.Text = Convert.ToString(reader["TB_PESSOACIDADE"]); lblCEP.Text = ""; lblEstado.Text = Convert.ToString(reader["TB_PESSOAESTADO"]); lblComplemento.Text = Convert.ToString(reader["TB_PESSOACOMPLEMENTO"]); retorno = true; } //FECHA CONEXAO reader.Close(); conexao.Close(); } return retorno;

5) Chamar o mtodo ao carregar a pgina


if (!Page.IsPostBack) { if (Session["Codigo"] != null) { if (Session["Codigo"].ToString().Trim() != string.Empty) { GetUsuario(Convert.ToInt32(Session["Codigo"])); } } }

6) EXECUTAR A APLICAO

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

7) No Modo Source, acrescentar mais um PANEL dentro da tag <FORM></FORM>


<asp:Panel ID="panelBoleto" runat="server"> </asp:Panel>

8) Criar StoredProcedure para Somar Valor do Carrinho


CREATE PROCEDURE sp_SomaCarrinho(IN pessoa INT) BEGIN SELECT SUM(TB_PRODUTO.TB_PRODUTOPRECO) AS TOTAL FROM TB_CARRINHO INNER JOIN TB_PRODUTO ON TB_PRODUTO.TB_PRODUTOCODIGO = TB_CARRINHO.TB_PRODUTOCODIGO WHERE TB_CARRINHO.TB_PESSOACODIGO=pessoa; END

9) Cria o mtodo para Recuperar o Total da Compra que ser utilizado na impresso do Boleto.
private double GetTotal(int codigo) { System.Data.IDbConnection conexao; System.Data.IDbCommand comando; System.Data.IDataReader reader; //ABRE A CONEXAO conexao = Mapped.Connection(Mapped.conexao.ServerExplorer); //COMANDO A SER EXECUTADO string storedprocedure = "sp_SomaCarrinho"; comando = Mapped.Command(storedprocedure, conexao); comando.CommandType = CommandType.StoredProcedure; //INPUT comando.Parameters.Add(Mapped.Parameter ("pessoa", codigo, DbType.Int32, ParameterDirection.Input)); //EXECUTA O COMANDO double total = 0; reader = comando.ExecuteReader(); //RECUPERA O TOTAL while (reader.Read()) { total = Convert.ToDouble(reader["TOTAL"]); } //FECHA CONEXAO reader.Close(); conexao.Close(); } return total;

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

10) Criar StoredProcedure para Finalizar a Compra


CREATE PROCEDURE sp_FinalizaCompra(IN codigo INT) BEGIN DECLARE ID_PRODUTO INT; DECLARE ID_COMPRA INT; DECLARE TOTAL DECIMAL(10,2); DECLARE NUMLINHAS INT; DECLARE CONT INT; DECLARE cc cursor for SELECT (TB_CARRINHO.TB_PRODUTOCODIGO) AS ID_PRODUTO FROM TB_CARRINHO WHERE TB_CARRINHO.TB_PESSOACODIGO=codigo; DECLARE tt cursor for SELECT SUM(TB_PRODUTO.TB_PRODUTOPRECO) AS TOTAL FROM TB_CARRINHO INNER JOIN TB_PRODUTO ON TB_PRODUTO.TB_PRODUTOCODIGO = TB_CARRINHO.TB_PRODUTOCODIGO WHERE TB_CARRINHO.TB_PESSOACODIGO=codigo; OPEN tt; FETCH tt into TOTAL; CLOSE tt; INSERT INTO TB_COMPRA (TB_COMPRADATACADASTRO, TB_PESSOACODIGO, TB_COMPRAVALORTOTAL, TB_COMPRAFORMAPAGAMENTO) VALUES (NOW(), codigo, TOTAL, 1); SET ID_COMPRA = LAST_INSERT_ID(); SET CONT = 1; OPEN cc; SELECT FOUND_ROWS() into NUMLINHAS; REPEAT FETCH cc INTO ID_PRODUTO; INSERT INTO TB_COMPRAITEM (TB_COMPRACODIGO, TB_PRODUTOCODIGO) VALUES(ID_COMPRA, ID_PRODUTO); SET CONT = CONT +1; UNTIL CONT > NUMLINHAS END REPEAT; CLOSE cc; DELETE FROM TB_CARRINHO WHERE TB_PESSOACODIGO=codigo; END

11) Criar mtodo que Finaliza a Compra


private void Finaliza(int codigo) { System.Data.IDbConnection conexao; System.Data.IDbCommand comando; conexao = Mapped.Connection(Mapped.conexao.ServerExplorer); string storedprocedure = "sp_FinalizaCompra"; comando = Mapped.Command(storedprocedure, conexao); comando.CommandType = CommandType.StoredProcedure; comando.Parameters.Add(Mapped.Parameter ("codigo", codigo, DbType.Int32, ParameterDirection.Input)); comando.ExecuteNonQuery(); conexao.Close();

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

12) Criar mtodo que Gera o Boleto


private void GerarBoleto (double valor, string nome, string end, string bairro, string cep, string estado, string cidade) //Informa os dados do cedente string cpfcnpj = "59.323.998/0001-08"; string cedente = "FATEC GUARATINGUET"; string agencia = "1250"; string agenciadigito = "5"; string conta = "26398"; string contadigito = "2"; //Dependendo da carteira, precisa do cdigo do cedente (o banco que fornece) Cedente c = new Cedente (cpfcnpj, cedente, agencia, agenciadigito, conta, contadigito); c.Codigo = 0806498; DateTime vencimento = DateTime.Now.AddDays(10); string carteira = "18"; string numeroboleto = "0000033320071"; Boleto b = new Boleto(vencimento, valor, carteira, numeroboleto, c); b.Carteira = "1"; b.NumeroDocumento = "B20005446"; b.ValorBoleto = valor; //Informa os dados do sacado b.Sacado = new Sacado("", nome); b.Sacado.Endereco.End = end; b.Sacado.Endereco.Bairro = bairro; b.Sacado.Endereco.Cidade = cidade; b.Sacado.Endereco.CEP = cep; b.Sacado.Endereco.UF = estado; string banco = "237"; Instrucao_Bradesco i5 = new Instrucao_Bradesco(Convert.ToInt32(banco)); i5.Descricao = "No Receber aps o vencimento"; b.Instrucoes.Add(i5); b.EspecieDocumento = new EspecieDocumento(237); BoletoBancario bb = new BoletoBancario(); bb.CodigoBanco = Convert.ToInt16(banco); bb.Boleto = b; bb.MostrarComprovanteEntrega = false; pnlDados.Visible=false; panelBoleto.Controls.Clear(); if (panelBoleto.Controls.Count == 0) { panelBoleto.Controls.Add(bb); }

13) Edite o evento CLICK do Boto Gerar Boleto


int pessoa = Convert.ToInt32(Session["Codigo"]); GerarBoleto(GetTotal(pessoa),lblNome.Text,lblEndereco.Text + " " + lblNumero.Text + " " + lblComplemento.Text, lblBairro.Text, lblCEP.Text, lblEstado.Text, lblCidade.Text); Finaliza(pessoa);

14) EXECUTE A APLICAO

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

Desenvolvimento da Aplicao Sair (Principal.aspx)


1) Voltar na pgina Principal.aspx para criar a opo de Sair da Aplicao. 2) Arraste um LinkButton a. Text = Sair b. ID = lbSair c. Evento CLICK Session.Abandon(); Session.Clear(); Session.RemoveAll(); Response.Redirect("Login.aspx"); 3) EXECUTAR A APLICAO

Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com

Agradecimento
FATEC de Guaratinguet, agradeo pela oportunidade de ministrar este minicurso que visa complementar a formao dos alunos desta unidade de ensino. Aos alunos, espero que tenham gostado e aproveitado o minicurso. Aproveito para dizer que o contedo aqui abordado no nada diante da capacidade de desenvolvimento da plataforma .NET. Busquem a formao contnua.

EDUCATION is most powerful weapon which you can use to CHANGE THE WORLD. Nelson Mandela

Contato
Luiz Eduardo Guarino de Vasconcelos E-mail: du dot guarino arroba gmail dot com Facebook: luizeduardo dot guarino Twitter: guarinaum