Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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 Administrator
Disponvel em http://downloads.mysql.com/archives.php
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.
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
Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com
Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com
TB_COMPRAITEM Armazena as informaes dos produtos comprados pelos usurios. . Essas informaes so originadas do Carrinho de Compras.
Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com
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
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
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.
Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com
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).
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.
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
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?')"); } } } }
Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com
Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com
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.
} else { lblMensagem.Text = "No existe arquivo selecionado para Upload."; } } return retorno;
Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com
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; }
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
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
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();
Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com
Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com
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.
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
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
<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>
Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com
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(); }
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
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; } } }
Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com
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
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
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"; }
Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com
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
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;
Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com
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
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;
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
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(); }
Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com
22) Arraste um LinkButton (Text = Limpar Carrinho; ID = lbLimparCarrinho) e adicione o cdigo a seguir.
Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com
Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com
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
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
Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com
Minicurso: Desenvolvimento de aplicao web usando C# e MySQL. Luiz Eduardo Guarino de Vasconcelos du dot guarino arroba gmail dot com
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