<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://pontonetpt.org/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Artur Araujo S. Ribeiro</title><link>http://pontonetpt.org/blogs/arturrj/default.aspx</link><description>Tudo sobre .NET</description><dc:language>ar-QA</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Como selecionar a linha de uma DataGrid.</title><link>http://pontonetpt.org/blogs/arturrj/archive/2007/02/12/P11932.aspx</link><pubDate>Mon, 12 Feb 2007 23:05:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:3731</guid><dc:creator>Artur Araujo S. Ribeiro</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/arturrj/rsscomments.aspx?PostID=3731</wfw:commentRss><comments>http://pontonetpt.org/blogs/arturrj/archive/2007/02/12/P11932.aspx#comments</comments><description>Como selecionar toda a linha da DataGrid.&lt;br /&gt;&lt;br /&gt;

private void SuaGrid_CurrentCellChanged(object sender, System.EventArgs e)&lt;br /&gt;
{&lt;br /&gt;&lt;br /&gt;

Rectangle rect = SuaGrid.GetCellBounds(SuaGrid.CurrentCell);&lt;br /&gt;&lt;br /&gt;
				
DataGrid.HitTestInfo hti = SuaGrid.HitTest(new Point(rect.X, rect.Y));&lt;br /&gt;&lt;br /&gt;

SuaGrid.CurrentCell = new DataGridCell(hti.Row, hti.Column);&lt;br /&gt;&lt;br /&gt;
SuaGrid.Select(hti.Row);&lt;br /&gt;&lt;br /&gt;

}&lt;br /&gt;&lt;br /&gt;

Artur Araújo&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=3731" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/arturrj/archive/tags/Windows+Forms/default.aspx">Windows Forms</category></item><item><title>Nullable types e C#</title><link>http://pontonetpt.org/blogs/arturrj/archive/2007/01/31/P11682.aspx</link><pubDate>Wed, 31 Jan 2007 03:30:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:3730</guid><dc:creator>Artur Araujo S. Ribeiro</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/arturrj/rsscomments.aspx?PostID=3730</wfw:commentRss><comments>http://pontonetpt.org/blogs/arturrj/archive/2007/01/31/P11682.aspx#comments</comments><description>&lt;div class="posttitle"&gt;&lt;font style="FONT-SIZE:14pt;" color="#000000"&gt;Nullable types e C#&lt;/font&gt; &lt;/div&gt;
&lt;div class="posttitle"&gt; &lt;/div&gt;
&lt;p&gt;&lt;font size="2"&gt;O objetivo deste post não é caracterizar cada um dos tipos mas sim apresentar uma nova funcionalidade introduzida na nova versão da plataforma .Net &lt;b&gt;Nullable types&lt;/b&gt;. Uma das diferenças existentes entre os &lt;b&gt;Reference Types&lt;/b&gt; e os value types reside no facto de apenas os primeiros poderem conter o valor null. &lt;br /&gt;&lt;br /&gt;Por exemplo, se utilizarmos o seguinte código na versão da &lt;b&gt;Framework 1.x&lt;/b&gt;:&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;int i = null;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;div&gt;&lt;font size="2"&gt;Deparamo-nos imediatamente com um erro de compilação que nos informa que não podemos atribuir o valor null à variável &lt;b&gt;i&lt;/b&gt; pois esta é do tipo &lt;b&gt;inteiro&lt;/b&gt;. Infelizmente, existem algumas situações onde até dava jeito atribuir null a uma variável do tipo int &lt;br /&gt;A solução para este problema poderia passar pela construção de uma classe capaz de simular o valor null. Essa classe seria utilizada para encapsular o número inteiro fazendo assim com que fosse possível atribuir o valor null a uma variável desse tipo. A nova versão(2.0) da plataforma introduz o tipo genérico &lt;b&gt;Nullable&amp;lt;T&amp;gt; &lt;/b&gt;que pode ser utilizado neste tipo de situações. &lt;br /&gt;&lt;br /&gt;Por exemplo, se utilizarmos o seguinte código na versão da &lt;b&gt;Framework 2.0&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;Nullable&amp;lt;int&amp;gt; i = null;&lt;/font&gt; &lt;br /&gt;
&lt;div&gt;&lt;br /&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;Não obtemos nenhum erro de compilação. A utilização desta classe obriga-nos a algum código adicional sempre que pretendermos atribuir o valor da variável &lt;b&gt;i&lt;/b&gt; a outra variável. Por exemplo, se possuirmos uma variável j e quisermos atribuir o valor de &lt;b&gt;i&lt;/b&gt; a j temos de verificar se &lt;b&gt;i&lt;/b&gt; contém um valor válido:&lt;/font&gt;
&lt;div&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;Nullable&amp;lt;int&amp;gt; i = 20;&lt;br /&gt;int j = 10;&lt;br /&gt;&lt;br /&gt;if( i.HasValue )&lt;br /&gt;  j = (int)i;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;Note-se que a atribuição de um valor à variável segue a mesma sintaxe que a utilizada para uma variável normal uma vez que a classe &lt;b&gt;Nullable&amp;lt;T&amp;gt;&lt;/b&gt; efetuou o override do operador =. Uma observação adicional: se preferirmos, podemos utilizar a propriedade Value da classe &lt;b&gt;Nullable&amp;lt;T&amp;gt;&lt;/b&gt; para acedermos ao valor interno encapsulado pela classe. Se acham que o código anterior os obriga a escrever muito e têm o &amp;quot;&lt;b&gt;bom gosto&lt;/b&gt;&amp;quot; de utilizar a linguagem C#, então estão com sorte: o compilador oferece alguns atalhos que simplificam o código anterior. O primeiro desses atalhos está relacionado com a declaração da variável. Assim, a declaração Nullable&amp;lt;int&amp;gt; apresentada anteriormente poderia ser substituida pelo seguinte:&lt;/font&gt;
&lt;div&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;int? i = 20;&lt;/font&gt;
&lt;div&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;A utilização do caracter &lt;b&gt;?&lt;/b&gt; faz com que o compilador de C# gere o mesmo tipo de código que o excerto anterior. Para além da declaração, também podemos simplificar o código utilizado para efectuar o teste relativo ao valor interno armazenado pela classe. &lt;br /&gt;&lt;br /&gt;Por exemplo, todo o código anterior poderia ser escrito através das seguintes duas linhas C#:&lt;/font&gt; &lt;br /&gt;
&lt;div&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;int? i = 2; &lt;br /&gt;int j = i ?? 10;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;A primeira linha começa por declarar a variável como &lt;b&gt;Nullable&amp;lt;int&amp;gt;&lt;/b&gt; e atribuir o valor 2 a essa variável. A segunda linha atribui o valor de &lt;b&gt;i&lt;/b&gt; a &lt;b&gt;j&lt;/b&gt; se o valor interno for válido ou o número 10 se o valor &amp;quot;&lt;b&gt;interno&lt;/b&gt;&amp;quot; da variável for null. &lt;br /&gt;&lt;br /&gt;Artur Araújo&lt;/font&gt;
&lt;div&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=3730" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/arturrj/archive/tags/ADO.NET+2.0/default.aspx">ADO.NET 2.0</category></item><item><title>Criando facilmente transacões com .Net 2.0</title><link>http://pontonetpt.org/blogs/arturrj/archive/2007/01/31/P11681.aspx</link><pubDate>Wed, 31 Jan 2007 03:05:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:3729</guid><dc:creator>Artur Araujo S. Ribeiro</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/arturrj/rsscomments.aspx?PostID=3729</wfw:commentRss><comments>http://pontonetpt.org/blogs/arturrj/archive/2007/01/31/P11681.aspx#comments</comments><description>&lt;p class="TituloPrincipal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;b&gt;&lt;font face="Verdana" size="4"&gt;Criando facilmente transacões com .Net 2.0 &lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="Corpo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;font face="Verdana" size="2"&gt;Nesse artigo irei mostrar como é fácil utilizarmos transações em aplicações com .Net 2.0 . Uma das melhorias mais significativas no .NET 2.0 é a área de transações. Agora com uma única linha torna-se extremamente fácil suportar blocos transactional do código usando o conceito de &amp;quot;ambient&amp;quot; transaction com o TransactionScope localizada no namespace System.Transactions. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Verdana;"&gt;Abaixo está um exemplo de como utilizar da melhor forma transações em nossas aplicações. &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;span lang="EN-US" style="COLOR:blue;"&gt;using&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font color="#000080"&gt; (TransactionScope ts = &lt;/font&gt;&lt;/span&gt;&lt;span lang="EN-US" style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font color="#000080"&gt; TransactionScope()) &lt;br /&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font color="#000080"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#000080"&gt;&lt;span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; // Um &amp;quot;ambient&amp;quot; &amp;#233; colocado no contexto atual&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font size="2"&gt;&lt;font color="#000080"&gt;&lt;font face="Courier New"&gt;&lt;span lang="EN-US"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;DbProviderFactory provider;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;font color="#000080"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;provider = DbProviderFactories.GetFactory(&amp;quot;System.Data.SqlClient&amp;quot;);&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;font color="#000080"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;DbConnection conn = provider.CreateConnection();&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;font color="#000080"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;conn.ConnectionString = strConn;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;font color="#000080"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font color="#000080"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#000080"&gt;&lt;span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// Primeira query. Sendo executada com sucesso&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;font color="#000080"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;DbCommand dbcmd = conn.CreateCommand();&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;font color="#000080"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;dbcmd.Connection = conn;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;font color="#000080"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;dbcmd.CommandText = &amp;quot;DELETE Lojas&amp;quot;;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;font color="#000080"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;dbcmd.CommandType = CommandType.Text;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;font color="#000080"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Courier new" color="#000080" size="2"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#000080"&gt;&lt;span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// Segunda query. Ir&amp;#225; ocorrer um erro.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;font color="#000080"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;DbCommand dbcmd2 = conn.CreateCommand();&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;font color="#000080"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;dbcmd2.Connection = conn;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;font color="#000080"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;dbcmd2.CommandText = &amp;quot;DELETE Invalida&amp;quot;;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;font color="#000080"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;dbcmd2.CommandType = CommandType.Text;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Courier new" color="#000080" size="2"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Courier new" color="#000080" size="2"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;conn.Open();&lt;/font&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Courier new" color="#000080" size="2"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;div class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#000080"&gt;&lt;span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;try&lt;br /&gt;&lt;/span&gt;&lt;font color="#000080"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{ &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Courier new" color="#000080" size="2"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;// Agora vamos deletar o conteudo da tabela Lojas da primeira query. &lt;/font&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Courier new" color="#000080" size="2"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;dbcmd.ExecuteNonQuery();&lt;/font&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Courier new" color="#000080" size="2"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;div class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#000080"&gt;&lt;span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;// A segunda query ir&amp;#225; tentar deletar o conte&amp;#250;do de uma tabela n&amp;#227;o&lt;/span&gt;&lt;span&gt;&lt;font color="#000080"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;span&gt;existente ,&amp;nbsp;&lt;br /&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;// ocorrendo erro o ts.complete n&amp;#227;o ir&amp;#225; ser executado.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Courier new" color="#000080" size="2"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;dbcmd2.ExecuteNonQuery();&lt;/font&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#000080"&gt;&lt;span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;//se todas as opera&amp;#231;&amp;#245;es forem um sucesso ent&amp;#227;o ir&amp;#225; ocorrer o commit ,&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#000080"&gt;&lt;span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;//na transa&amp;#231;&amp;#227;o.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Courier new" color="#000080" size="2"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Courier new" color="#000080" size="2"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;ts.Complete(); &lt;/font&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Courier new" color="#000080" size="2"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;div class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#000080"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;catch&lt;/span&gt;&lt;font color="#000080"&gt; (DbException ex)&amp;nbsp;&lt;br /&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{ &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Courier new" color="#000080" size="2"&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#000080"&gt;&lt;span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;// Tratamento de erro&lt;/span&gt;&lt;font color="#000080"&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;div class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Courier new" color="#000080" size="2"&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#000080"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;finally&lt;/span&gt;&lt;font color="#000080"&gt;&amp;nbsp;&lt;br /&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{ &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Courier new" color="#000080" size="2"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;conn.Close();&lt;/font&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Courier new" color="#000080" size="2"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;ts.Dispose();&lt;/font&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Courier new" color="#000080" size="2"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Courier new" color="#000080" size="2"&gt;}&lt;/font&gt;&lt;/p&gt;
&lt;p class="Cdigo" style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Verdana;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="Corpo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana" size="2"&gt;Extremamente simples, n&amp;#227;o &amp;#233;? TransactionScope tomar&amp;#225; cuidado de quase toda a &amp;#225;rea transactional neste bloco do c&amp;#243;digo. Tudo que &amp;#233; requerido para cometer a transa&amp;#231;&amp;#227;o deve chamar o m&amp;#233;todo ts.Complete(). Observe que o objeto pr&amp;#243;prio da conex&amp;#227;o est&amp;#225; confinado dentro do espa&amp;#231;o assim que ele participa automaticamente na transa&amp;#231;&amp;#227;o. Voc&amp;#234; pode manipular o contexto da transa&amp;#231;&amp;#227;o com Transaction.Current. &lt;/font&gt;&lt;/p&gt;
&lt;p class="Corpo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana" size="2"&gt;Esteja ciente que isto n&amp;#227;o est&amp;#225; limitado &amp;#224;s opera&amp;#231;&amp;#245;es com o SQL. Voc&amp;#234; pode criar a transa&amp;#231;&amp;#227;o para dados-armazenamentos no Oracle, SQL Server, messaging de MSMQ e mesmo para opera&amp;#231;&amp;#245;es com filesystem. &lt;/font&gt;&lt;/p&gt;
&lt;p class="Interttulo" style="MARGIN:8.5pt 0cm;"&gt;&lt;b&gt;&lt;font face="Verdana" size="2"&gt;Conclus&amp;#227;o &lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div class="Corpo" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana" size="2"&gt;No nosso dia - dia sabemos da import&amp;#226;ncia de estarmos sempre preocupados em estar utilizando transa&amp;#231;&amp;#245;es em nossas aplica&amp;#231;&amp;#245;es de forma que nos garanta um melhor gerenciamento das querys executadas . E na nova vers&amp;#227;o do .Net veio de forma mais f&amp;#225;cil e pr&amp;#225;tica a utiliza&amp;#231;&amp;#227;o de transa&amp;#231;&amp;#245;es . &lt;br /&gt;&lt;br /&gt;Artur Ara&amp;#250;jo&lt;/font&gt; 
&lt;div&gt;&lt;/div&gt;&lt;/div&gt;?&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=3729" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/arturrj/archive/tags/ADO.NET+2.0/default.aspx">ADO.NET 2.0</category></item><item><title>Utilize o método GetOrdinal para otimizar processamento de Loops.</title><link>http://pontonetpt.org/blogs/arturrj/archive/2007/01/31/P11680.aspx</link><pubDate>Wed, 31 Jan 2007 02:40:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:3728</guid><dc:creator>Artur Araujo S. Ribeiro</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/arturrj/rsscomments.aspx?PostID=3728</wfw:commentRss><comments>http://pontonetpt.org/blogs/arturrj/archive/2007/01/31/P11680.aspx#comments</comments><description>No VB6 vimos que ganhamos performance ao acessar os campos de um &lt;b&gt;RecordSet&lt;/b&gt; pelo número ordinal de um campo ao invés do nome.&lt;br /&gt;

Com o DataReader isso continua a ocorrer, mas agora temos uma vantagem: Podemos utilizar o método GetOrdinal para recuperar a posição do campo dentro do DataReader.&lt;br /&gt;&lt;br /&gt;

Desta forma, antes de realizarmos algum loop grande no dataReader podemos utilizar o GetOrdinal para recuperarmos a posição dos campos e &lt;br /&gt;guardarmos essas posições em variáveis. Então, durante o loop, utilizamos essas variáveis, gerando uma otimização de performance.&lt;br /&gt;

Desta forma conseguimos otimizar a performance da aplicação sem gerarmos problemas de manutenção neste trecho de código.&lt;br /&gt;&lt;br /&gt;

Veja um exemplo:&lt;br /&gt;&lt;br /&gt;

int cmpNome;&lt;br /&gt;

cmpNome = dr.GetOrdinal[&amp;quot;Nome&amp;quot;];&lt;br /&gt;&lt;br /&gt;

while (dr.Read)&lt;br /&gt;
{&lt;br /&gt;
 string nome = dr[cmpNome];&lt;br /&gt;
 //processa algo .......&lt;br /&gt;
}&lt;br /&gt;
dr.Close() ;&lt;br /&gt;&lt;br /&gt;

&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=3728" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/arturrj/archive/tags/ADO.NET+2.0/default.aspx">ADO.NET 2.0</category></item><item><title>Primeiros Passos no Ajax</title><link>http://pontonetpt.org/blogs/arturrj/archive/2006/09/23/P9117.aspx</link><pubDate>Sat, 23 Sep 2006 04:23:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:3726</guid><dc:creator>Artur Araujo S. Ribeiro</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/arturrj/rsscomments.aspx?PostID=3726</wfw:commentRss><comments>http://pontonetpt.org/blogs/arturrj/archive/2006/09/23/P9117.aspx#comments</comments><description>Vamos falar um pouco de um assunto muito interessante que, acredito, é do interesse
  geral de quem desenvolve sites dinâmicos: Ajax&lt;br /&gt;
  &lt;br /&gt;
  &lt;p&gt;
    Mas afinal, o que é esse tal de Ajax?&lt;/p&gt;
  &lt;p&gt;
    Ajax é a abreviação de &lt;em&gt;&lt;strong style="font-weight:bold;"&gt;A&lt;/strong&gt;synchronous
      &lt;strong&gt;J&lt;/strong&gt;avaScript &lt;strong&gt;A&lt;/strong&gt;nd &lt;strong&gt;X&lt;/strong&gt;mlHttpRequest
    &lt;/em&gt;e se você nunca ouviu falar dessa tecnologia, é bom correr e começar a dar
    uma olhada em sites como o Gmail, Google Earth, dentre outros ....&lt;/p&gt;
  &lt;p&gt;
    Essa não é uma tecnologia recente pra falar a verdade, mas
    até então, não havia sido batizada por assim dizer.&lt;/p&gt;
  &lt;p&gt;
    Mas ainda não falei sobre o que na verdade o Ajax faz.&lt;/p&gt;
  &lt;p&gt;
    Bem, tecnicamente e resumidamente falando, consiste em utilizar Javascript, Xml
    e XmlHttpRequest para que suas páginas façam chamadas ao servidor sem precisar recarregar
    a página. 
    &lt;br /&gt;
    (bem resumido não???)&lt;/p&gt;
  &lt;p&gt;
    Confuso? Nem um pouco...&lt;/p&gt;
  &lt;p&gt;
    Imagine como seria maravilhoso se um usuário do seu site realizasse uma pesquisa
    e o resultado simplesmente aparecesse em sua tela.&lt;/p&gt;
  &lt;p&gt;
    Com o Ajax isso é possível.&lt;/p&gt;
  &lt;p&gt;
    Vamos ao que interessa.&lt;/p&gt;
  &lt;p&gt;
    1º Passo - Instalar e configurar o Ajax em sua máquina&lt;/p&gt;
  &lt;p&gt;
    Clique  &lt;a href="http://ajax.schwarz-interactive.de/" style="color:blue;"&gt;aqui&lt;/a&gt;
    e no site clique no link &lt;em&gt;Download the latest Ajax.ddl&lt;/em&gt;, para baixar a versão
    mais atualizada. Em seguida descompacte o arquivo.&lt;/p&gt;
  &lt;br /&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=3726" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/arturrj/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Trabalhando com atributos personalizados ...</title><link>http://pontonetpt.org/blogs/arturrj/archive/2006/09/19/P9078.aspx</link><pubDate>Tue, 19 Sep 2006 19:52:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:3725</guid><dc:creator>Artur Araujo S. Ribeiro</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/arturrj/rsscomments.aspx?PostID=3725</wfw:commentRss><comments>http://pontonetpt.org/blogs/arturrj/archive/2006/09/19/P9078.aspx#comments</comments><description>&lt;font&gt;
&lt;h3&gt;Atributos personalizados Trabalhando com atributos personalizados&lt;/h3&gt;

Mostrarie nese artigo como desenvolver atributos personalizados no ambiente .NET e como utilizá-los em nossos aplicativos. &lt;br /&gt;&lt;br /&gt;

&lt;b&gt;Metadados extensíveis&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;

Os atributos são em última análise, uma espécie de &amp;quot;&lt;b&gt;Metadados&lt;/b&gt;&amp;quot; dos elementos do nosso código &lt;br /&gt;
(classes, métodos, propriedades e etc.). Dessa forma, os atributos são utilizados pelo ambiente &lt;b&gt;.Net&lt;/b&gt; em tempo 
de execução para definir valores ou determinar o comportamento de alguns elementos.

&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Exemplo&lt;/b&gt;
&lt;pre style="font-size:14px;"&gt;
[Serializable]
&lt;font color="#0000ff"&gt;class&lt;/font&gt; Ola
{
  &lt;font color="#0000ff"&gt;public class&lt;/font&gt; Ola()
  {

  }
}
&lt;/pre&gt;

&lt;br /&gt;
Observe no exemplo acima, a declaração de uma classe &amp;quot;&lt;b&gt;Ola&lt;/b&gt;&amp;quot;, marcada com o atributo Serializable. &lt;br /&gt;
Informando que um objeto desta classe deverá ser serializado. Como foi dito anteriormente os atributos são &lt;br /&gt;
empregados em vários elementos do nosso código. Reforçando esta idéia, observe o segundo exemplo:&lt;br /&gt;

&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Exemplo&lt;/b&gt;

&lt;pre style="font-size:14px;"&gt;
[WebMethod]
&lt;font color="#0000ff"&gt;public string&lt;/font&gt; OlaMundo()
{
  &lt;font color="#0000ff"&gt;return&lt;/font&gt; &amp;quot;Olá Mundo!&amp;quot;;
}
&lt;/pre&gt;

&lt;br /&gt;
Note que no exemplo acima o atributo &amp;quot;&lt;b&gt;WebMethod&lt;/b&gt;&amp;quot; determina o comportamento do elemento (método OlaMundo). &lt;br /&gt;
Neste caso, expondo-o no Web Service.&lt;br /&gt;&lt;br /&gt;

&lt;b&gt;Criando atributos&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;

Depois dos simples exemplos mostrados no tópico anterior, é notável o papel deste recurso no desenvolvimento das nossas &lt;br /&gt;
aplicações. Sendo assim, é relevante que saibamos criar os nossos próprios atributos. Partiremos de um exemplo simples, &lt;br /&gt;
no qual será visto os passos necessários para criar um nova marcação de atributo. &lt;br /&gt;&lt;br /&gt;

Um atributo é, técnicamente, uma classe .Net comum, que procede da classe base System.Attribute. Os atributos devem &lt;br /&gt;
ser considerados um tipo de referência especial. &lt;br /&gt;
Observe a declaração de uma classe-atributo:

&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Exemplo&lt;/b&gt;

&lt;pre style="font-size:14px;"&gt;
&lt;font color="#0000ff"&gt;namespace&lt;/font&gt; WebMobile...
{
  &lt;font color="#0000ff"&gt;public class&lt;/font&gt; MeuAtributo: Attribute
  {
    &lt;font color="#0000ff"&gt;private int&lt;/font&gt; _Value;
    &lt;font color="#0000ff"&gt;private string&lt;/font&gt; _Name;
    &lt;font color="#0000ff"&gt;public&lt;/font&gt; MeuAtributo(&lt;font color="#0000ff"&gt;int&lt;/font&gt; Value, string Name)
    {
      _Value = Value;
      _Name = Name;
    }
   
   &lt;font color="#0000ff"&gt;public&lt;/font&gt; ExibirValores()
   {
     Console.WriteLine(&amp;quot;Atributo Value: &amp;quot;+ Convert.ToString(_Value));
     Console.WriteLine(&amp;quot;Atributo Name: &amp;quot;+ Convert.ToString(_Name));
   }
 }
}
&lt;/pre&gt;&lt;br /&gt;

No trecho de código acima, implementamos uma classe chamada MeuAtributo - derivada da classe base Attribute, &lt;br /&gt;
com dois elementos privados, e um construtor público utilizado no momento da definição do atributo na classe &lt;br /&gt;
destinatária. 

&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Exemplo&lt;/b&gt;

&lt;pre style="font-size:14px;"&gt;
[MeuAtributo(15,&amp;quot;Testando...&amp;quot;)]
&lt;font color="#0000ff"&gt;public class&lt;/font&gt; Testando
{
  &lt;font color="#0000ff"&gt;public&lt;/font&gt; Testando() { }

  &lt;font color="#0000ff"&gt;public string&lt;/font&gt; LerAtributos(&lt;font color="#0000ff"&gt;object&lt;/font&gt; obj)
  {
    Type type = obj.GetType();

    MeuAtributo[] arrAtr = (MeuAtributo[]) type.GetCustomAttributes(&lt;font color="#0000ff"&gt;typeof&lt;/font&gt;(MeuAtributo),&lt;font color="#0000ff"&gt;false&lt;/font&gt;);
   
    Console.WriteLine(&amp;quot;Lendo os atributos...&amp;quot;);
  
    &lt;font color="#0000ff"&gt;if&lt;/font&gt; (arrAtr.Length != 0)
    {
      &lt;font color="#0000ff"&gt;foreach&lt;/font&gt; (MeuAtributo mat &lt;font color="#0000ff"&gt;in&lt;/font&gt; arrAtr)
      {
        mat.ExibirValores();
      }
    }
    &lt;font color="#0000ff"&gt;else&lt;/font&gt;
    {
      Console.WriteLine(&amp;quot;Os atrubutos não foram definidos!&amp;quot;)
    }
    Console.ReadLine();
  }
}
&lt;/pre&gt;&lt;br /&gt;

No exemplo acima, criamos uma classe chamada &amp;quot;Testando&amp;quot;, assinalada com o nosso atributo &amp;quot;MeuAtributo&amp;quot;. &lt;br /&gt;
Em seguida, implementamos um método para ler e exibir os valores dos atributos personalizados. Vamos examinar &lt;br /&gt;
agora o comportamento do nosso código. Em uma IDE for .Net de sua preferência, escreva o seguinte código &lt;br /&gt;
(que também pode ser facilmente escrito em outra linguagem, pórem preferimos o C#):

&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Exemplo&lt;/b&gt;

&lt;pre style="font-size:14px;"&gt;
&lt;font color="#0000ff"&gt;class&lt;/font&gt; Console
{
  [STAThread]
  &lt;font color="#0000ff"&gt;static void&lt;/font&gt; Main(&lt;font color="#0000ff"&gt;string&lt;/font&gt; [] args)
  {
     Testando t = new Testando();
     t.LerAtributos(t);
  }
}
&lt;/pre&gt;

Nota: No nosso exemplo de classe-atributo, escrevemos um método para ler os valores dos campos protegidos. &lt;br /&gt;
Porém, esta estratégia pode ser substituída (recomendado que o faça) pelo uso de propriedades, dando mais &lt;br /&gt;
flexibilidade, principalmente, na leitura dos dados.&lt;br /&gt;&lt;br /&gt;

Nível de ingerência de um atributo&lt;br /&gt;&lt;br /&gt;

Enquanto estamos escrevendo a nossa classe-atributo, podemos restringir a sua utilização a um elemento específico &lt;br /&gt;
em nosso código. &lt;br /&gt;&lt;br /&gt;
Por exemplo, podemos criar um atributo que &amp;quot;atue&amp;quot; em uma classe, outro específico para propriedades e assim por diante. 
&lt;br /&gt;Esta especificação é adquirida pela definição de um valor para o enum AttributeTargets do atributo AttributeUsage, 
&lt;br /&gt;declarado em nossa classe-atributo.

&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Exemplo&lt;/b&gt;

&lt;pre style="font-size:14px;"&gt;
[AttributeUsage(AttributeTargets.Class)]
&lt;font color="#0000ff"&gt;public class&lt;/font&gt; MeuAtributo: Attribute
&lt;/pre&gt;

&lt;br /&gt;
Com esta simples alteração em nosso código, criamos um atributo específico para classes. O que a princípio parece ser &lt;br /&gt;
redundante - um atributo de um atributo - ajuda-nos a categorizar os nossos códigos.&lt;br /&gt;

&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Conclusão&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;

Vimos neste artigo como escrever atributos personalizados, e como utilizá-los em nossas classes .Net. 
&lt;br /&gt;&lt;br /&gt;

Até a proxíma ....&lt;br /&gt;&lt;br /&gt;

Artur Araújo&lt;br /&gt;
&lt;a href="mailto:arturrj@gmail.com"&gt;Email&lt;/a&gt;&lt;br /&gt;
&lt;/font&gt;


&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=3725" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/arturrj/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>XML Serialization ...</title><link>http://pontonetpt.org/blogs/arturrj/archive/2006/06/30/P8380.aspx</link><pubDate>Fri, 30 Jun 2006 22:38:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:3724</guid><dc:creator>Artur Araujo S. Ribeiro</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/arturrj/rsscomments.aspx?PostID=3724</wfw:commentRss><comments>http://pontonetpt.org/blogs/arturrj/archive/2006/06/30/P8380.aspx#comments</comments><description>			&lt;h2&gt;XML Serialization&lt;/h2&gt;
			&lt;p&gt;A capacidade de uma instância de um objecto ser serializada para uma stream 
				pode ser muito útil na manutenção e troca de informação entre processos. Além 
				do SOAP e Binary, no namespace System.XML existe uma classe muito interessante, 
				XMLSerializer, que permite ao programador serializar, isto é, colocar em stream 
				uma instância de um objecto. O seguinte exemplo completo permite criar um 
				documento XML com a informação de um indivuduo, isto é, um objecto instanciado 
				da classe Pessoa.&lt;/p&gt;
			&lt;font size="2"&gt;&lt;/font&gt;
			&lt;p&gt;&lt;font size="2"&gt;[Serializable]&lt;br /&gt;
				&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
					class&lt;/font&gt;&lt;font size="2"&gt; Pessoa&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;{&lt;br /&gt;
				&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;     private&lt;/font&gt;&lt;font size="2"&gt;
				&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt; nome;&lt;br /&gt;
				&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;    
					&lt;/font&gt;private&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt;
					cidade;&lt;br /&gt;
				&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
					&lt;br /&gt;
					&lt;font color="#0000ff" size="2"&gt;     &lt;/font&gt;public&lt;/font&gt;&lt;font size="2"&gt;
					Pessoa()&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;/font&gt;
					{&lt;br /&gt;
					&lt;font color="#0000ff" size="2"&gt;     &lt;/font&gt;}&lt;/font&gt;&lt;/p&gt;
			&lt;p&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;    
					&lt;/font&gt;public&lt;/font&gt;&lt;font size="2"&gt; Pessoa(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt;
					n, &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt; c)&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;/font&gt;
					{&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
						&lt;/font&gt;&lt;/font&gt;nome =n;&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
						&lt;/font&gt;&lt;/font&gt;cidade =c;&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;/font&gt;
					}&lt;/font&gt;&lt;/p&gt;
			&lt;p&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;    
					&lt;/font&gt;public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt;
					Nome&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;/font&gt;
					{&lt;br /&gt;
				&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
						&lt;/font&gt;&lt;/font&gt;get&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
						&lt;/font&gt;&lt;/font&gt;{&lt;br /&gt;
				&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
							&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;return&lt;/font&gt;&lt;font size="2"&gt; nome;&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
						&lt;/font&gt;&lt;/font&gt;}&lt;br /&gt;
				&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
						&lt;/font&gt;&lt;/font&gt;set&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
						&lt;/font&gt;&lt;/font&gt;{&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
							&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;nome = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;value&lt;/font&gt;&lt;font size="2"&gt;;&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
						&lt;/font&gt;&lt;/font&gt;}&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;/font&gt;
					}&lt;/font&gt;&lt;/p&gt;
			&lt;p&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;    
					&lt;/font&gt;public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt;
					Cidade&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;/font&gt;
					{&lt;br /&gt;
				&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
						&lt;/font&gt;&lt;/font&gt;get&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
						&lt;/font&gt;&lt;/font&gt;{&lt;br /&gt;
				&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
							&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;return&lt;/font&gt;&lt;font size="2"&gt; cidade;&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
						&lt;/font&gt;&lt;/font&gt;}&lt;br /&gt;
				&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
						&lt;/font&gt;&lt;/font&gt;set&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
						&lt;/font&gt;&lt;/font&gt;{&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
							&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;cidade = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;value&lt;/font&gt;&lt;font size="2"&gt;;&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
						&lt;/font&gt;&lt;/font&gt;}&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;/font&gt;
					}&lt;/font&gt;&lt;/p&gt;
			&lt;p&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;    
					&lt;/font&gt;public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;static&lt;/font&gt;&lt;font size="2"&gt;
				&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;void&lt;/font&gt;&lt;font size="2"&gt; ExportarXML(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt;
					ficheiro, Pessoa p)&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;/font&gt;
					{&lt;br /&gt;
				&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
						&lt;/font&gt;&lt;/font&gt;FileStream fs = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt;
					FileStream(ficheiro,FileMode.Create);&lt;/font&gt;&lt;/p&gt;
			&lt;p&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
						&lt;/font&gt;&lt;/font&gt;XmlSerializer formatador = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
					new&lt;/font&gt;&lt;font size="2"&gt; XmlSerialize(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;typeof&lt;/font&gt;&lt;font size="2"&gt;(Pessoa));&lt;/font&gt;&lt;/p&gt;
			&lt;p&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
						&lt;/font&gt;&lt;/font&gt;formatador.Serialize(fs,p);&lt;/font&gt;&lt;/p&gt;
			&lt;p&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;font color="#0000ff" size="2"&gt;    
						&lt;/font&gt;&lt;/font&gt;fs.Close();&lt;/font&gt;&lt;/p&gt;
			&lt;p&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;/font&gt;}&lt;/font&gt;&lt;/p&gt;
			&lt;p&gt;&lt;font size="2"&gt;}&lt;/font&gt;&lt;/p&gt;
			&lt;p&gt;//Mais tarde usamos da seguinte forma para invocar o método ExportarXML:&lt;/p&gt;
			&lt;font size="2"&gt;&lt;/font&gt;
			&lt;p&gt;&lt;font size="2"&gt;Pessoa p1 = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt;
					Pessoa(&amp;quot;Ana&amp;quot;,&amp;quot;Porto&amp;quot;);&lt;/font&gt;&lt;/p&gt;
			&lt;p&gt;&lt;font size="2"&gt;Pessoa.ExportarXML(&amp;quot;C:\\puro.xml&amp;quot;,p1);&lt;/font&gt;&lt;/p&gt;
			&lt;p&gt;&lt;font size="2"&gt;Console.ReadLine();&lt;br /&gt;
					&lt;br /&gt;
					Artur Araújo&lt;/font&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=3724" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/arturrj/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Criptografando o viewState no .NET 2.0.</title><link>http://pontonetpt.org/blogs/arturrj/archive/2006/01/05/P6962.aspx</link><pubDate>Thu, 05 Jan 2006 06:15:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:3723</guid><dc:creator>Artur Araujo S. Ribeiro</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/arturrj/rsscomments.aspx?PostID=3723</wfw:commentRss><comments>http://pontonetpt.org/blogs/arturrj/archive/2006/01/05/P6962.aspx#comments</comments><description>&lt;p&gt;ASP.NET : Criptografando o viewState no .NET 2.0 &lt;br /&gt;&lt;br /&gt;O .NET 2.0 tornou muito simples a realização da criptografia do viewstate. O ViewState, mantido em campos hidden, ele não é criptografado por default, então apesar de difícil sua manipulação é possível e poderia gerar resultados indesejáveis. &lt;br /&gt;&lt;br /&gt;A realização da criptografia do viewState gera uma proteção adicional muito útil. No .NET 2.0 essa criptografia ficou bem simples de ser realizada. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Com esta colocação na tag @Page estamos determinando que o viewState de uma página seja criptografado. Podemos fazer isso também no web.config, para todas as páginas : &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Neste 2º exemplo todo o site terá o viewstate criptografado. &lt;br /&gt;&lt;br /&gt;Custom Controls podem também requisitar que o viewstate seja criptografado. Assim se um custom control estiver guardando no viewstate informações críticas pode solicitar a criptografia através da instrução Page.RegisterRequiresViewStateEncryption() &lt;br /&gt;&lt;br /&gt;Por isso que o ViewStateEncryptionMode também possui a opção AUTO, para só criptografar quando algum webControl solicitar &lt;br /&gt;&lt;br /&gt;[]&amp;#39;s &lt;/p&gt;
&lt;p&gt;Artur Araújo &lt;br /&gt;Framework 2.0&lt;br /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=3723" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/arturrj/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Como colocar acentos num ficheiro XML</title><link>http://pontonetpt.org/blogs/arturrj/archive/2005/12/28/P6922.aspx</link><pubDate>Wed, 28 Dec 2005 06:10:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:3722</guid><dc:creator>Artur Araujo S. Ribeiro</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/arturrj/rsscomments.aspx?PostID=3722</wfw:commentRss><comments>http://pontonetpt.org/blogs/arturrj/archive/2005/12/28/P6922.aspx#comments</comments><description>		&lt;table width="90%"&gt;
			&lt;tr&gt;
				&lt;td class="Title"&gt;Como colocar acentos num ficheiro XML
					&lt;hr /&gt;
				&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
				&lt;td class="description01"&gt;
					Criado por &lt;a href="http://www.pontonetpt.com/Artigos/Users_ShowProfile.aspx?user=rbfigueira" target="_blank"&gt;rbfigueira&lt;/a&gt; em Tuesday,
					&lt;br /&gt;
					November 16, 2004 (PST) Neste tutorial vamos aprender a simples tarefa de
					&lt;br /&gt;
					colocar acentos num ficheiro XML.
				&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
				&lt;td&gt; &lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
				&lt;td class="description01"&gt;
					Como colocar acentos num ficheiro XML&lt;br /&gt;
					Neste tutorial vamos aprender a simples tarefa de colocar acentos num ficheiro 
					XML.
					&lt;br /&gt;
					Uma vez que a língua portuguesa está cheia destes pequenos caractéres, seria 
					agradável
					&lt;br /&gt;
					poder inserir palavras em ficheiros XML acompanhadas dos respectivos 
					companheiros.&lt;br /&gt;
					Na aplicação Web Thalassa VII eu utilízei um ficheiro XML para armazenar várias
					&lt;br /&gt;
					localizações, ao tentar inserir uma palavra com acento obtive o seguinte erro:
				&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
				&lt;td&gt;&lt;img src="http://www.programando.net/Communities/Common/Images/Sections/artigos/thalassavii/artigo5/image002.jpg" border="0" alt="" /&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
				&lt;td class="description01"&gt;
					A solução para este problema consiste em colocar uma pequena linha de código no 
					topo do ficheiro XML pretendido.
				&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
				&lt;td&gt;&lt;img src="http://www.programando.net/Communities/Common/Images/Sections/artigos/thalassavii/artigo5/image004.jpg" border="0" alt="" /&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
				&lt;td&gt;
					&lt;font class="description01"&gt;Na imagem acima, reparem na linha azul no topo, o 
						truque é indicar que em que língua se encontra o conjunto de caractéres que 
						vamos usar no ficheiro. Resumindo, coloquem no topo do ficheiro xml: &lt;/font&gt;
						
						&lt;br /&gt;&lt;br /&gt;
						&lt;font color="#cc0000" face="tahoma" size="2px"&gt;&lt;b&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot; ?&amp;gt;&lt;/b&gt;&lt;/font&gt;
						&lt;br /&gt;&lt;br /&gt;
					
					&lt;font class="description01"&gt;É tudo, se usarem outra língua podem consultar 
						o site das normas ISO em &lt;a href="http://www.iso.org" target="_blank"&gt;http://www.iso.org&lt;/a&gt; para ver o código de codificação 
						correspondente. Se tiverem alguma dúvida, sugestão, ameaça ou dinheiro que 
						queiram deitar fora não hesitem em me contactar. &lt;/font&gt;
					&lt;br /&gt;
					&lt;br /&gt;
					&lt;font class="Title"&gt;Pedro Sousa&lt;/font&gt;&lt;br /&gt;
					&lt;a href="http://pedro.thalassavii.net" target="_blank"&gt;http://pedro.thalassavii.net&lt;/a&gt;
				&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/table&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=3722" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/arturrj/archive/tags/XML/default.aspx">XML</category></item></channel></rss>
