Desenvolvimento de Website com ASP.NET e SQL Server - Parte 2 - C# Brasil


Desenvolvimento de Website com ASP.NET e SQL Server – Parte 2

Olá caro leitor!

Dando continuidade ao artigo anterior que criamos o banco de dados, as tabelas, camada de conexão, camada de entidades e a camada de regras de negocio do nosso projeto, iremos iniciar o desenvolvimento do nosso website.

Caso queira acessar as outras partes, veja os links abaixo:

Para iniciarmos, faça o download e abra o projeto Desenvolvimento de Website com ASP.NET e SQL Server - Parte 1.

Após aberto adicione um novo Web Site conforme imagem abaixo.

Salve o novo projeto no mesmo diretório dos demais projetos anterior e defina um nome. No caso chamarei de WebSite.

Feito isso, vamos adicionar uma MasterPage ao projeto que será o modelo visual padrão de novo projeto.

Defina um novo para a MasterPage. Deixei o nome como MasterPage.masterpage mesmo.

Por padrão quando criamos um novo Web Site é automaticamente incluso uma página Default.aspx, deveremos exclui-la.

Inclua ao projeto uma nova pasta com o nome de css para que nela possamos incluir nossa folha de estilo que será referenciada na MasterPage.

Após criado a pasta, criaremos um novo arquivo de folha de estilo conforme imagem abaixo clicando com o botão direito sobre a pasta css e selecionando a opção Add New Item.

Defina o nome do arquivo Style Sheet como default.css.

Depois de criado o arquivo, inclua a folha de estilo abaixo no arquivo default.css.


html, body, form
{
	height: 100%;
}
body
{
    font-family: Tahoma, Verdana, Arial, Sans-Serif, Times New Roman;
    padding: 0;
    margin: 0;
}
#geral
{
	position: relative;
	min-height: 100%;
}
* html #geral
{
	height: 100%;
}
#cabecalho
{
    background: #f09942;
    height: 150px;
    line-height: 150px;
}
#cabecalho h1
{
    padding: 0;
    margin: 0;
}
#cabecalho h1#logo
{
    text-transform: uppercase;
}
#menu ul
{
    overflow: auto;
    background-color: #353535;
    padding: 0;
    margin: 0;
    list-style: none;
}
#menu ul li
{
    float: left;
}
#menu ul li a
{
    display: block;
    height: 50px;
    line-height: 50px;
    padding: 5px 20px;
    color: #fff;
    text-decoration: none;
}
#menu ul li a:hover
{
    color: #353535;
    background: #f09942;
    text-decoration: underline;
}
#conteudo
{
    clear: both;
}
#rodape
{
    position: absolute;
    background-color: #f09942;
    width: 100%;
    bottom: 0;
    left: 0;
    padding: 15px 0;
    text-align: center;
    font-size: small;
}
#rodape a
{
    color: #000;
    text-decoration: none;
}
#rodape a:hover
{
    color: #000;
    text-decoration: underline;
}

Agora abra o código HTML do nosso arquivo MasterPage e substitua pelo disponível abaixo.


<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        @import url('css/default.css');
    </style>
</head>
<body>
    <form id="form1" runat="server">
        <div id="geral">
            <div id="cabecalho">
                <h1 id="logo">Projeto WebSite .NET</h1>
            </div>
            <div id="menu">
                
            </div>
            <div id="conteudo">
                <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
                    
                </asp:ContentPlaceHolder>
            </div>
            <div id="rodape">
                &copy; 2012. Projeto WebSite .NET by <a href="http://csharpbrasil.com.br" target="_blank">C# Brasil</a>
            </div>
        </div>
    </form>
</body>
</html>

Vamos incluir uma nova página Default.aspx que utilizará a MasterPage. Clique com o botão direito sobre o projeto e clique em Add New Item. Defina o nome para default.aspx.

Selecione a MasterPage criada.

Teremos até o momento o nosso website igual à imagem abaixo.

Como pode perceber, até o momento não temos o menu. Nesse caso iremos criar um Web User Control especifico onde será exibido os links do menu de acordo com as páginas presentes em nosso banco de dados. Para isso clique com o botão direito em cima do projeto WebSite e clique em Add New Item.

Adicionaremos um novo Web User Control e definiremos o nome como MenuControl.ascx.

A partir desse momento começaremos a utilização de nossas bibliotecas criadas no artigo anterior.

Clicando com o botão direito em cima do projeto Website, clique em Add Reference.

Na aba Projects, você encontrará todas as bibliotecas presentes em nossa solutions, selecione todas.

Agora abra o código HTML do MenuControl.ascx para adicionarmos o código que ficara como abaixo.


<%@ Control Language="C#" AutoEventWireup="true" CodeFile="MenuControl.ascx.cs" Inherits="MenuControl" %>
    <ul>
        <li>Página inicial</li>
        <asp:Literal ID="ltlItensMenu" runat="server" />
        <li>Contato</li>
    </ul>

Como pode ver no código anterior, foi criado uma lista HTML já com 2 (dois) links, Página inicial e Contato. Entre eles adicionamos um Server Control do tipo Literal. O Server Control do tipo Literal é um componente para escrever textos em tela, ou seja, se escreve um texto sem que seja gerado tag HTML. No nosso caso usaremos para criar os itens do menu.

Agora abra o CodeBehind para incluirmos o código C# (C-Sharp) que listará os links do menu. Esse código deverá ser incluso no Page_Load do nosso MenuControl.ascx.


        // Instancia da classe de Negocio
        WebSite.Business.Paginas paginasBO = new WebSite.Business.Paginas();
        // Chamada ao metodo que lista todas as paginas que irá gerar um array das mesmas
        WebSite.Entities.Paginas[] paginas = paginasBO.ListaPaginas();

        // Realizando um laço de repetição no array para ler cada registro
        foreach (WebSite.Entities.Paginas pagina in paginas)
        {
            // Formatando a string para que seja gerado uma saida conforme exemplo
            // <li>Titulo Pagina</li>
            string mnu = string.Format("<li><a href=\"pagina.aspx?id={0}\">{1}</a></li>", pagina.Id, pagina.Titulo);
            // Atribuindo o texto gerado no Server Control Literal
            ltlItensMenu.Text += mnu;
        }

Agora que nosso menu está pronto, vamos inclui-lo na nossa MasterPage. Para isso abra a MasterPage no modo Design e arraste o MenuControl.ascx que está no Solution Explorer para dentro da MasterPage.

Seu HTML da MasterPage passará a ficar assim.


<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

<%-- Aqui ficou a referencia ao MenuControl.ascx --%>
<%@ Register src="MenuControl.ascx" tagname="MenuControl" tagprefix="uc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        @import url('css/default.css');
    </style>
</head>
<body>
    <form id="form1" runat="server">
        <div id="geral">
            <div id="cabecalho">
                <h1 id="logo">Projeto WebSite .NET</h1>
            </div>
            <div id="menu">
                <%-- Aqui ficou o nosso MenuContro.ascx --%>
                <uc1:MenuControl ID="MenuControl1" runat="server" />
            </div>
            <div id="conteudo">
                <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
                    
                </asp:ContentPlaceHolder>
            </div>
            <div id="rodape">
                &copy; 2012. Projeto WebSite .NET by <a href="http://csharpbrasil.com.br" target="_blank">C# Brasil</a>
            </div>
        </div>
    </form>
</body>
</html>

Antes de executar nosso projeto, precisaremos incluir a ConnectionString para conexão com o banco de dados. Para isso abra o Web.config e inclua o código abaixo alterando somente os seus dados de conexao.


  <connectionStrings>
    <add name="DBConnection" connectionString="Data Source=servidor1;User Id=usuario;Password=senha;Initial Catalog=projeto_website;" providerName="System.Data.SqlClient"/>
  </connectionStrings>

Salve e execute seu projeto e teremos o resultado até o momento.

Se clicarmos nos links gerados a partir de nossa lista de páginas, irá ocorrer um erro 404 pois o arquivo pagina.aspx ainda não existe. Mais agora é mais fácil criar página pois já temos nosso modelo criado, então criaremos o arquivo pagina.aspx e utilizaremos a MasterPage.

Clique com o botão direito sobre o projeto e clique em Add New Item.

Defina o nome para o arquivo como pagina.aspx e selecione a opção Select master page

Uma nova janela será aberta onde selecionaremos nossa master page.

Repare que o código HTML de nossa pagina.aspx quase não possui tags, isso porque já está tudo dentro da nossa MasterPage.


<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="pagina.aspx.cs" Inherits="pagina" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
</asp:Content>

É entre as tag que iremos incluir o conteúdo do site. Porem será incluso a partir do banco de dados.

Vamos implementar primeiro o HTML que deverá ficar assim.


<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="pagina.aspx.cs" Inherits="pagina" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <h2>
        <asp:Literal ID="ltlTitulo" runat="server" />
    </h2>
    <asp:Literal ID="ltlConteudo" runat="server" />
</asp:Content>

Repare que novamente fizemos uso do Literal. Ele será uma excelente opção para esses casos pois não queremos que seja gerado tags HTML extras.

Agora vamos ao CodeBehind para fazermos a busca das informações da página. Dentro dele terá o evento Page_Load e é onde incluiremos nossa chamada ao método para buscar o conteúdo da pagina e usando como informação o Id da página. O Id dá página é passado por QueryString. Para saber mais sobre QueryString acesse o video aula do Wellington Camargo.


        // Recebe o ID da página por QueryString e pelo fato de o parametro ser String, realizamos a conversão para Integer
        int IdPagina;
        int.TryParse(Request.QueryString["id"], out IdPagina);

        // Caso não tenha sido passado o ID dá pagina, redireciona para a pagina padrão (default.aspx)
        if (IdPagina == 0) Response.Redirect("default.aspx");

        // Instancia da classe de Negocio
        WebSite.Business.Paginas paginasBO = new WebSite.Business.Paginas();
        // Chamada ao metodo que lista todas as paginas passando o ID da página e retornando o primeiro registro
        WebSite.Entities.Paginas pagina = paginasBO.ListaPaginas(new WebSite.Entities.Paginas(IdPagina)).FirstOrDefault();

        // Atribuido os dados nos Literais
        this.Title = pagina.Titulo;
        ltlTitulo.Text = pagina.Titulo;
        ltlConteudo.Text = pagina.Texto;

Como pode ver, em pouco tempo fomos capazes de desenvolver o nosso website e bem flexível, ou seja, caso desejamos ter mais página, basta realizarmos uma inserção na tabela PAGINAS que teremos mais páginas inclusas no menu. Vamos fazer um teste? Execute o script abaixo no banco de dados.


INSERT INTO PAGINAS(TITULO_PAGINA, TEXTO_PAGINA, DATACRIACAO_PAGINA, ATIVO_PAGINA)
VALUES('Produtos', 'Conteudo da página de produtos', GETDATE(), 1)

INSERT INTO PAGINAS(TITULO_PAGINA, TEXTO_PAGINA, DATACRIACAO_PAGINA, ATIVO_PAGINA)
VALUES('Clientes', 'Conteudo da página de clientes', GETDATE(), 1)

Agora acesse sua página e repare que foram inclusos mais 2 páginas no menu.

Nosso projeto ficou muito simples e de fácil manutenção além de bem flexível o que nos permitira utilizar um mesmo projeto para diversos clientes bastando somente alterar o conteúdo do banco de dados.

Até o momento você aprendeu:

  • Criar tabela e banco de dados;
  • Desenvolver camada de dados, entidades e negocio;
  • Criar páginas utilizando CSS, MasterPage e utilizando nossa camada de negocio.

Acha que acabou? Pode aguarde o próximo artigo que ainda tem muita coisa boa pela frente e iremos ainda criar nosso painel administrativo.

Faça download do projeto: Desenvolvimento de Website com ASP.NET e SQL Server - Parte 2.

Não deixe de participar do fórum. Siga o C# Brasil no Twitter e Facebook.

Até o próximo artigo e bons estudos!

Postado em ASP.NET, C#, SQL Server, Visual Studio | Marcado como , , , , , , , , , , , , , , ,

50 respostas para “Desenvolvimento de Website com ASP.NET e SQL Server – Parte 2”

  1. Leando Teixeira disse:

    Ola Raphael, qual a diferença entre eu criar um Projeto web no File system e o IIS (LocalHoust)?

  2. Olá Leandro

    No File System, quando o projeto é criado ele é executado por meio do ASP.NET Development Server e quando pela opção Local IIS, o projeto é executado diretamente no IIS.
    Na pratica não tera muita diferença salvo exceções quando é necessario acesso a funcionalidades especificas do IIS, permissões entre outros.

  3. Leando Teixeira disse:

    E na hora da publicação, teria alguma diferença?

    Raphael, talvez eu esteja enganado, mas após varias tentativas de visualizar a tela no Browser (F5), sem êxito,
    Percebi que era necessário adicionas um webform e selecionar o Masterpage, provavelmente você tenha esquecido de escrever, então se alguém tiver a mesma dificuldade que eu, esta ai a solução.

  4. Obrigado Leandro

    Realmente você tem razão, não estava informado os passos de criação da página default.aspx. Acabo de fazer a inclusão da parte faltante.

  5. Leando Teixeira disse:

    Public Entities.Paginas[] ListaPaginas(Entities.Paginas pagina) \\ permanece como Null
    {
    List ListPaginas = new List(); \\ a lista fica 0(Zero)

    Data.Connection = new Data.Connection(this.ConnctionString);
    connection.abrirConexao();

    StringBuilder sqlString = new StringBuilder();
    sqlString.Append(“select * from paginas”);

    IF(pagina != null){
    sqlString.Append(“where 1 = 1″);
    }

    IF(pagina.Id > 0){
    sqlString.Append(“and titulo_pagina like ‘” + pagina.Titulo.Replace(“‘”, “””) + “‘”);
    }

    Boa tarde Raphael, estou tendo um problema com essa parte do código, passei a connectionstring, mas não estou conseguindo pegar os dados que estão no banco.
    Debuguei (F11) e percebi que na hora de pegar os valores o Id, texto, titulo… Estão todos com 0 (Zero). E a pagina é igual Null.
    Olha como esta meu cód.:
    // Entities – o Debug nem entra aqui
    Public class Paginas
    {
    Public int Id { get; set; }
    Public string Titulo { get; set; }
    Public string Texto { get; set; }
    Public DateTime DataDaCriacao { get; set; }
    public bool Ativo { get; set; }

    Public Paginas(int Id)
    {
    this.Id = Id;
    }

    //Business
    IDataReader reader = connection.RetornaDados(sqlString.ToString());

    int idxId = reader.GetOrdinal(“ID_PAGINA”);
    int idxTitulo = reader.GetOrdinal(“TITULO_PAGINA”);
    int idxTexto = reader.GetOrdinal(“TEXTO_PAGINA”);
    int idxDataCriacao = reader.GetOrdinal(“DATACRIACAO_PAGINA”);
    int idxAtivo = reader.GetOrdinal(“ATIVO_PAGINA”);

    while(reader.Read())
    {
    Entities.Paginas _pagina = new Entities.Paginas();
    _pagina.Id = reader.GetInt32(idxId);
    _pagina.Titulo = reader.GetString(idxTitulo);
    _pagina.Texto = reader.GetString(idxTexto);
    _pagina.DataDaCriacao = reader.GetDateTime(idxDataCriacao);
    _pagina.Ativo = reader.GetInt32(idxAtivo) == 1;

    ListPaginas.Add(_pagina);

    }
    connection.FechaConexao();
    return ListPaginas.ToArray();

    }
    O que eu poderia estar fazendo neste caso?
    Desculpe-me por tantas perguntas e obrigado por respondê-las

  6. Denis Carvalho disse:

    Parabéns pelo empenho e dedicação no artigo Raphael.

    Sem dúvidas um excelente conteúdo!!!

  7. E ai Leandro, teve algum avanço? Já verificou as atribuições? Verifique o exemplo para download, talvez você tenha esquecido algum detalhe, porém não vi nenhuma divergência.

  8. Juliano disse:

    Esta palavra ConfigurationManager está grifada no trecho de código abaixo, ou seja, problema, poderia me ajudar?
    Grato pelo apoio e artigo, muito bom!

    namespace WebSite.Business
    {
    public class Paginas
    {
    private string ConnectionString = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString;

    public Paginas() { }

    public Entities.Paginas[] ListaPaginas()
    {
    return ListaPaginas(null);
    }

  9. Adicione a referência System.Configuration.

  10. Juliano disse:

    Desculpe a demora e ignorância, mas não deu certo Raphael.

  11. Olá Juliano

    Você tentou colocar o codigo abaixo no inicio do CodeBehind?
    using System.Configuration;
    Com o você fez? Qual erro ocorre?

  12. Sim, na verdade já estava.
    O erro que aparece quando seto ele é: “The name’ConfigurationManager’ does not exist in the current context”

  13. Leandro disse:

    Olá boa tarde, estou seguindo o tutorial que vc postou, consegui criar as paginas, banco de dados, até ai tudo tranquilo, quando executei e cliquei em link (por exemplo no de serviços) o Visual Studio me retorna o seguinte erro:”An expression of non-boolean type specified in a context where a condition is expected, near ‘pagina’.” no método “public IDataReader RetornaDados(string sql)” da Classe WebSite.Data, vc poderia me ajudar?

  14. Jordan disse:

    Olá a todos,
    julianoalexandre18: Também tive esse problema. Estava com using System.COnfiguraion e continuava com problema. Então para resolver eu adicionei na mão a referência a Dll Systema.Configuration da versão 2.0. Fiz isso e resolveu.
    Espero que te ajude.

  15. Caio Bomba disse:

    Cara so da esse erro tentei de tudo e nao vai..

    Erro de rede ou específico à instância ao estabelecer conexão com o SQL Server. O servidor não foi encontrado ou não estava acessível. Verifique se o nome da instância está correto e se o SQL Server está configurado para permitir conexões remotas. (provider: Provedor de Pipes Nomeados, error: 40 – Não foi possível abrir uma conexão com o SQL Server)

  16. Douglas Almeida disse:

    Caio Bomba… Esse erro deve ser porque o seu banco não está conectado… Você precisa conectar seu banco de dados ao projeto, após conectado você clica com botão direito no banco de dados que abrirá no server explorer (do lado esquerdo do seu VS) e vai em propriedades… Copie o Data Source… esse Data Source deve ser inserido no Web Config… assim como o Raphael Cardoso ensina no post… Estou tentando ajudar… pois já vi erros semelhantes.. hehehe.. ABRAÇO!!!

  17. renanroncarati disse:

    O Uso de breakpoints é excelente para debugar teus programas e verem onde está o erro, o meu até então não estava funcionando e eu achei ser problema de banco de dados. Ao colocar breakpoints na camada onde utilizo o connectionstring (variáveis) pude ver que o banco estava sim conectando legal porém um IF na camada de negócio estava com as {} na posição errada e então corrigi meu erro. Estou passando também para agradecer ao post, excelente! Vamos que vamos para a parte 3

  18. renanroncarati disse:

    Só uma dúvida agora.
    Poderiam me ajudar a entender melhor, sei bem pouco sobre, o porquê de criarmos as 3 camadas (Dados, Entidade, Negócio) e a função de cada uma delas.
    Sei pouco sobre isto, mas a dica de quem já mexe com isto a muito tempo poderá me ajudar a entender melhor.
    Muito grato.

  19. Olá Renan, tudo bem?
    Bom, vou deixar um link para você acessar e ler um pouco sobre o assunto.
    É um artigo muito bom do site da MSDN sobre desenvolvimento em camadas.
    http://www.microsoft.com/brasil/msdn/tecnologias/arquitetura/Layers_Developing.mspx

    Abraço

  20. renanroncarati disse:

    Raphael, meu muito obrigado, vai ser de grande ajuda.

  21. Denner disse:

    Raphael, a minha MasterPage não está reconhecendo o arquivo css para formatar o estilo. O que devo fazer?

  22. Luciana disse:

    Meu menu não aparece na página, já refiz todo o projeto e não sei o que está errado.

  23. Vilmar CS disse:

    Olá, Raphael, Olá, Raphael, não estou conseguindo abrir meu projeto e o mesmo está aparecendo esta mensagem de erro.
    “Um projeto com um tipo de saída da biblioteca de classe não pode ser iniciado diretamente. A fim de depurar este projeto, adicione um projeto executável para esta solução que referencia o projeto de biblioteca. “Defina o projeto executável como o projeto de inicialização”
    Você pode, por favor, me dizer por que isto estar acontecendo?

    Desde já agradeço

  24. Vilmar, no Solution Explorer clique com o botão direito sobre o projeto web e escolha a opção “Set as StartUp Project”. Isso irá definir o projeto web como o projeto de inicialização.

  25. Cleber disse:

    Olá Raphael,

    Se puder me tirar uma dúvida durante o decorrer do tutorial me ajudaria muito no aprendizado. O que seria o Page_load da pagina MenuControl ?

  26. Cleber disse:

    Já consegui encontrar Raphael!

  27. elmamjc disse:

    Raphael, muito bom o artigo. Vc está de parabéns.
    Porém após todo o processo, após adicional o control eu pedi p executar.

    Ao fazer isto e dar f5 está dando um erro quem nem consito encontrar na internet.

    The root tag conectionstring is not valid for webconfig
    The root tab should be

    Algúem sabe como arrumar?

  28. Aparentemente deve conter um erro em seu Web.Config
    Verifique para ver se é isso que está ocorrendo.

  29. Romulo disse:

    Olá Raphael! Parabéns pelo artigo. Eu cheguei até aqui, mas o código que inseri na Page_Load aponta erro nos atributos: this.Title = pagina.Titulo;
    ltlTitulo.Text = pagina.Titulo;
    ltlConteudo.Text
    Devo declará-lo em algum lugar?
    Abraço!

  30. Depende como está seu código. Você declarou a camada de negócio da Pagina?
    Como está seu código?

  31. Romulo disse:

    Na verdade eu havia declarado no Page_Load errado e já corrigi, no entanto o site não está conseguindo acessar o banco de dados e o menu não está formatado como na “imagem020″. Você sabe como resolver este ponto?
    Abraço!

  32. Romulo, você incluiu o caminho correto do CSS?
    Quanto ao banco de dados, verifique se os dados de conexão estão corretos.

  33. Tiago Assis disse:

    Muito legal o tutorial, ha muito tempo procurava algo assim na net! Parabens!

    Mas vamos ah perguntinha, estou com problemas na folha do css, meu menu nao está respeitando a formatação do css. Fica na lateral esquerda como se fosse topicos. Poderia me ajudar?

    Obrigado.
    Abraço.
    Tiago

  34. Olá Tiago, qual seria seu problema mais especificamente?

  35. Evaldo disse:

    Olá Raphael! Muito bom o tutorial!! Parabéns.

    Estou com o mesmo problema do Tiago Assis.
    o menu esta desalinhado +- assim:
    Pagina Inicial Contato
    Empresa Serviços

    Poderia nos ajudar?
    Muito obrigado!
    Abraços
    Evaldo

  36. Evaldo, não entendi o problema? Está dando quebra do menu. Se for isso, tente verificar o width do menu. Talvez seja necessário aumentar. Mais se você seguir corretamente o exemplo não tem erro.

  37. Cristian Ferreira disse:

    Olá pessoal pra quem está com problema com o ‘ConfigurationManager’ The name’ConfigurationManager’ does not exist in the current contexto. Resolvi o problema adicionando a referencia a biblioteca System.Configuration no projeto WebSite.Business.

  38. […] Desenvolvimento de Website com ASP.NET e SQL Server – Parte 2 […]

  39. […] Desenvolvimento de Website com ASP.NET e SQL Server – Parte 2 […]

  40. […] Desenvolvimento de Website com ASP.NET e SQL Server – Parte 2 […]

  41. Manoel Neto disse:

    Primeiramente, obrigado pela sua iniciativa de criar este tutorial muito útil e bastante esclarecedor.
    Estou seguindo seu tutorial e quando chegou ao passo de executar o projeto após a configuração de conexão com o baco de dados no arquivo Web.Config, logo em seguida acontece este erro. Como resolve-lo ?
    Compilation Error

    Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

    Compiler Error Message: CS0234: The type or namespace name ‘Business’ does not exist in the namespace ‘WebSite’ (are you missing an assembly reference?)

    Source Error:

    Line 11: {
    Line 12: // Instancia da classe de Negocio
    Line 13: WebSite.Business.Paginas paginasBO = new WebSite.Business.Paginas();
    Line 14: // Chamada ao metodo que lista todas as paginas que irá gerar um array das mesmas
    Line 15: WebSite.Entities.Paginas[] paginas = paginasBO.ListaPaginas();

    Source File: c:\Users\Ntz1nn\Documents\Visual Studio 2013\WebSites\WebSite3\MenuControl.ascx.cs Line: 13

  42. Olá Manoel

    O que ocorre é que o compilador não encontra o namespace Business no projeto, ou seja, na linha 13 onde ele se refere ao WebSite.Business.Paginas não é encontrado no projeto. Você o criou?

  43. Manoel Neto disse:

    Tá criado exatamente como no primeiro passo do tutorial.

  44. Manoel Neto disse:

    Todas as referencias estão inseridas…tá tudo correto. Somente essa bronca ai.

  45. Manoel Neto disse:

    Raphael, obrigado pela atenção, mas o problema persiste. Como você perguntou, WebSite.Business.Paginas está criado de acordo como você explicou na parte 1 do tutorial. Desde já agradeço a sua ajuda.

  46. Manoel, você conseguiria mandar o print do erro? Entendo que você diz está correto, mais é aquele negocio, as vezes pode passar despercebido. Eu ainda acredito que ele não esta encontrado a referencia por que ele realmente não existe no projeto ou esta com o Namespace diferente.

  47. Manoel Neto disse:

    Raphael, segue o link da print do erro.
    https://imagizer.imageshack.us/v2/969x508q90/906/oEfQIj.jpg

    abaixo segue o código do meu arquivo WebSite.Business.Paginas

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Configuration;
    using System.Data;

    namespace WebSite.Business
    {
    public class Paginas
    {
    private string ConnectionString = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString;

    public Paginas() { }

    public Entities.Paginas[] ListaPaginas()
    {
    return ListaPaginas(null);
    }

    public Entities.Paginas[] ListaPaginas(Entities.Paginas pagina)
    {
    List lstPaginas = new List();

    Data.Connection connection = new Data.Connection(this.ConnectionString);
    connection.AbrirConexao();

    StringBuilder sqlString = new StringBuilder();
    sqlString.AppendLine(“select * from paginas”);

    if (pagina != null)
    {
    sqlString.AppendLine(“where 1 = 1″);

    if (pagina.Id > 0)
    {
    sqlString.AppendLine(“and id_pagina = ” + pagina.Id + “”);
    }

    if (!string.IsNullOrEmpty(pagina.Titulo) && pagina.Titulo.Length > 0)
    {
    sqlString.AppendLine(“and titulo_pagina like ‘” + pagina.Titulo.Replace(“‘”, “””) + “‘”);
    }

    if (!string.IsNullOrEmpty(pagina.Texto) && pagina.Texto.Length > 0)
    {
    sqlString.AppendLine(“and texto_pagina like ‘” + pagina.Texto + “‘”);
    }
    }

    IDataReader reader = connection.RetornaDados(sqlString.ToString());

    int idxId = reader.GetOrdinal(“ID_PAGINA”);
    int idxTitulo = reader.GetOrdinal(“TITULO_PAGINA”);
    int idxTexto = reader.GetOrdinal(“TEXTO_PAGINA”);
    int idxDataCriacao = reader.GetOrdinal(“DATACRIACAO_PAGINA”);
    int idxAtivo = reader.GetOrdinal(“ATIVO_PAGINA”);

    while (reader.Read())
    {
    Entities.Paginas _pagina = new Entities.Paginas();
    _pagina.Id = reader.GetInt32(idxId);
    _pagina.Titulo = reader.GetString(idxTitulo);
    _pagina.Texto = reader.GetString(idxTexto);
    _pagina.DataCriacao = reader.GetDateTime(idxDataCriacao);
    _pagina.Ativo = reader.GetInt32(idxAtivo) == 1;

    lstPaginas.Add(_pagina);
    }

    connection.FechaConexao();

    return lstPaginas.ToArray();
    }

    public bool SalvaPagina(Entities.Paginas pagina)
    {
    bool salvou = false;

    if (pagina != null)
    {
    Data.Connection connection = new Data.Connection(this.ConnectionString);
    connection.AbrirConexao();

    StringBuilder sqlString = new StringBuilder();

    if (pagina.Id > 0)
    {
    sqlString.AppendLine(“update paginas set”);
    sqlString.AppendLine(“titulo_pagina = ‘” + pagina.Titulo.Replace(“‘”, “””) + “‘,”);
    sqlString.AppendLine(“texto_pagina = ‘” + pagina.Texto.Replace(“‘”, “””) + “‘,”);
    sqlString.AppendLine(“ativo_pagina = ” + (pagina.Ativo ? 1 : 0) + ” “);
    sqlString.AppendLine(“where id_pagina = ” + pagina.Id + “”);
    }
    else
    {
    sqlString.AppendLine(“insert into paginas(titulo_pagina, texto_pagina, datacriacao_pagina, ativo_pagina)”);
    sqlString.AppendLine(“values(‘” + pagina.Titulo.Replace(“‘”, “””) + “‘, ‘” + pagina.Texto.Replace(“‘”, “””) + “‘, GETDATE(), ” + (pagina.Ativo ? 1 : 0) + “)”);
    }

    int i = connection.ExecutaComando(sqlString.ToString());
    salvou = i > 0;

    connection.FechaConexao();
    }

    return salvou;
    }

    public bool SalvaPagina(int Id, string Titulo, string Texto, DateTime DataCriacao, bool Ativo)
    {
    return SalvaPagina(new Entities.Paginas(Id, Titulo, Texto, DataCriacao, Ativo));
    }

    public bool ExcluiPagina(Entities.Paginas pagina)
    {
    bool salvou = false;

    if (pagina != null && pagina.Id > 0)
    {
    Data.Connection connection = new Data.Connection(this.ConnectionString);
    connection.AbrirConexao();

    StringBuilder sqlString = new StringBuilder();
    sqlString.AppendLine(“delete from paginas”);
    sqlString.AppendLine(“where id_pagina = ” + pagina.Id + “”);

    int i = connection.ExecutaComando(sqlString.ToString());

    connection.FechaConexao();
    }

    return salvou;
    }

    public bool ExcluiPagina(int Id)
    {
    return ExcluiPagina(new Entities.Paginas(Id));
    }
    }
    }

  48. Manoel, analisei o código e seu print. Baixei o projeto do artigo para analisar. O que pode estar ocorrendo é algum problema com a referencia da dll. Sugiro que remova e adicione novamente.
    Print da referencia da dll WebSiteBusiness

  49. Leonardo disse:

    Dúvida: a ideia de carregar “páginas e o conteúdo pelo sql server é muito legal ,mas o conteúdo ficaria limitado …como posso ativar e desativar as páginas (seguindo essa ideia) mas carregar paginas (aqrquivos aspx)??

    eu gostaria de ter varias páginas e chama-las … mas manter essa ideia de ativar e desativar no bd.

  50. Olá Leonardo
    Nesse caso a ideia então é ter cadastrado no banco a URL do webforms e você ativa e desativa. Porem, criei uma MasterPage para esses webforms que verifique se esse está desativado para não deixar acessar, ou seja, redireciona o usuário para não deixar acessar a pagina que esta desativada. Dependendo exibir uma mensagem de acesso negado.

Deixe uma resposta