Pesquisar no Programero

segunda-feira, 30 de março de 2009

Como pegar valor de coluna invisível do GridView

Em determinado momento nos deparamos com a seguinte situação, nossa tabela do banco de dados possui como campo chave, um ID por exemplo, incrementado por uma rotina da aplicação, do banco ou algum outro mecanismo de incremento (sequences, increment, etc), logo não há porque mostrar essa coluna para o usuário porque o mesmo não sabe de sua existência, e seu valor não tem qualquer relevância para ele, sendo assim o mais lógico a se fazer é não mostra-lá na aplicação.
Seu valor é necessário já que por se tratar de uma chave primária precisaremos dela para atualizar, inserir ou excluir os dados, então o que fazer?
A resposta seria simples, deixemos ele invisível, buscaremos seu valor e o usuário não perceberá, porém a partir da versão 2005 do visual Studio as colunas setadas com "visible = false" não são renderizadas, com isso ao se tentar acessar seu valor o que recebemos é nada.
Para contornarmos essa situação podemos codificar o seguinte:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        #region "Deixa invisível a coluna"
        switch (e.Row.RowType)
        {
            case DataControlRowType.Header:
                e.Row.Cells[0].Visible = false;              
                break;
            case DataControlRowType.DataRow:
                e.Row.Cells[0].Visible = false;               
                break;
            case DataControlRowType.Footer:
                e.Row.Cells[0].Visible = false;               
                break;
        }
        #endregion
    }
Com isso nossa coluna não irá aparecer no GridView e conseguiremos acessar seu valor.

sábado, 28 de março de 2009

Já usou seu pen drive hoje?

Ainda me lembro bem quando comprei meu primeiro pen drive (um zoltrix que ainda funciona muito bem obrigado), quase ninguém sabia o que era, o preço não era tão alto mas nada comparado a bagatela que se paga hoje, o tamanho então 256mb. Na época, e ainda hoje porque não, quebrava um galhão, principalmente porque na ocasião eu trabalha com suporte e carregar arquivos em cds nem sempre era viável por não haver drives de cdrom em certos clientes, o que tinha de monte eram drives de disquete e carregar os benditos era triste, porque eram necessárias várias cópias de segurança pois era só olhar torto para o disquete e ele já perdia os dados.
Hoje a velocidade de acesso aos dados e o tamanho impressionam, e como todo mundo tem ou pretende ter um eu resolvi colocar aqui alguns aplicativos que podem ser úteis:

  • FireFox Portable: O melhor navegador (na minha humilde opinião);

  • OpenOffice.org Portable: Os populares programas de escritório Open, agora em qualquer lugar;

  • Gimp Portable: Esse dispensa apresentações, eu só uso ele, edite suas imagens com o que há de melhor OpenSource;

  • InfraRecorder Portable: Queime seus cds ou dvds pelo pen drive;

  • 7-Zip Portable: Cansado de chegar num pc e não conseguir descompactar um arquivo por ele não ter esse ou aquele descompactador, então leve esse programa consigo;

  • KeePass Password Safe Portable: Se você é daqueles que tem uma senha diferente para cada um de seus 42 e-mails, e por algum motivo acaba os esquecendo seus problemas terminaram;

  • KompoZer Portable & Nvu Portable: Quer editar seus layouts onde quer que esteja, leve esses caras com você;

  • Sumatra PDF Portable: Os mocorongos da TI da sua facul não instalaram adobe reader nos pcs da laboratório? Então leia seus pdfs direto do pen drive;

  • Portable Ubuntu: Leve com você essa ótima distro linux para todo lugar;
Bom esses são alguns dos programas que achei interessante, porém existem vários outros de boa qualidade por ai, todos os listados acima (com exceção do Ubuntu) foram tirados do PortableApps.com, visitem e dêem uma olhada, com certeza encontrarão algo interessante.

quinta-feira, 26 de março de 2009

ASP .NET Repeater

Com o Repeater é possível definir modelos (Templates) para as páginas tornando mais fácil a criação de layouts com interação a bases de dados, vamos a algumas definições:

  • ItemTemplate: Utilizado por elementos que devem ser construídos a cada registro de uma consulta;

  • AlternatingItemTemplate: Usado para alternância de registros, como diferencial para cores de fundo por exemplo;

  • HeaderTemplate: Usado por elementos que devem ser construídos antes dos ItemTemplate;

  • FooterTemplate: Parecido com o HeaderTemplate, mas como deu para perceber é usado depois do ItemTemplate;

  • SeparatorTemplate: São separadores utilizados entre os elementos, como quebras de linha;
Segue agora um pequeno exemplo de uso:

  • Trecho do Web Form que contém o Repeater:
....
<asp:Repeater ID="catlist" runat="server">
<HeaderTemplate>
<tr>  
<td class="imgspace">
<img src="Images/areas.
jpg" width="91" height="28" class="bigtext">  
</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>  
<td>  
<div align=center>
<asp:HyperLink class="text"  
NavigateUrl="<%# "mainframeset.aspx?CatType=" +  
DataBinder.Eval(Container.DataItem,"Sub_Category_ID")%>"
Text="<%#DataBinder.Eval(Container.DataItem, "Sub_Category_Text")%>"  
runat="server" target="mainFrame" ID="Hyperlink1" NAME="Hyperlink1"/>
<br></div>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
<tr>
<td>
</td>
</tr>
</FooterTemplate>
</asp:Repeater>  
....
O Repeater chama-se “catlist”, se utiliza de um HeaderTemplate que irá apresentar uma imagem, logo em seguida o ItemTemplate para mostrar HyperLinks (baseados nos dados da base de dados) e o FooterTemplate apenas para a consistência do modelo.

  • Agora o CodeBehind da recuperação dos dados:
private void Page_Load(object sender, System.EventArgs e)  
{  
SqlConnection conDotNet = new SqlConnection  
"Server=xxxxxxx;UID=xxxx;PWD=xxxxx;Database=DotNetGenius");  
string sSQL = "Select sub_category_id, sub_category_text  
from Sub_Category";
SqlCommand cmd = new SqlCommand(sSQL, conDotNet);  
conDotNet.Open();  
SqlDataReader dtrCat = cmd.ExecuteReader();  
catlist.DataSource = dtrCat;  
catlist.DataBind();  
}
Bom deu para perceber o que irá acontecer, onde temos “DataBinder.Eval” será utilizado o valor retornado pela coluna presente.
Com o repeater podemos customizar páginas, construir menus personalizados, apresentações de imagens enfim, ele nos possibilita uma infinidade de situações que vão depender só da criatividade do desenvolvedor.

Fonte:

quarta-feira, 25 de março de 2009

O que fazer com televisores (monitores) velhos ?

Essa é uma boa pergunta, eu mesmo ando me perguntando isso, meu monitor de 17 na época em que comprei era o top, e recentemente ele queimou, jogar ele fora me passou pela cabeça diversas vezes mas no final das contas eu o levei para concertar (afinal de contas foram tantos códigos escritos e tantos jogos jogados), não ficou caro mas ele não voltou como antes.
Como os monitores LCD (assim como toda peça de computador) tem saído quase a preço de “pinga” ando me segurando para não gastar com algo que no final das contas eu não preciso de fato (já que meu desktop é usado raramente).
Bom, como de certo modo essa era uma questão da qual eu me perguntava achei bem pertinente essa reportagem do Bom dia Brasil, assistam e caso precisem se desfazer de seus “trambolhos” coloquem a mão na consciência.

terça-feira, 24 de março de 2009

Aplicativo do servidor não disponível .NET

Recentemente ao realizar um teste com publicação de minha aplicação me deparei com o erro:

Aplicativo do servidor não disponível

O aplicativo da Web que você está tentando acessar neste servidor Web não está disponível no momento.  Clique no botão "Atualizar" no navegador da Web para repetir a solicitação.
Observação do administrador: Uma mensagem de erro detalhando a causa da falha de solicitação específica pode ser encontrada no log de eventos de aplicativo do servidor Web. Examine essa entrada de log para saber o que ocasionou o erro.
Bom depois de uma procura percebi que o tal erro é comum, já que encontrei várias entradas em fóruns a respeito, confesso que boa parte das soluções sugeridas não funcionaram para mim, porém uma delas resolveu meu problema, então vamos ao passos:

  • Motivo: Como mencionado pela pessoa que deu a dica, eu de fato havia instalado o Visual Studio antes da instalação do IIS, o que gerou um mapeamento falho (se é que esse ocorreu);

  • Solução: Rodar o ASP.NET IIS Registration Tool, execute o command, encontre a pasta onde se encontra a ferramenta e digite \aspnet_regiis.exe" –i (no meu caso ele estava em : C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727)
Caso o restante das configurações estejam nos conformes tudo deve correr bem.

segunda-feira, 23 de março de 2009

O crescimento do twitter

 1806347785 Como não era de se estranhar o twitter vem ganhando cada vez mais adeptos, chegando a um aumento de 58% em fevereiro (esse que voz escreve ajudou nesse número), com isso nos deparamos com os mesmos problemas que todo serviço desse tipo enfrenta, como os spams, no caso do twitter até eu que possuo um canal sem muita expressão já sou vítima, de repente passamos a receber mensagens sem nexo de pessoas desconhecidas.
Entre esse e outros motivos (veja aqui como será o twitter no futuro) já corre por parte dos usuários (principalmente os veteranos) um certo descontentamento com a divulgação em massa (haja visto que até capa da Época ele foi), pois teme-se que aconteça com o twitter o mesmo que aconteceu com o Orkut, incontáveis spams, comunidades inúteis e sem sentido, entre outros.
O fato é que esse crescimento era inevitável, e caso continue será difícil encontrar conteúdo que valha a pena. Eu particularmente estou gostando muito do serviço (porém não o tenho utilizado como gostaria) e pretendo continuar utilizando cada vez com mais freqüência, pelo menos até me deparar com as primeiras contas de animais de estimação de algum desocupado.

quinta-feira, 19 de março de 2009

Menu fácil é com o skmMenu

Programar para web nos traz alguns infortunios como a limitação de componentes (ou do controle de eventos sobre os mesmos), logo o layout acaba se tornando algo demorado (principalmente se você assim como eu está acostumado com desenvolvimento desktop).
Por isso um de meus achados recentes é o skmMenu, ele torna mais fácil a construção de menus no asp, tudo o que você tem a fazer é incorporar a dll (download aqui) do componente ao projeto, colocar o objeto em algum lugar da página e pronto (guia de instalação).
Ele oferece (até onde eu pude ver)  três maneiras de se inserir dados no menu, a primeira delas (usada em exemplos do site) é o xml, você estrutura o arquivo, associa ele ao DataSource do menu e executa um DataBind, pronto tá lá seu menu, bom acredito que a menos que você vá trabalhar com um menu estático essa maneira não é a melhor.
Como vocês puderam perceber eu falei em DataSource e DataBind, sim é possível ligar o menu a uma consulta ao banco de dados (estruture tudo no bom e velho sql). Por último existe um modo onde você manipula os “nós” do menu adicionando e removendo da mesma maneira como se faz em uma TreeView, excelente para casos onde um sql único não resolve o problema, estruture suas consultas, a adiciona os “nós” dentro dos “loops”.
Eu gostaria ainda de destacar as “roles”, com elas é possivel estabelecer regras de acesso ao menu, no site tem um exemplo bem simples de uso aproveitem para conhecer, pode ser útil, bom é isso, aproveitem o componente e vamos aos códigos….
um abraço e até a próxima…

domingo, 15 de março de 2009

Nem só de anuncios viverá o google…

216_profile_img1_googleapp
Pois é o Google possui um produto chamado de Google Search Appliance, que realiza a indexação de documentos podendo ser integrado a uma intranet, um sistema administrador de documentos, bancos de dados ou a um site. Na verdade é hardware Dell com o motor de busca do Google, responsável por analisar o conteúdo e criar os índices para as buscas.
A imagem acima é do GB-1001, pode indexar de 500.000 a 3 milhões de documentos. O GB-7007 (substituto do GB-5005) é idêntico ao último sua capacidade varia de 5 a 10 milhões de documentos. Existe ainda o GB-8008 que chega a 30 milhões de documentos.

sexta-feira, 13 de março de 2009

GridView com caching

Olá a todos, o GridView é um componente poderoso para mostrarmos informações recuperadas de uma tabela do banco de dados, onde cada coluna pode representar uma coluna real da tabela, mostrar imagens, caixas de seleção, botões, enfim da para fazer várias coisas com o danado.
Bom, logo que comecei a trabalhar com ele verifiquei que mostrar muita informação de uma única vez fazia com que o GridView ficasse muito grande (levando em consideração que ele ficará em uma página da web não é algo agradável), puro amadorismo meu pois ele possui uma série de opções de configuração que vai desde escolher de forma simples as cores do efeito “zebrado”, ordenação e paginação, esta última resolve de uma forma muito satisfatória o problema levantado acima.
Tudo jóia até então, deixando de lado alguns pequenos problemas algo que realmente me deixou atento foi a necessidade de refazer e mesma consulta ao banco várias vezes, considerando o ambiente de nossa aplicação seria algo nada recomendável, logo comecei a procurar uma solução, que entre diversos artigos (boa parte bem extensos) encontrei um post de um blog indiano bem simples e que resolveu meu problema. É uma maneira simples de se guardar um objeto (no caso um DataSet, mas pode ser outro qualquer como um DataTable) em cache, segue o código de nosso amigo Zubair Alam Qureshi:
using System;
using System.Data;
using System.Web.Caching;
/* Please remember to import SqlClient namespace */
using System.Data.SqlClient;
public partial class GridView_Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
/* Check whether the page is post back or not */
if (!Page.IsPostBack)
{
BindData();
}
}
private void BindData()
{
if (Cache["Cache"] == null)
{
SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=DataDirectorymysql.mdf;Integrated Security=True;User Instance=True");
SqlDataAdapter ad = new SqlDataAdapter("select * from sqltest", con);
DataSet ds = new DataSet();
ad.Fill(ds);
Cache.Insert("Cache", ds, null , DateTime.Now.AddMinutes(2), TimeSpan.Zero);
GridView1.DataSource = ds;
}
else
GridView1.DataSource = (DataSet)Cache["Cache"];
GridView1.DataBind();
}
}
Já deu para perceber que temos apenas o Code-Behind aqui, os detalhes da página fica por conta de quem for testar, mas está bem claro como as coisas funcionam. Não sei se essa é melhor maneira de se resolver essa questão, mas em meus primeiros testes funcionou bem.
Um abraço a todos e até mais…

quarta-feira, 11 de março de 2009

Um pouco sobre o twitter

twitter_logo_125x29
Acredito ter chegado meio tarde até esta nova forma de comunicação, mas antes tarde do que nunca, realizei meu cadastro e comecei a testar, mandei algumas mensagens para conferir como o serviço se comportava, dei uma olhada no que as outras pessoas estavam falando e minha impressão no final das contas foi muito boa, gostei de uma maneira geral do comportamento.
De certo modo me senti impelido a falar algo sobre ele, mesmo que sejam algumas miseras linhas mostrando alguma coisa que estou utilizando junto com ele, então vamos lá:

  • TwitterFox: Fantástico, para que usa o firefox e quer ler e escrever com ele fica simples (não que ir até a página do twitter não o seja) ele fica no canto direito interior depois de instalado, é só clicar e uma nova janela aparece (nela é possível ver as mensagens recentes, as respostas e também enviar novas mensagens);

  • TinyURL: Bom, para quem já se deu o trabalho de criar a conta e escrever uma mensagem já percebeu que o número de caracteres é limitado (140), então caso a sua intenção seja colocar uma URL a coisa pode ficar apertada, a solução é usar o TinyURL, você acessa o site coloca a URL na caixa de texto e clica no botão, pronto, é gerado um endereço bem menor e pronto para colocar no twitter;

  • Twitter badge for Blogger: Bom para você que usa blogger e quer mostrar suas últimas twitadas;

  • Plugin Twittada: Esse é nacional, não experimentei mas pelo o que andei lendo por ai é muito bom;
Bom é isso ai, se alguém tiver algo a adicionar (ou corrigir) é só postar, e a propósito me adicionem no twitter…
 
abraços e até a próxima…

segunda-feira, 9 de março de 2009

Menu horizontal com CSS (Tableless)

Olá a todos,
Todos os amadores na construção de sites (como eu) um dia já se perguntaram “como é que esse cara fez esse menu jóia” pois é, meu layout antigo (o maldito que bugou) já possuia um, mas nada como uma catástrofe em nossas vidas para tirarmos algumas lições (como a de criar um menu).
Então vamos lá, para quem hospeda seu site em algum lugar eu recomendo o uso de alguma ferramenta para a criação, existem vários, como diria um amigo meu “se você chutar uma árvore cai um monte”, seguem alguns links:
Bom não vou me aprofundar nessas ferramentas, é só digitar no google que certamente vocês irão encontrar outras, mesmo porque se você leu o artigo até aqui quer mais é ver como fazer o tal menu. Vocês vão perceber que o exemplo abaixo é identico ao menu usado por mim (gostei tanto que quase não mexi), eu não o inventei, achei aqui, no site do TABLELESS, vamos ao código:
 
Estrutura:
Primeiramente faça um div e atribua uma ID para este div, neste exemplo nosso div se chamará “menu”. Dentro deste div, faça uma lista, esta lista deve conter as opções de seu menu:
<div id=”menu”>
<ul>
<li><a href=”">Primeiro</a></li>
<li><a href=”">Segundo</a></li>
<li><a href=”">Terceiro</a></li>
<li><a href=”">Quarto</a></li>
<li><a href=”">Quinto</a></li>
</ul>
</div>
Começando a formatação:
Agora que já fizemos a estrutura do menu, vamos formatá-lo com css.
Primeiro, para podermos trabalhar melhor, vamos tirar o margin (margin:0px;\), o padding (padding:0px;\) e os Bullets das opções (list-style:none;) da tag UL. Queremos que o UL seja uma barra de navegação certo? Então vamos fazer ele flutuar à esquerda (float:left), depois damos a ele a largura de 100% (width:100%;\), isso fará com que ele vire uma bloco. Veja o código css atribuído à tag UL:
#menu ul {
padding:0px;
margin:0px;
float: left;
width: 100%;
background-color:#EDEDED;
list-style:none;
}
Terceiro:
Nosso menu ainda não está horizontal… agora é hora de resolver isso.
Para o nosso menu ficar horizontal, temos que fazer as suas opções ficarem uma ao lado da outra… para isso, basta atribuir um display:inline; para a tag LI… Isso fará todas as opções ficarem em uma linha horizontal:
#menu ul li { display: inline; }
Deixando o menu na horizontal:
Ótimo. Estamos quase acabando nosso menu horizontal, agora falta pouco.
Precisamos apenas formatar os links do menu para que eles não fiquem tão próximos um do outro. No css, faça que todos os links que estão dentro da tag LI (#menu ul li a) flutuem à esquerda (float:left;\), isso é necessário para que os links se transformem em bloco. Agora, dê um espaço entre a borda do menu e o texto, para isso use o padding (padding: 2px 10px;\).
Você pode aproveitar para definir o “visual” que deverá ter o link: cor de fundo, letra, etc…
Veja o código css que escrevemos neste passo.
#menu ul li a {
padding: 2px 10px;
float:left;
/* visual do link */
background-color:#EDEDED;
color: #333;
text-decoration: none;
border-bottom:3px solid #EDEDED;
}
Vamos ver no que deu!
Para finalizar, vamos apenas definir o que deverá acontecer com o link quando o usuário passar o mouse. Este passo dispensa explicações.
#menu ul li a:hover {
background-color:#D6D6D6;
color: #6D6D6D;
border-bottom:3px solid #EA0000;
}
*O código de exemplo é o mesmo do site.

domingo, 8 de março de 2009

Login com segurança baseada em formulários .NET

Olá a todos, esse é o nosso primeiro artigo relacionado ao .NET e confesso que ainda tenho muito a aprender. Como em todo novo processo de aprendizagem realizamos novas descobertas e agora irei compartilhar aqui uma de minhas primeiras.
Quando iniciei meus estudos comecei com a tela inicial de todo sistema (ou quase todos) a tela de login, onde o usuário ganha acesso ao restante das aplicações. Procurando pela net encontrei esse ótimo tutorial do Macoratti, simples e direto que me ajudou muito a construir a minha própria tela de login.
Segue abaixo o tutorial na integra, sem alterações, peço que todos que se utilizarem dele dêem um pulo no site para prestigiá-lo.
ASP.NET - Usando segurança baseada em formulários (por José Carlos Macoratti)
O ASP.NET realiza muitas tarefas que antes , usando ASP, ficavam por conta do programador. O Controle de Login com ASP.NET ficou muito simples de ser realizado.
Vamos então mostrar como ficou o processo de proteger páginas dinâmicas com ASP.NET. Ele não faz tudo sozinho (ainda) temos que fazer algumas configurações e criar algumas páginas mas se você já precisou fazer esta tarefa em ASP vai concordar que agora é mais fácil.
Vou desenhar o cenário onde iremos trabalhar:
Suponha que você tenha uma aplicação Web e que vai precisar proteger algumas páginas da sua aplicação do acesso anônimo. Para tornar o processo compreensível e não poluir o código vou trabalhar com duas páginas:
- Login.aspx - página que irá realizar o login do usuário.
- Login-protegido.aspx - página que desejamos proteger do acesso anônimo. Somente usuários autenticados terão acesso a esta página.
Estas duas páginas estarão no mesmo diretório da aplicação web ; o diretório Login2. Vamos criar então um diretório de trabalho da nossa aplicação web subordinado a inetpub\wwwroot com a seguinte estrutura :

Até agora eu não falei nele mas você notou que na pasta login2 da nossa aplicação existe um arquivo com o nome de web. Pois ele é o personagem principal do nosso artigo. Vamos então falar mais sobre ele.
O arquivo web.config é um arquivo no formato XML que possui informações sobre todo o projeto Web. O elemento-raiz de um Web.config é a tag <configuration> . A princípio o arquivo Web.config não é um arquivo exigido para que a aplicação funcione. Se não houver necessidade de nenhuma configuração especial o arquivo nem precisa existir. Se ele não existir será usado um arquivo chamado Machine.config padrão que possui configurações padrões definidas.
Abaixo temos as configurações possíveis para serem usadas no arquivo Web.config :
Seção
Descrição
<appSettings>
Utilizada para armazenar suas próprias configurações personalizadas de Aplicativo.
<authentication>
Configura como o ASP.NET autentica seus usuários.
<authorization>
Configura a autorização de recursos no ASP.NET.
<browsercaps>
Responsável por controlar as configurações do componente de capacidades do navegador.
<compilation>
Responsável por todas as configurações de compilação.
<customErrors>
Indica como exibir erros no navegador.
<globalization>
Responsável por configurar as opções de globalização.
<httpHandlers>
Responsável pelo mapeamento de URLs de entrada em classes IHttpHandler.
<httpModules>
Responsável por configurar Módulos de HTTP dentro de um aplicativo.
<identity>
Controla como o ASP.NET acessa seus recursos.
<location>
Controla como as configurações se aplicam a um diretório.
<pages>
Controla configurações de páginas.
<processModel>
Configura as configurações de modelo de processo do ASP.NET em Sistemas de Servidor da Web do IIS.
<sessionState>
Configura o Estado de Sessão.
<trace>
Configura o Trace (Rastreamento).
<webServices>
Controla as configurações dos Serviços da Web.
Podemos colocar o arquivo Web.config em qualquer diretório da aplicação Web , mas como geralmente ele contém configurações a nível de site que devem ser válidas a partir do diretório onde ele se encontra e nos demais subdiretórios ele é colocado no diretório raiz da aplicação web.
Nota: Se você receber o erro :
Parser Error Message: It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS. 
ao acessar a aplicação veja como corrigir o problema acessando o site : IIS Insider
Provavelmente seu diretório virtual não foi configurado como uma aplicação no IIS e por isto não esta sendo reconhecido.
Vamos usar então o arquivo Web.config para informar ao ASP.NET que desejamos realizar a autenticação baseada em formulários e quais as páginas que desejamos proteger. Vamos então fornecer as seguintes informações ao Web.config:
- Que desejamos realizar a autenticação baseada em formulários
- Qual a página que desejamos proteger
- Qual será a nossa página de Login
- Quais usuários poderão acessar as páginas.
Se você não nem idéia de como criar um arquivo Web.Config você pode criar uma aplicação ASP.NET no Visual Studio.NET que ele será criado com as configurações padrões. Se você abrir o arquivo Web.config criado assim verá muitas tags por isto eu já vou mostrar a abaixo a estrutura do arquivo Web.Config que estarei usando na aplicação:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>


<!-- habilita a autenticacao -->
<system.web>
  <authentication mode="Forms">
<forms name="Exemplo" loginUrl="login.aspx" />
</authentication>
 </system.web>


<!-- define a pagina protegida para rejeitar usuarios anonimos -->
 <location path="login-protegido.aspx">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
</configuration>


Destacamos o código em cores para facilitar a visualização. Funciona assim:


1- Elemento authentication : Habilitando a autenticação e definindo a página de login


<authentication mode="Forms">

<forms name="Exemplo" loginUrl="login.aspx" />


</authentication>



Na tag <authentication> indicamos o modo Forms que implementa a segurança baseada em formulários.(Existem outros modos)


A seguir  no atributo LoginUrl especificamos qual será a nossa página de Login: login.aspx


2- Elemento authorization : Definindo quem terá acesso a página protegida e a página protegida.


<location path="login-protegido.aspx">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>



<location path="login-protegido.aspx"> define a página que desejamos proteger

<deny users="?" /> -A ? usada no elemento Deny indica que será negado o acesso a usuário não logado ou seja não autenticado.


Vamos agora ao código da página login.aspx :(O destaque em cores diferentes do código HTML e do script VB.NET)


<%@ Page Language="VB" %>
<script runat="server">


Sub btnLogin_OnClick(Src As Object, E As EventArgs)

if txtUsuario.Text = "Macoratti" And txtSenha.Text = "123456"
FormsAuthentication.RedirectFromLoginPage(txtUsuario.Text, True)
        Else
lblInvalido.Text = "Senha/Usuário inválidos... tente novamente..."
End If

End Sub


</script>


<html>
<head>
<title>ASP.NET - Exemplo de Login</title>
</head>
<body>
<h2>Login 
</h2>
<p>
<em>Dica: Usuario = "Macoratti"&nbsp; e&nbsp; Senha =&nbsp;"123456" </em>
</p>
<form runat="Server">
<p>
Usuário: 
<asp:TextBox id="txtUsuario" runat="server" Width="138px"></asp:TextBox>
<br />
Senha&nbsp;&nbsp; : 
<asp:TextBox id="txtSenha" runat="server" Width="137px" TextMode="Password"></asp:TextBox>
<br />
<br />
<asp:Button id="btnLogin" onclick="btnLogin_OnClick" runat="server" text="Login"></asp:Button>
</p>
<p>
A pagina que estamos protegendo é : <a href="login-protegido.aspx">login-protegido.aspx</a>. 
<br />
(Se voce&nbsp;&nbsp;NÃO estiver logado e clicar neste link voltará&nbsp;a esta&nbsp;página.
) 
</p>
<p>
<asp:Label id="lblInvalido" runat="server" font-bold="True" forecolor="Red"></asp:Label>
</p>
</form>
</body>
</html>


O código com destaque na cor amarela é apenas código HTML onde temos dois controles TextBox , um controle Button e uma Label.


No código do script VB.NET na cor cinza a linha mais importante esta destacada :


FormsAuthentication.RedirectFromLoginPage(txtUsuario.Text, True)

Aqui estamos usando a classe FormsAuthenticacion que fornece métodos estáticos (shared) para manipular a autenticação. Esta classe não pode ser herdada.


O método RedirectFromLoginPage redireciona um usuário autenticado de volta a URL original da requisição. Os parâmetros usados no construtor do método usado são :


UserName - Nome do usuário para o cookie de autenticação. Representado aqui por txtUsuario.text.

CookiePersistente - Define se um cookie permanente será criado. Podemos ter dois valores False ou True.


Ao executar o arquivo login.aspx teremos o seguinte :


Se tentarmos acessar a página protegida login-protegido.aspx seremos redirecionados para a página login.aspx


Se o usuário não estiver autenticado quando clicar no botão Login ele retorna a página login.aspx.


Após se autenticar o usuário se autenticar (eu estou usando um usuário fixo no código mas você pode fazer o acesso a um banco de dados para verificar nome e senha) ele terá acesso a página login-protegido.aspx


Abaixo temos as telas que mostram este funcionamento:


Ao tentar a página login-protegido.aspx somos remetidos à página de login : login.aspx





Após fazer a autenticação temos acesso a página protegida : login-protegido.aspx





O código da página login-protegido.aspx é o seguinte :


<%@ Page Language="VB" %>
<script runat="server">


Sub btnLogout_OnClick(Src As Object, E As EventArgs)
FormsAuthentication.SignOut
End Sub


</script>
<html>
<head>
<title>ASP.NET - Exemplo de login</title>
</head>
<body>
<p>
Este é o texto super secreto que somente os visitantes autorizados podem ver : 
</p>
<strong>"Mesmo a mais longa jornada começa com o primeiro passo."</strong> 
<p>
</p>
<form runat="server">
<asp:Button id="btnLogout" onclick="btnLogout_OnClick" runat="server" text="Log Out"></asp:Button>
</form>
<p>
<font color="blue">Nota: Depois de clicar no botão "Log Out" você vai precisar dar um
'Refresh' na página. </font>
</p>
</body>
</html>


O botão Log Out a utiliza aciona o método SignOut da classe FormsAuthenticacion que remove a autenticação realizada.


Para terminar vou deixar aqui o código para uma página de login que utiliza o acesso a um base de dados Access chamada Acesso onde a tabela Usuarios  possui um campo Nome e outro Senha que serão verificados após o usuário preencher o formulário e clicar no botão Login.


<%@ Page Language="VB" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<%@ import Namespace="System.Web.Security" %>


<script runat="server">


Function ValidaUsuario(nome As string, senha As string) As Boolean


Dim strSQL as string = "Select * from Usuarios Where Nome=@Nome AND Senha=@Senha"


Dim MyConn as New OleDbConnection(ConfigurationSettings.AppSettings("strConn"))
Dim objDR as OleDbDataReader
Dim Cmd as New OleDbCommand(strSQL, MyConn)


cmd.Parameters.Add(New OleDbParameter("@Nome", nome))
cmd.Parameters.Add(New OleDbParameter("@Senha", senha))


Try


MyConn.Open()


objDR=Cmd.ExecuteReader(CommandBehavior.CloseConnection)


if objDR.Read() Then


 FormsAuthentication.RedirectFromLoginPage(objDR("Nome"), False )


else
saida.Visible="True"
saida.text="Usuário/Senha Inválido(s) , tente novamente."


End If


Catch ex as Exception
saida.visible="true"
saida.text="Ocorreu um erro durante o Login : " &  "<p>" & ex.Message()
Finally
MyConn.Close()
End Try


End Function


Sub Login(Source as Object, E as EventArgs)
Validausuario(Nome.Text,Senha.Text)
End Sub


</script>
<html>
<head>
</head>
<body>
<h1>Login
</h1>
<hr />
<form runat="server">
<table cellpadding="8">
<tbody>
<tr>
<td>
Usuário :
</td>
<td>
<asp:TextBox id="Nome" RunAt="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>
Senha&nbsp;&nbsp; :
</td>
<td>
<asp:TextBox id="Senha" RunAt="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>
</td>
<td>
<p align="center">
<asp:Button id="Button1" onclick="Login" RunAt="server" Text="Enviar"></asp:Button>
</p>
</td>
</tr>
</tbody>
</table>
</form>
<hr />
<h3><asp:Label id="saida" runat="server" forecolor="Red"></asp:Label>
</h3>
</body>
</html>


Neste código a string de conexão é obtida pela seguinte linha de código :


Dim MyConn as New OleDbConnection(ConfigurationSettings.AppSettings("strConn"))


Mas onde esta a string de conexão ? Esta no arquivo Web.config. Usando a tag <appSettings> podemos definir como abaixo a string de conexão:


<appSettings>
<add key="strConn" value= "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=d:\inetpub\wwwroot\dados\Acesso.mdb" />
</appSettings>     


A tag appSettings pode declarar configurações específicas da aplicação.


Podemos também definir um arquivo de mensagem de erros personalizada usando a tag customErrors :


<customErrors defaultRedirect="\login\erro\erro.aspx" mode="On" />




qualquer erro não tratado irá exibir a mensagem do arquivo erro.aspx .


A propriedade Mode pode possuir três diferentes valores :


  • ON - determina que todos os erros serão direcionados para a página definida
  • OFF - desabilita o tratamento personalizado de erros
  • RemoteOnly - define que os erros , com exceção das páginas ASP.NET , são mostrados nos clientes remotos e que os erros das ASP.NET são exibidos no host local.


Agora vamos testar a aplicação:


1- Clique aqui para tentar acessar a página login-protegido.aspx (se você não estiver autenticado irá para a página de login)


2- Estando na página login.aspx você verá a dica para usuário/senha tente informar algo diferente e verá que é exibida uma mensagem de login inválido


3- Existe um link na página login.aspx para você tentar acessar a página login-protegido.aspx se você clicar no link será remetido de volta para página login.aspx


4- Quando você informa o usuário e senha correta irá para a página de login.aspx . Neste momento a autenticação esta feita e será gravada ; a partir deste ponto você poderá acessar a página protegida diretamente.


5- Para anular a autenticação clique em Log Out e atualize a página. Você irá para a página de login pois não estará mais autenticado e pode começar a brincadeira novamente.





Fonte:


Macoratti.net

sábado, 7 de março de 2009

C#

C# Foi desenvolvido pela Microsoft como parte da plataforma .NET, apesar de existirem outras linguagens no .NET ele é considerado como a linguagem principal pois foi criada do zero para essa plataforma, seu compilador foi o primeiro a ser desenvolvido e a maior parte das classes  do framework .NET foram desenvolvidas em C#.
Ele é orientado a objetos e foi criado com base no C++ e no Java (quem já trabalhou com uma dessas linguagens vai perceber de cara), possui ponteiros, garbage colector, não possui herança múltipla (o que pode ser contornado por meio de interfaces), possui destrutores, sobrecarga de funções e de operadores, permite diversos meios para a criação de novos tipos, enfim, é uma linguagem muito poderosa capaz de agradar a todos.
Essa breve introdução é um rápido resumo do conteúdo encontrado na Wikipédia, logo aqueles que se interessarem e quiserem se aprofundar nos pormenores dêem uma chegada até lá.
Essa será nossa página que agrupará tudo o que for relacionado ao C#, .NET e porque não ASP (a exemplo das outras tecnologias abordadas no site), espero que eu possa de alguma maneira contribuir com todos que utilizem ou que por ventura o venham a fazer, mesmo que por diversão.

  1. Login com segurança baseada em formulários .NET
  2. GridView com caching
  3. Menu fácil é com o skmMenu
  4. Aplicatido do servidor não disponível .NET
  5. ASP .NET Repeater
  6. Como pegar valor de coluna invisível do GridView
  7. Exportar dados do GridView para o Excel
  8. Envio fácil de e-mail ASP .NET C#
  9. Hyperlink com parâmetro no GridView
  10. Ajax ASP .NET
  11. Arquivo de configuração ASP .NET
  12. UpdateProgress ASP .NET (AJAX)
  13. Desabilitar POST do ENTER ASP .NET
  14. Método para conexão com banco de dados (ASP .NET c#)
  15. Montar DataTable (ASP .NET C#)
  16. Inserir, atualizar e apagar dados (ASP .NET C#)
  17. Página ASP para manipular dados
  18. Trabalhando com Strings no C#
  19. Silverlight
  20. Iniciando com o Silverlight: Parte 1 – Ferramentas e o Hello World
  21. Iniciando com o Silverlight: Parte 2 – Definindo o layout e a navegação
  22. Upload de arquivos no Silverlight
  23. Envio de e-mail no Silverlight
  24. Netduino
  25. Netduino + LCD Nokia 5100
  26. Netduino + Arduino Ethernet Shield
  27. Clique direito em Datagrid (Silverlight)  
  28. Realizando upload de grandes arquivos para o IIS / ASP.NET  
  29. Click com botão direito e menu de contexto no Silverlight

terça-feira, 3 de março de 2009

Aos poucos…

Aos poucos estamos retornando ao normal, alguns links já foram inseridos assim como os banners de nossos parceiros, caso eu tenha deixado alguém de fora minhas sinceras desculpas, deixem um comentário que logo adicionamos novamente. Um abraço a todos que mesmo com a “zona” recente continuaram a nos prestigiar, informo que em breve teremos novas matérias relacionadas a asp e c#.