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">
&amp;amp;copy; 2012. Projeto WebSite .NET by <a href="http://raphaelcardoso.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">
&amp;amp;copy; 2012. Projeto WebSite .NET by <a href="http://raphaelcardoso.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!

47 comentários sobre “Desenvolvimento de Website com ASP.NET e SQL Server – Parte 2

    1. 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.

  1. 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.

  2. 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

  3. 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);
    }

  4. 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?

  5. 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.

  6. 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)

  7. 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!!!

  8. 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

  9. 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.

  10. 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

  11. 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.

  12. 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 ?

  13. 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?

  14. 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!

  15. 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!

  16. 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

  17. 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

    1. 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.

  18. 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.

  19. 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:UsersNtz1nnDocumentsVisual Studio 2013WebSitesWebSite3MenuControl.ascx.cs Line: 13

    1. 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?

  20. 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.

    1. 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.

      1. 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.

  21. 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));
    }
    }
    }

  22. 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.

    1. 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.

Os comentários estão fechados.