<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-5539727321772853208</atom:id><lastBuildDate>Wed, 17 Feb 2010 15:22:26 +0000</lastBuildDate><title>Visões sobre o ASP.NET e o MS-SQL</title><description>neste blog veremos alguns textos sobre estas tecnologias, e outras mais que circulam o mundo do desenvolvimento WEB - Por Carlos Gressler Filho</description><link>http://www.carlosprogramador.net/</link><managingEditor>cacotx@gmail.com (Carlos Gressler Filho)</managingEditor><generator>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/carlosprogramador" /><feedburner:info uri="carlosprogramador" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539727321772853208.post-3181481273982304867</guid><pubDate>Mon, 31 Aug 2009 18:25:00 +0000</pubDate><atom:updated>2009-08-31T11:36:17.455-07:00</atom:updated><title>Session Transfer</title><description>Bom Galera,&lt;br /&gt;
Um tempo atrás tive de desenvolver uma aplicação&amp;nbsp;híbrida, que integrava o velho ASP com .NET2.0, porém como todos sabem, estas tecnologias não compartilham as sessions, e então? como fazer o .net ler as sessions do asp?&lt;br /&gt;
Pra resolver isto tive de apelar para uma metodologia que usa banco de dados, vou explicar tudo, passo-a-passo logo, mas antes irei apresentar algumas características deste projeto para que vocês entendam as limitações que a solução deveria respeitar.1º. O projeto se trata de um sistema modular feito em ASP.&lt;br /&gt;
2º. Os módulos novos deveriam, mandatoriamente, sem feitos em .net VB 2.0&lt;br /&gt;
3º. O banco deve seguir a arquitetura posta no projeto inicial, que é MS-SQL 2000&lt;br /&gt;
Depois destas noticias desanimadoras, vamo à solução.&lt;br /&gt;
Devo criar uma tabela no banco de dados com a seguinte modelagem:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_viSF9GGLauM/SpwSTgpzGlI/AAAAAAAAAEk/CGI21wf7A8o/s1600-h/bd.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_viSF9GGLauM/SpwSTgpzGlI/AAAAAAAAAEk/CGI21wf7A8o/s320/bd.JPG" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;O Script para a criação da tabela é:&lt;br /&gt;
&lt;span style="font-size: 13px;"&gt;CREATE TABLE [dbo].[SessionTransfer] (&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #eeeeee;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #eeeeee;"&gt;&lt;span style="font-size: x-small;"&gt;[IdSecao] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #eeeeee;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #eeeeee;"&gt;&lt;span style="font-size: x-small;"&gt;[Chave] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #eeeeee;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #eeeeee;"&gt;&lt;span style="font-size: x-small;"&gt;[Valor] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #eeeeee;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #eeeeee;"&gt;&lt;span style="font-size: x-small;"&gt;[Data] [datetime] NOT NULL&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #eeeeee;"&gt;&lt;span style="font-size: x-small;"&gt;) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #eeeeee;"&gt;&lt;span style="font-size: x-small;"&gt;GO&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: 13px;"&gt;ALTER TABLE [dbo].[SessionTransfer] ADD&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #eeeeee;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #eeeeee;"&gt;&lt;span style="font-size: x-small;"&gt;CONSTRAINT [DF_SessionTransfer_Data] DEFAULT (getdate()) FOR [Data]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #eeeeee;"&gt;&lt;span style="font-size: x-small;"&gt;GO&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
Vamos para os codigos em ASP e .NET:&lt;br /&gt;
Após o sistema principal em ASP fazer a criação das sessions que o projeto precisa, tais como permissões de acesso, regras de hierarquia, etc, eu chamo o arquivo "sessiontransfer.asp".&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;ATENÇÃO:&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: red;"&gt;O código demonstrados neste post são apenas didáticos e não devem ser utilizados da forma como são apresentados, pois possuem diversas falhas de segurança como SQL-Injection por exemplo. Caso você queira utilizá-lo, apenas baseie sua lógica neste exemplo, mas construa um código seguindo as condutas de boas práticas.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;lt; ! - - #include file="../_include/_abreconexao.asp" &amp;nbsp;- - &amp;nbsp;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;lt; %&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;For i = 1 to (Session.Contents.Count -1)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;strSql = "INSERT INTO SessionTransfer (IdSecao, Chave, Valor) VALUES ('" &amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;strSql = strSql &amp;amp; Session.SessionID &amp;amp; "', '" &amp;amp; Session.Contents.Key(i) &amp;amp; "', '" &amp;amp; Session.Contents.Item(i) &amp;amp; "')"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;DBCon.Execute (strSql)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Next&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Response.Redirect("SessionTransfer.aspx?IdSecao=" &amp;amp; Session.SessionID)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;% &amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Como vocês percebem, este código varre todas as chaves de sessions da aplicação e as envia para o banco. Após este processo ele redireciona para o arquivo em .NET "SessionTransfer.aspx", com a devida parametrização de identificação da Session.&lt;br /&gt;
Segue o código do&amp;nbsp;"SessionTransfer.aspx":&lt;br /&gt;
&lt;span style="font-size: 10px;"&gt;Imports System&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Imports System.Data&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Imports System.Data.SqlClient&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Imports System.Configuration&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Imports System.Collections&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Imports System.Web&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Imports System.Web.Security&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Imports System.Web.UI&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Imports System.Web.UI.WebControls&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Imports System.Web.UI.WebControls.WebParts&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Imports System.Web.UI.HtmlControls&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Partial Public Class SessionTransfer&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Inherits System.Web.UI.Page&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Dim objConn As SqlConnection = New SqlConnection(SqlHelper.m_strConn)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Dim objCmd As SqlCommand = New SqlCommand()&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Dim objAdap As SqlDataAdapter = New SqlDataAdapter()&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Dim objDataSet As DataSet = New DataSet()&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Dim strIdSecao As String = Request.QueryString("IdSecao").ToString()&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Dim i As Integer = 0&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;objConn.Open()&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;objCmd.CommandTimeout = 300&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;objCmd.CommandType = CommandType.Text&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;objCmd.Connection = objConn&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;objCmd.CommandText = "SELECT Chave, Valor FROM SessionTransfer WHERE IdSecao = '" + strIdSecao + "'"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;objAdap.SelectCommand = objCmd&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;objAdap.Fill(objDataSet)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;For i = 0 To objDataSet.Tables(0).Rows.Count - 1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;If (Session(objDataSet.Tables(0).Rows(i)("Chave").ToString()) &amp;lt;&amp;gt; Nothing) Then&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Session.Remove(objDataSet.Tables(0).Rows(i)("Chave").ToString())&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;End If&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Session.Add(objDataSet.Tables(0).Rows(i)("Chave").ToString(), objDataSet.Tables(0).Rows(i)("Valor").ToString())&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Response.Write(objDataSet.Tables(0).Rows(i)("Chave").ToString())&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Response.Write(objDataSet.Tables(0).Rows(i)("Valor").ToString())&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;Next&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;objCmd.CommandText = "DELETE FROM SessionTransfer WHERE IdSecao = " + strIdSecao&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;objCmd.ExecuteNonQuery()&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;objCmd.CommandText = "DELETE FROM SessionTransfer WHERE DATEDIFF(hh, Data, GETDATE()) &amp;gt;= 1"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;objCmd.ExecuteNonQuery()&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;End Sub&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: #f3f3f3;"&gt;&lt;span style="font-size: x-small;"&gt;End Class&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Neste arquivo eu recupero os valores baseado na SessionID passada por parâmetro, crio as Sessions para o .NET e após eu deleto do banco todas as chaves da session que busquei.&lt;br /&gt;
Notem que também faço uma segunda exclusão procurando por sessions cadastradas com mais de 1 dia.&lt;br /&gt;
&lt;br /&gt;
Para exemplo isso serve, mas lembrem-se de que isso é só um exemplo!!! muito cuidado ao usarem querys SQL que são concatenadas com parâmetros query-string! Ainda mais sem tratamento como o do exemplo.&lt;br /&gt;
Na realidade, meu conselho é: Nunca façam isso! =D&amp;nbsp;Mas para didática isso já ajuda banstante.&lt;br /&gt;
&lt;br /&gt;
abraços!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5539727321772853208-3181481273982304867?l=www.carlosprogramador.net' alt='' /&gt;&lt;/div&gt;</description><link>http://www.carlosprogramador.net/2009/08/session-transfer.html</link><author>cacotx@gmail.com (Carlos Gressler Filho)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_viSF9GGLauM/SpwSTgpzGlI/AAAAAAAAAEk/CGI21wf7A8o/s72-c/bd.JPG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539727321772853208.post-8426567398440918636</guid><pubDate>Thu, 27 Aug 2009 16:25:00 +0000</pubDate><atom:updated>2009-08-27T09:25:14.618-07:00</atom:updated><title>Rumo ao MCPD</title><description>Há muito tempo que eu não posto nada no meu blog, mas vou reiniciar este processo.&lt;br /&gt;
&lt;br /&gt;
Começo com uma novidade, acabo de entrar em um desafio onde meus colegas de trabalho Rafael Ribas e Luis Eduardo e eu iremos entrar em uma odisséia de estudos para buscarmos nossa certificação MCPD.&lt;br /&gt;
&lt;br /&gt;
Lançamos um blog(&lt;a href="http://rumoaomcpd.blogspot.com/"&gt;rumoaomcpd.blogspot.com&lt;/a&gt;) que será nosso diário de bordo, onde postaremos nossas impressões sobre os conteúdos das provas necessárias para a certificação MCTS e depois a MCPD.&lt;br /&gt;
&lt;br /&gt;
Visitem e acompanhem este desafio!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5539727321772853208-8426567398440918636?l=www.carlosprogramador.net' alt='' /&gt;&lt;/div&gt;</description><link>http://www.carlosprogramador.net/2009/08/rumo-ao-mcpd.html</link><author>cacotx@gmail.com (Carlos Gressler Filho)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539727321772853208.post-4463083385976670333</guid><pubDate>Tue, 21 Oct 2008 17:30:00 +0000</pubDate><atom:updated>2008-10-21T10:38:29.931-07:00</atom:updated><title>problemas de debug no VS2005</title><description>pois é gente,&lt;br /&gt;passei por um aperto estes dias, mas consegui achar o problema.&lt;br /&gt;&lt;br /&gt;eis que quando eu ia debugar um projeto que estou tocando aqui aparecia o seguinte alert:&lt;br /&gt;&lt;br /&gt;---------------------------&lt;br /&gt;Microsoft Visual Studio&lt;br /&gt;---------------------------&lt;br /&gt;The following module was built either with optimizations enabled or without debug information:&lt;br /&gt;&lt;br /&gt;c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\d33c2b62\ba11b592\assembly\dl3\7153188f\fbed248c_8933c901\BookEngine.DLL&lt;br /&gt;&lt;br /&gt;To debug this module, change its project build configuration to Debug mode. To suppress this message, disable the 'Warn if no user code on launch' debugger option.&lt;br /&gt;---------------------------&lt;br /&gt;OK&lt;br /&gt;---------------------------&lt;br /&gt;&lt;br /&gt;pois finalmente descobri o que é e como resolver.&lt;br /&gt;&lt;br /&gt;o fato é que dentro da minha solution eu possuo dois projetos, o WebSite e o BookEngine.&lt;br /&gt;o BookEngine é apenas uma série de classes que eu importo no WebSite e utilizo ele instanciando meus objetos.&lt;br /&gt;&lt;br /&gt;Para fazer o relacionamento eu apenas adicionei uma referência diretamente na DLL do outro projeto, e por isso dava errado.&lt;br /&gt;&lt;br /&gt;O erro acontece pois na hora de compilar, a DLL do BookEngine não estava sendo atualizada no bin do projeto.&lt;br /&gt;&lt;br /&gt;Para solucionar eu apenas excluí a relação e em references eu utilizei a aba de projetos, relacionei o projeto do BookEngine e pronto!&lt;br /&gt;&lt;br /&gt;Tudo funcionando perfeitamente e sem problemas de debug.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Eras isso,&lt;br /&gt;qualquer duvida só me enviar um mail.&lt;br /&gt;&lt;br /&gt;ab.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5539727321772853208-4463083385976670333?l=www.carlosprogramador.net' alt='' /&gt;&lt;/div&gt;</description><link>http://www.carlosprogramador.net/2008/10/problemas-de-debug-no-vs2005.html</link><author>cacotx@gmail.com (Carlos Gressler Filho)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539727321772853208.post-4417714859314126707</guid><pubDate>Sat, 06 Sep 2008 12:30:00 +0000</pubDate><atom:updated>2008-09-06T05:36:02.013-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">webkit</category><category domain="http://www.blogger.com/atom/ns#">firefox</category><category domain="http://www.blogger.com/atom/ns#">ie</category><category domain="http://www.blogger.com/atom/ns#">safari</category><category domain="http://www.blogger.com/atom/ns#">tableless</category><category domain="http://www.blogger.com/atom/ns#">chrome</category><category domain="http://www.blogger.com/atom/ns#">Browsers</category><category domain="http://www.blogger.com/atom/ns#">google</category><category domain="http://www.blogger.com/atom/ns#">opera</category><category domain="http://www.blogger.com/atom/ns#">css</category><title>O Chrome não quer dizer muita coisa</title><description>Li este post no blog &lt;a href="http://www.tableless.com.br/"&gt;http://www.tableless.com.br/&lt;/a&gt; e achei muito interessante, pois concordo em 100% com o que foi dito pelo  Diego Eis, e acho muita fumaça pra pouco fogo.... enfim... segue abaixo o texto.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;O Google lançou &lt;a href="http://www.google.com/googlebooks/chrome/"&gt;sua presença no mercado de browsers&lt;/a&gt;. Atitude interessante mas que para mim não quer dizer muita coisa. Ter um novo browser não muda muito (a minha) a vida dos desenvolvedores. Lembre-se que não importa quão bom seja o Firefox, Safari ou o &lt;a href="http://www.google.com/chrome/"&gt;Google Chrome&lt;/a&gt;, nós, desenvolvedores temos sempre que nivelar tudo por baixo, pelo Internet Explorer 6. Se o Chrome ou qualquer outro novo navegador ajudar com que o IE6 seja definitivamente descontinuado, eles serão bem-vindos. Caso contrário, o lançamento de bons browsers só vai, por assim dizer, brochar a vontade dos profissionais que querem utilizar recursos mais avançados do CSS mas não podem por conta do IE6. O IE7 foi um avanço interessante. O IE8 está pretendendo ser. Mas até mesmo o IE8 não vai ser muito útil enquanto ele não tomar a o lugar do Internet Explorer 6. O mesmo vale para qualquer outro browser.&lt;br /&gt;&lt;br /&gt;Do que adianta eu utilizar PNG transparente para os browsers que suportam canal alpha e ter que continuar recortando imagens para fazer um bom trabalho no IE6? A Microsoft sabe que ela criou um monstro, e ainda bem que ela reconheceu isso e tomou alguma atitude.&lt;br /&gt;&lt;br /&gt;Vou ter muito mais prazer de trabalhar quando ouvir a notícia da descontinuação do IE6, do que sobre o lançamento de um novo browser. Por isso eu não fico 100% satisfeito com o Chrome, nem com o Firefox 3, nem com atualizações do motor WebKit. Não porque não quero, mas porque vou continuar tendo o mesmo trabalho que sempre tive para fazer sites.&lt;br /&gt;&lt;br /&gt;Vou continuar tendo as mesmas preocupações, vou continuar fazendo as mesmas técnicas manjadas e trabalhosas. O problema continua sendo o passado. É o IE6 que ainda dita as regras.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Fonte: &lt;a href="http://www.tableless.com.br/chrome-nao-quer-dizer-muita-coisa"&gt;http://www.tableless.com.br/chrome-nao-quer-dizer-muita-coisa&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5539727321772853208-4417714859314126707?l=www.carlosprogramador.net' alt='' /&gt;&lt;/div&gt;</description><link>http://www.carlosprogramador.net/2008/09/o-chrome-no-quer-dizer-muita-coisa-por.html</link><author>cacotx@gmail.com (Carlos Gressler Filho)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539727321772853208.post-4140886813581667917</guid><pubDate>Fri, 09 May 2008 19:15:00 +0000</pubDate><atom:updated>2008-05-09T12:17:02.745-07:00</atom:updated><title>quão nerd você é?</title><description>&lt;a href="http://www.nerdtests.com/nt2ref.html"&gt;e voce?&lt;/a&gt;&lt;br /&gt;quanto nerd você é????&lt;br /&gt;&lt;a href="http://www.nerdtests.com/nt2ref.html"&gt;&lt;img src="http://www.nerdtests.com/images/badge/nt2/7e8d8353489cc9c4.jpg" alt="NerdTests.com says I'm an Uber-Dorky Nerd God.  What are you?  Click here!" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5539727321772853208-4140886813581667917?l=www.carlosprogramador.net' alt='' /&gt;&lt;/div&gt;</description><link>http://www.carlosprogramador.net/2008/05/quo-nerd-voc_09.html</link><author>cacotx@gmail.com (Carlos Gressler Filho)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539727321772853208.post-1953313062162490047</guid><pubDate>Fri, 09 May 2008 16:19:00 +0000</pubDate><atom:updated>2008-05-09T09:20:11.925-07:00</atom:updated><title>Lançado a primeira rede social para Hackers!</title><description>&lt;p mce_keep="true"&gt;É isso mesmo galera! Acabaram de lançar o House of Hackers!  uma rede social para hackers se encontrarem, formarem grupos, debaterem  problemas de segurança, e "Dominar o mundo!!!"&lt;/p&gt; &lt;p mce_keep="true"&gt;De acordo com o blog do pessoal da GNUCITIZEN, a rede é  exclusiva e apoiará questões culturais e o modo de vida Hacker, ideologias,  politica e principalmente voltando para o foco nas opiniões sobre a  esfera de  segurança.&lt;/p&gt; &lt;p mce_keep="true"&gt; Além de criar grupos, os especialistas da House of Hackers  terão chance de prestar serviço a &lt;a oncontextmenu="return false;" onmouseover="return true;hw9155090070863(event, this, '641856176'); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='solid';" style="border-bottom: 1px dotted; color: rgb(0, 102, 0); text-decoration: underline;" onclick="return true;hwClick9155090070863(641856176);return false;" onmouseout="return true;hideMaybe(event, this); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='dotted 1px'; " href="http://www.geek.com.br/modules/noticias/ver.php?id=22338&amp;amp;sec=5#"&gt;empresas&lt;/a&gt;,  que poderão recrutar testadores de segurança ou analistas diretamente pela rede  social, inserindo em um mural a descrição do trabalho e qualificações  necessárias, e podendo ser contatadas diretamente.&lt;br /&gt;&lt;br /&gt;Através de taxas  aceitas durante a inserção de novas vagas, os responsáveis pela rede social  patrocinarão programas de pesquisa que devem ser iniciados em breve, mesmo que o  programa esteja em seus estágios iniciais de desenvolvimento.&lt;/p&gt; &lt;p mce_keep="true"&gt;Alguns "Especialistas em porra nenhuma" acreditam que o site  pode ser visto com maus olhos por autoridades, temendo que o fácil acesso a  informações possa ser usado para o mal, promovendo invasões, por exemplo. Mas  eles não se lembram que é justamente por isso que o ambiente é restrito  caramba!!!&lt;/p&gt; &lt;p mce_keep="true"&gt;Pq ainda temos tanto medo da palavra Hacker??? Somos apenas  nerds que curtem sistemas de segurança... não é nossa culpa se não existe nada  impossivel de ser quebrado(prefiro esta palavra do que "invadido"). e tem  mais... somos nós quem somos contratados pra arrumar as cagadas que os  superpoderosos analistas de TI fazem nas redes e deixam a porta aberta pra serem  invadidos... então, pq crucificar aqueles que vocês sempre recorrem?????&lt;/p&gt; &lt;p mce_keep="true"&gt;Bom... desabafo feito, segue ae os links de referência sobre  o assunto:&lt;/p&gt; &lt;p mce_keep="true"&gt;O House of Hackers pode ser acessado em &lt;a href="http://houseofhackers.ning.com/" target="_blank"&gt;houseofhackers.ning.com&lt;/a&gt;.&lt;br /&gt;Link do blog da &lt;span class="a"&gt;&lt;a class="" href="http://www.gnucitizen.org/blog/house-of-hackers-possibilities/" mce_href="http://www.gnucitizen.org/blog/house-of-hackers-possibilities/"&gt;www.&lt;b&gt;gnucitizen&lt;/b&gt;.org&lt;/a&gt;  falando sobre o assunto.&lt;br /&gt;Noticia do &lt;a class="" href="http://tecnologia.terra.com.br/interna/0,,OI2873948-EI4802,00-Primeira+rede+social+para+hackers+e+lancada.html" mce_href="http://tecnologia.terra.com.br/interna/0,,OI2873948-EI4802,00-Primeira+rede+social+para+hackers+e+lancada.html"&gt;Terra&lt;/a&gt;&lt;br /&gt;Noticia  do &lt;a class="" href="http://www.geek.com.br/modules/noticias/ver.php?id=22338&amp;amp;sec=5" mce_href="http://www.geek.com.br/modules/noticias/ver.php?id=22338&amp;amp;sec=5"&gt;GEEK&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5539727321772853208-1953313062162490047?l=www.carlosprogramador.net' alt='' /&gt;&lt;/div&gt;</description><link>http://www.carlosprogramador.net/2008/05/lanado-primeira-rede-social-para.html</link><author>cacotx@gmail.com (Carlos Gressler Filho)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539727321772853208.post-1528429851245442954</guid><pubDate>Fri, 07 Mar 2008 16:58:00 +0000</pubDate><atom:updated>2008-03-07T09:07:21.894-08:00</atom:updated><title>Alterando a current.Culture no Framework 1.1</title><description>foi uma mão fazer esta troca... no framework 2.0 é bem mais facil... mas enfim...&lt;br /&gt;la vai:&lt;br /&gt;&lt;br /&gt;você precisa importar 2 namespaces:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;Imports System.Globalization&lt;br /&gt;Imports System.Threading&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;br /&gt;e depois você altera ela assim:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")&lt;br /&gt;Response.Write("Current Culture is " +&lt;br /&gt;Thread.CurrentThread.CurrentCulture.EnglishName)&lt;br /&gt;Thread.CurrentThread.CurrentCulture = New CultureInfo("pt-BR")&lt;br /&gt;Response.Write("Current Culture is " +&lt;br /&gt;Thread.CurrentThread.CurrentCulture.EnglishName) &lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;pra mais informações acesse o post da pagina de suport da micros~1 :&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/306162"&gt;http://support.microsoft.com/kb/306162&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;e pra ver a lista de codigos das Cultures acesse no MSDN:&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.globalization.cultureinfo(vs.71).aspx"&gt;http://msdn2.microsoft.com/en-us/library/system.globalization.cultureinfo(vs.71).aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;é isso ae...&lt;br /&gt;até.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5539727321772853208-1528429851245442954?l=www.carlosprogramador.net' alt='' /&gt;&lt;/div&gt;</description><link>http://www.carlosprogramador.net/2008/03/alterando-currentculture-no-framework.html</link><author>cacotx@gmail.com (Carlos Gressler Filho)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539727321772853208.post-4374606971827700098</guid><pubDate>Thu, 21 Feb 2008 13:26:00 +0000</pubDate><atom:updated>2008-12-12T17:49:18.655-08:00</atom:updated><title>Utilizando o TextBoxWatermarkExtender</title><description>Ae galera...&lt;br /&gt;Novo post depois de muito tempo, mas enfim... resolvi passar pra voces como utilizar este componente do Ajax Control Toolkit, pois ele agrega visualmente no formulario.&lt;br /&gt;Nos proximos posts continuarei com este projeto utilizando elementos como o &lt;strong&gt;RequiredFieldValidator&lt;/strong&gt;, e o &lt;strong&gt;ValidatorCalloutExtender&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Bom... começamos por criar um novo projeto AJAX-Enabled:&lt;img id="BLOGGER_PHOTO_ID_5169425216987978530" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_viSF9GGLauM/R7182JeD2yI/AAAAAAAAACI/rpP0GO4Wr6M/s320/cria_proj.gif" border="0" /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Vamos utilizar um processo simples, com apenas 3 campos, sendo 1 campo de Login, 1 campo de senha e um campo inteiro sendo o Dígito Verificador:&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5169425225577913170" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_viSF9GGLauM/R7182peD21I/AAAAAAAAACg/4bW4QAc-QbQ/s320/formulario.gif" border="0" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Para Auxiliar no entendimento do usuário, vamos colocar uma marca d’água nos campos, utilizando o TextBoxWatermarkExtender. Inserimos um para cada campo, e atribuimos sua propriedade “TargetControlID” para o TextBox desejado:&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;img id="BLOGGER_PHOTO_ID_5169425586355166066" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_viSF9GGLauM/R719LpeD23I/AAAAAAAAACw/ffbs1XDr-hY/s320/targetgontrolid.gif" border="0" /&gt;&lt;/div&gt;&lt;div&gt;Neste momento, nas propriedades do “TextBoxUsuario”, encontraremos o grupo EXTENDERS, onde podemos achar as propriedades que controlam este componente:&lt;br /&gt;WatermarkCssClass, e WatermarkText. Criamos uma classe de css para o watermark:&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;img id="BLOGGER_PHOTO_ID_5169425221282945842" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_viSF9GGLauM/R7182ZeD2zI/AAAAAAAAACQ/UvMT9eIgxgM/s320/cssWatermark.gif" border="0" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Desta forma, inserimos o texto explicativo na propriedade WatermarkText, e a classe Css na propriedade WatermarkCssClass:&lt;/p&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5169425225577913154" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_viSF9GGLauM/R7182peD20I/AAAAAAAAACY/RKshPf1hL4I/s320/extenders.gif" border="0" /&gt;&lt;/p&gt;&lt;p&gt;Lembramos que estas propriedades são visiveis nas propriedades do TextBox, e nao do WatermarkExtender.&lt;br /&gt;Ao compilar obtemos o seguinte resultado:&lt;/p&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5169425234167847778" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_viSF9GGLauM/R7183JeD22I/AAAAAAAAACo/m4pmJALqSVc/s320/resultado-Water.gif" border="0" /&gt;&lt;/p&gt;&lt;p&gt;Bom...&lt;/p&gt;&lt;p&gt;se alguem quizer este projeto, basta me mandar um mail... no próximo post vou implementar o RequiredFieldValidator e o ValidatorCalloutExtender...&lt;/p&gt;&lt;p&gt;um abraço!!!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5539727321772853208-4374606971827700098?l=www.carlosprogramador.net' alt='' /&gt;&lt;/div&gt;</description><link>http://www.carlosprogramador.net/2008/02/utilizando-o-textboxwatermarkextender.html</link><author>cacotx@gmail.com (Carlos Gressler Filho)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_viSF9GGLauM/R7182JeD2yI/AAAAAAAAACI/rpP0GO4Wr6M/s72-c/cria_proj.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539727321772853208.post-5548824262356984246</guid><pubDate>Thu, 20 Sep 2007 12:40:00 +0000</pubDate><atom:updated>2007-09-20T05:51:15.931-07:00</atom:updated><title>Master Pages Truques e Manhas</title><description>Gurizada,&lt;br /&gt;estive precisando de algumas referências para a criação de Master Pages no VS2005 e achei este artigo muito bom...&lt;br /&gt;(é em inglês)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://weblogs.asp.net/dwahlin/archive/2006/08/22/Master-Pages-Tips-and-Tricks.aspx"&gt;http://weblogs.asp.net/dwahlin/archive/2006/08/22/Master-Pages-Tips-and-Tricks.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;mas se tu não tá afim de muita leitura e quer ir direto pros fontes, baixa aqui...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xmlforasp.net/CodeBank/Download/Blog/MasterPageTipsAndTricks.zip"&gt;http://www.xmlforasp.net/CodeBank/Download/Blog/MasterPageTipsAndTricks.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;é isso ae.&lt;br /&gt;abraços.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5539727321772853208-5548824262356984246?l=www.carlosprogramador.net' alt='' /&gt;&lt;/div&gt;</description><link>http://www.carlosprogramador.net/2007/09/master-pages-truques-e-manhas.html</link><author>cacotx@gmail.com (Carlos Gressler Filho)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539727321772853208.post-403254317081640297</guid><pubDate>Tue, 18 Sep 2007 13:22:00 +0000</pubDate><atom:updated>2008-12-12T17:49:18.896-08:00</atom:updated><title>Failed to acess iis metabase</title><description>&lt;p&gt;Hoje passei por um problemão...&lt;br /&gt;ao tentar rodar uma aplicação que estava desenvolvendo me deparei com o seguinte erro:&lt;/p&gt;&lt;p&gt;Failed to access IIS metabase&lt;/p&gt;&lt;p&gt;após algumas pesquisas descobri que o problema era que o IIS não estava configurado para usar o framework 2.0!!!&lt;/p&gt;&lt;p&gt;Isso aconteceu pois eu acabei intalando o framework antes de instalar o IIS. Se você fez o contrário e instalou primeiro o IIS e depois o framework este erro provavelmente não vai acontecer. &lt;/p&gt;&lt;p&gt;Mas a solução foi tão simples que chega a ser irritante... heheheh&lt;/p&gt;&lt;p&gt;se você cometeu o mesmo erro que eu e acabou errando a ordem de instalação, a solução é, pelo prompt, acessar a pasta "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" e executar o comando aspnet_regiis.exe com o parâmetro /i&lt;/p&gt;&lt;p&gt;assim você vai configurar o IIS para utilizar o framework!!&lt;br /&gt;a tela seria esta:&lt;/p&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5111536966834302658" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 225px; TEXT-ALIGN: center" height="166" alt="" src="http://3.bp.blogspot.com/_viSF9GGLauM/Ru_TygxvrsI/AAAAAAAAAAQ/5L4kEQHay7w/s400/prompt.bmp" width="400" border="0" /&gt;&lt;br /&gt;bom galera... é isso ae...&lt;br /&gt;Ahhh: uso o IIS 5.1, .NET 2.0 e Windows XP SP2&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;Fonte:&lt;br /&gt;&lt;/span&gt;&lt;a href="http://marcosdellantonio.blogspot.com/2006/04/failed-to-access-iis-metabase.html"&gt;&lt;span style="font-size:78%;"&gt;http://marcosdellantonio.blogspot.com/2006/04/failed-to-access-iis-metabase.html&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5539727321772853208-403254317081640297?l=www.carlosprogramador.net' alt='' /&gt;&lt;/div&gt;</description><link>http://www.carlosprogramador.net/2007/09/failed-to-acess-iis-metabase.html</link><author>cacotx@gmail.com (Carlos Gressler Filho)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_viSF9GGLauM/Ru_TygxvrsI/AAAAAAAAAAQ/5L4kEQHay7w/s72-c/prompt.bmp" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539727321772853208.post-8429360205340103120</guid><pubDate>Mon, 17 Sep 2007 14:29:00 +0000</pubDate><atom:updated>2007-10-02T06:58:06.612-07:00</atom:updated><title>Polimorfismo na plataforma DOT NET</title><description>Bom,&lt;br /&gt;dei uma relida no artigo que escrevi e vi que ele realmente estava um tanto estranho...&lt;br /&gt;mas achei esta explicação de polimorfismo dom classes abstratas que realmente explica de maneira facil e didatica este assunto:&lt;br /&gt;&lt;br /&gt;http://www.macoratti.net/07/09/vbn5_pca.htm&lt;br /&gt;&lt;br /&gt;espero que apreciem.&lt;br /&gt;e desculpem pela excplicação de antes... realmente me perdi nos pensamentos...&lt;br /&gt;hehehe&lt;br /&gt;&lt;br /&gt;um abraço.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5539727321772853208-8429360205340103120?l=www.carlosprogramador.net' alt='' /&gt;&lt;/div&gt;</description><link>http://www.carlosprogramador.net/2007/09/polimorfismo-na-plataforma-dot-net.html</link><author>cacotx@gmail.com (Carlos Gressler Filho)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539727321772853208.post-2794327205093182596</guid><pubDate>Mon, 17 Sep 2007 14:20:00 +0000</pubDate><atom:updated>2007-09-19T08:01:14.501-07:00</atom:updated><title>Hello World!!</title><description>buenas...&lt;br /&gt;deixe-me apresentar.&lt;br /&gt;Sou Carlos Gressler Filho, 19 Anos, programador, e quem sabe um dia Analista de Banco de Dados.&lt;br /&gt;trabalho com várias linguagens, entre elas Pascal, Java, C/C++, e atualmente com linguagens voltadas para o desenvolvimento WEB, tais como ASP, VB.NET, C#.NET.&lt;br /&gt;Também tenho um bom conhecimento em banco de dados, como MySQL, MS-SQL.&lt;br /&gt;&lt;br /&gt;Trabalho na empresa PMWEB, na divisão da Agencia Magic, na área de desenvolvimento, e criei este blog com a intenção de difundir conhecimentos sobre algumas tecnologias amplamente usadas no desenvolvimento de aplicações WEB, mais precisamente sobre o .NET e o MS-SQL.&lt;br /&gt;&lt;br /&gt;Também abordarei algumas outras ferramentas, como o Visual Source Safe, o Case Studio, entre outros.&lt;br /&gt;&lt;br /&gt;Espero que gostem.&lt;br /&gt;&lt;br /&gt;Um Abraço!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5539727321772853208-2794327205093182596?l=www.carlosprogramador.net' alt='' /&gt;&lt;/div&gt;</description><link>http://www.carlosprogramador.net/2007/09/hello-world.html</link><author>cacotx@gmail.com (Carlos Gressler Filho)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item></channel></rss>
