<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Debugando.com &#187; .Net</title>
	<atom:link href="http://www.debugando.com/categoria/programacao/dot-net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.debugando.com</link>
	<description>Noticias, dicas e tutorias do mundo da Tecnologia.</description>
	<lastBuildDate>Thu, 01 Dec 2011 23:44:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Conectando C# ao MySQL</title>
		<link>http://www.debugando.com/conectando-c-ao-mysql/</link>
		<comments>http://www.debugando.com/conectando-c-ao-mysql/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 20:42:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=635</guid>
		<description><![CDATA[


Quem está habituado a programar C# normalmente utiliza SQL Server como banco de dados, uma vez que ela está integrada no Visual Studio e, por isso mesmo, existe grande facilidade em trabalhar com as duas ferramentas.
Por vezes existem projetos em que se torna conveniente (por várias razões) utilizar outro tipo de base de dados. Seja [...]]]></description>
			<content:encoded><![CDATA[<p>Quem está habituado a programar C# normalmente utiliza SQL Server como banco de dados, uma vez que ela está integrada no Visual Studio e, por isso mesmo, existe grande facilidade em trabalhar com as duas ferramentas.</p>
<p>Por vezes existem projetos em que se torna conveniente (por várias razões) utilizar outro tipo de base de dados. Seja que banco de dados for, a sua integração é sempre diferente do SQL Server.</p>
<p>Neste caso vou mostrar como fazer a integração entre o C# e o MySQL.</p>
<p>Supondo que já existe uma instalação do MySQL na máquina, precisamos instalar um intermediário entre o C# e a base de dados. Neste caso necessitamos instalar o MySQL Connector NET.</p>
<p><a class="ext" href="http://dev.mysql.com/downloads/connector/net/6.0.html">Download</a></p>
<p>A <a class="ext" href="http://dev.mysql.com/downloadshttp://dev.mysql.com/downloads/connector/net/5.2.html">versão 5.2</a> já tem suporte ao Visual Studio 2008, mas eu vou utilizar a última versão (6.0).</p>
<p>Instalamos o Connector Net 6.0.</p>
<p>Devemos já ter uma base de dados com uma tabela (users por exemplo), em que os campos da tabela são: id, nome, email.</p>
<p>Como exemplo criamos um projecto Windows Forms Application.</p>
<p>Antes de mais nada, devemos fazer uma referência à classe que vai ligar o C# ao MySQL. Para isso vamos ao painel Solution Explorer, na raiz do projeto, clicamos com o lado direito do mouse e selecionamos Add Reference.</p>
<p><img src="http://conteudo.imasters.uol.com.br/13681/mysqlcsharp1.gif" alt="" /></p>
<p>Na primeira divisória (.NET) selecionamos a referência MySQL.Data e damos OK.</p>
<p>Não esquecer: incluir no início do código as classes:</p>
<p><em>using  System.Data; </em></p>
<p><em>using MySql.Data.MySqlClient;</em></p>
<p>Sem adicionar a referência à MySQL.Data, a classe MySql.Data.MySqlClient não será reconhecida.</p>
<p>Para exemplificar fazemos um formulário de inserção de dados (nome e e-mail) na base de dados.</p>
<p>No form colocamos duas caixas de texto, uma para o nome (txtNome) e outra para o e-mail (txtMail) e um botão que terá a ação de inserir os dados na base de dados.</p>
<p><img src="http://conteudo.imasters.uol.com.br/13681/mysqlcsharp2.gif" alt="" /></p>
<p>Vamos então definir, em primeiro lugar, o dataset e a string de conexão à base de dados.</p>
<div class="codigo">
<pre><em><code><span class="kwd">private</span><span class="pln"> </span><span class="typ">MySqlConnection</span><span class="pln"> bdConn</span><span class="pun">;</span><span class="pln"> </span><span class="com">//MySQL</span><span class="pln">
</span><span class="kwd">private</span><span class="pln"> </span><span class="typ">MySqlDataAdapter</span><span class="pln"> bdAdapter</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">private</span><span class="pln"> </span><span class="typ">DataSet</span><span class="pln"> bdDataSet</span><span class="pun">;</span><span class="pln"> </span><span class="com">//MySQL</span></code></em></pre>
</div>
<p><em>Na ação do botão:</em></p>
<div class="codigo">
<pre><em><code><span class="com">//Definição do dataset</span><span class="pln">
bdDataSet </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">DataSet</span><span class="pun">();</span><span class="pln">
 </span><span class="com">//Define string de conexão</span><span class="pln">
bdConn </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">MySqlConnection</span><span class="pun">(</span><span class="str">"Persist Security  Info=False;server=localhost;database=rfidapp;uid=root;server=localhost;database=rfidapp;uid=root;pwd=''"</span><span class="pun">);</span></code></em></pre>
</div>
<p><em>Neste caso a base de dados não tem password.</em></p>
<div class="codigo">
<pre><em><code><span class="com">//Abre conecção</span><span class="pln">
 </span><span class="kwd">try</span><span class="pun">{</span><span class="pln">
        bdConn</span><span class="pun">.</span><span class="typ">Open</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">catch</span><span class="pun">{</span><span class="pln">
 </span><span class="typ">MessageBox</span><span class="pun">.</span><span class="typ">Show</span><span class="pun">(</span><span class="str">"Impossível estabelecer conexão"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="com">//Verifica se a conexão está aberta</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">bdConn</span><span class="pun">.</span><span class="typ">State</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="typ">ConnectionState</span><span class="pun">.</span><span class="typ">Open</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        </span><span class="com">//Se estiver aberta insere os dados na BD</span><span class="pln">
</span><span class="typ">MySqlCommand</span><span class="pln"> commS </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">MySqlCommand</span><span class="pun">(</span><span class="str">"INSERT INTO regists VALUES('',\\'"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> txtNome </span><span class="pun">+</span><span class="pln"> </span><span class="str">"\\',\\'"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> txtMail </span><span class="pun">+</span><span class="pln"> </span><span class="str">"\\')"</span><span class="pun">,</span><span class="pln"> bdConn</span><span class="pun">);</span><span class="pln">
commS</span><span class="pun">.</span><span class="typ">BeginExecuteNonQuery</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></code></em></pre>
</div>
<p>Tome atenção na sintaxe do SQL para o MySQL (INSERT) que é um pouco diferente do C#/SQL Server.</p>
<p>Neste momento o formulário deverá  inserir dados no BD.</p>
<p><img src="http://www.pplware.com/wp-content/images/ico_04.jpg" alt="" width="32" height="35" />Fonte: <a href="http://imasters.uol.com.br/artigo/13681/mysql/conectando_c_ao_mysql/" target="_blank">Imasters</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/conectando-c-ao-mysql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Acesso básico a dados com LINQ to SQL</title>
		<link>http://www.debugando.com/acesso-basico-a-dados-com-linq-to-sql/</link>
		<comments>http://www.debugando.com/acesso-basico-a-dados-com-linq-to-sql/#comments</comments>
		<pubDate>Thu, 14 May 2009 14:51:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[ASP .NET]]></category>
		<category><![CDATA[LINQ]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=600</guid>
		<description><![CDATA[
O desenvolvimento de aplicações para acesso a banco  de dados usando a plataforma .NET não sofreu grandes alterações desde o seu  lançamento. Geralmente você começa definindo o seu banco de dados, tabelas,  relacionamentos, em seguida parte para a definição das classes de forma a  procurar representar o domínio do seu negócio [...]]]></description>
			<content:encoded><![CDATA[<div id="strConteudo">
<p>O desenvolvimento de aplicações para acesso a banco  de dados usando a plataforma .NET não sofreu grandes alterações desde o seu  lançamento. Geralmente você começa definindo o seu banco de dados, tabelas,  relacionamentos, em seguida parte para a definição das classes de forma a  procurar representar o domínio do seu negócio e finalmente usa os mesmos  conceitos abstratos básicos de programação: definindo objetos Connection, objetos Command,  objetos datareader, objetos  dataset etc.</p>
<p>Muitos desenvolvedores já têm sua biblioteca de  funções prontas ou usam recursos de terceiros ou mesmo da Microsoft, como os  Data Application Blocks.</p>
<p>Ficamos tão acostumados como uma forma de escrever  código que, muitas vezes, não percebemos que temos novos recursos à disposição, que  irão garantir um melhor desempenho e manutenção. Afinal, se está funcionando, é o  que importa, pensamos&#8230;</p>
<p>A partir da versão 3.0, e consolidada na versão 3.5  da plataforma .NET, temos um leque de novas funcionalidades que nos dão um ganho  muito grande de produtividade. Uma delas, o foco deste artigo, é o LINQo  SQ tL.</p>
<p>Neste artigo eu vou mostrar como usar os novos  recursos do LINQ to SQL para efetuar o mapeamento para tabelas de um  banco de dados SQL Server e, em seguida, usar os recursos da linguagem LINQ  de forma  ter um código enxuto e eficiente. Bem diferente da forma como  estávamos acostumados a fazer.</p>
<p>Vou criar uma aplicação web, mas poderia ser uma  aplicação windows forms, e usando a linguagem VB .NET, vou efetuar o mapeamento OR/M para uma tabela Alunos do banco de dados Teste.mdf  criado no SQL Server 2005 Express Edition, sem usar  o assistente e o descritor objeto Relacional disponível, dessa forma podemos  entender um pouco melhor como as coisas funcionam.</p>
<p>Como não é objetivo deste artigo, eu não vou mostrar  como criar o banco de dados e a tabela no Visual Web Developer 2008 Express,  mas essa é uma tarefa bem simples. Se você tiver dúvidas, consulte as referências  para maiores detalhes.</p>
<p>Abaixo temos o banco de dados Teste.mdf e a  tabela Alunos definida com os campos: id, nome e email, onde o  campo id é uma chave primária do tipo identity;</p>
<p>Logo depois temos a tabela exibindo alguns dados que eu  incluí para usar no projeto deste artigo.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12776/aspablq1.gif" alt="" /><img src="http://conteudo.imasters.uol.com.br/12776/aspablq2.gif" alt="" /></p>
<p>O banco de dados será copiado na pasta App_Data.</p>
<p>Em seguida defina o arquivo web.config a  string de conexão usada para acessar o banco de dados Teste.mdf:</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">connectionStrings</span><span class="pun">&gt;</span><span class="pln">
 </span><span class="pun">&lt;</span><span class="tag">add</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"connectionStringAlunos"</span><span class="pln">
</span><span class="atn">connectionString</span><span class="pun">=</span><span class="atv">"Data
Source=.\SQLEXPRESS;AttachDbFilename='C:\Documents and
Settings\macoratti\_
   Meus documentos\Visual Studio 2008\Projects\linq_Entities\linq_Entities\App_Data\Teste.mdf';_
   Integrated Security=True;User Instance=True"</span><span class="pln"> </span><span class="atn">providerName</span><span class="pun">=</span><span class="atv">"System.Data.SqlClient"</span><span class="pun">/&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">connectionStrings</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>Observe que temos o nome connectionStringAlunos  a string de conexão usada.</p>
<p><strong>Nota: Na sua máquina local a  string de conexão pode ser diferente, atente para este detalhe.</strong></p>
<p>No exemplo deste artigo eu vou usar o Visual Web  Developer 2008 Express Edition, que já dá suporte ao  LINQ to SQL e permite efetuar o mapeamento  objeto relacional.</p>
<p>Abra o VWD 2008 e crie um novo web site a  partir do menu File-&gt; New web site com o nome de acessoLINQ usando  a linguagem VB .NET;</p>
<p>A seguir a partir no menu Web Site -&gt; Add New  Item, selecione o template Class e informe o nome LINQ.vb  e clique em Add; (o arquivo será copiado na  pasta App_Code).</p>
<p>Antes de iniciar, clique com o botão direito do  mouse sobre o nome do projeto e selecione Add Reference e, a partir da  janela Add Reference, inclua a referência a  System.Data.Linq;</p>
<p><img src="http://conteudo.imasters.uol.com.br/12776/aspablq3.gif" alt="" /></p>
<p>Agora vamos criar a classe que vai efetuar o  mapeamento OR/M com a tabela Alunos do nosso banco de dados. Veja o  código a seguir:</p>
<div class="codigo">
<pre><em><code><span class="typ">Imports</span><span class="pln"> </span><span class="typ">System</span><span class="pln">
</span><span class="typ">Imports</span><span class="pln"> </span><span class="typ">System</span><span class="pun">.</span><span class="typ">Data</span><span class="pun">.</span><span class="typ">Linq</span><span class="pun">.</span><span class="typ">Mapping</span><span class="pln">

</span><span class="pun">&lt;</span><span class="typ">Table</span><span class="pun">(</span><span class="pln">name</span><span class="pun">:=</span><span class="str">"Alunos"</span><span class="pun">)&gt;</span><span class="pln"> _
</span><span class="typ">Public</span><span class="pln"> </span><span class="typ">Class</span><span class="pln"> aluno

    </span><span class="typ">Private</span><span class="pln"> _id </span><span class="typ">As</span><span class="pln"> </span><span class="typ">Integer</span><span class="pln">
    </span><span class="typ">Private</span><span class="pln"> _nome </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pln">
    </span><span class="typ">Private</span><span class="pln"> _email </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pln">

 </span><span class="pun">&lt;</span><span class="typ">Column</span><span class="pun">(</span><span class="typ">IsPrimaryKey</span><span class="pun">:=</span><span class="kwd">True</span><span class="pun">,</span><span class="pln"> </span><span class="typ">IsDbGenerated</span><span class="pun">:=</span><span class="kwd">True</span><span class="pun">)&gt;</span><span class="pln"> _
    </span><span class="typ">Public</span><span class="pln"> </span><span class="typ">Property</span><span class="pln"> </span><span class="typ">Id</span><span class="pun">()</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">Integer</span><span class="pln">
        </span><span class="typ">Get</span><span class="pln">
            </span><span class="typ">Return</span><span class="pln"> _id
        </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Get</span><span class="pln">
        </span><span class="typ">Set</span><span class="pun">(</span><span class="typ">ByVal</span><span class="pln"> value </span><span class="typ">As</span><span class="pln"> </span><span class="typ">Integer</span><span class="pun">)</span><span class="pln">
            _id </span><span class="pun">=</span><span class="pln"> value
        </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Set</span><span class="pln">
    </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Property</span><span class="pln">

    </span><span class="pun">&lt;</span><span class="typ">Column</span><span class="pun">(</span><span class="typ">CanBeNull</span><span class="pun">:=</span><span class="kwd">True</span><span class="pun">)&gt;</span><span class="pln"> _
    </span><span class="typ">Public</span><span class="pln"> </span><span class="typ">Property</span><span class="pln"> </span><span class="typ">Nome</span><span class="pun">()</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pln">
        </span><span class="typ">Get</span><span class="pln">
            </span><span class="typ">Return</span><span class="pln"> _nome
        </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Get</span><span class="pln">
        </span><span class="typ">Set</span><span class="pun">(</span><span class="typ">ByVal</span><span class="pln"> value </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pun">)</span><span class="pln">
            _nome </span><span class="pun">=</span><span class="pln"> value
        </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Set</span><span class="pln">
    </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Property</span><span class="pln">

    </span><span class="pun">&lt;</span><span class="typ">Column</span><span class="pun">(</span><span class="typ">CanBeNull</span><span class="pun">:=</span><span class="kwd">True</span><span class="pun">)&gt;</span><span class="pln"> _
    </span><span class="typ">Public</span><span class="pln"> </span><span class="typ">Property</span><span class="pln"> </span><span class="typ">Email</span><span class="pun">()</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pln">
        </span><span class="typ">Get</span><span class="pln">
            </span><span class="typ">Return</span><span class="pln"> _email
        </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Get</span><span class="pln">
        </span><span class="typ">Set</span><span class="pun">(</span><span class="typ">ByVal</span><span class="pln"> value </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pun">)</span><span class="pln">
            _email </span><span class="pun">=</span><span class="pln"> value
        </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Set</span><span class="pln">
    </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Property</span><span class="pln">

</span><span class="typ">End</span><span class="pln"> Class</span></code></em></pre>
</div>
<p>Definimos a      classe aluno mapeada para a tabela Alunos e definimos três propriedades:</p>
<ul>
<li>Id()</li>
<li>Nome()</li>
<li>Email()</li>
</ul>
<p>Cada uma delas sendo mapeada para a coluna      correspondente da tabela Alunos;</p>
<p>Com isso já teremos o acesso via entidade      criada no mapeamento.</p>
<p>A classe aluno representa a tabela      Alunos do banco de dados.</p>
<p>Vamos agora criar a interface na página  Default.aspx. Inclua a partir da ToolBox os  seguintes componentes nesta página:</p>
<ul>
<li>TextBox &#8211; ID=txtNome</li>
<li>Button &#8211; ID=btnProcurar</li>
<li>GridView &#8211; ID=gdvAlunos</li>
</ul>
<p>Defina o seguinte leiaute na página:</p>
<p><img src="http://conteudo.imasters.uol.com.br/12776/aspablq4.gif" alt="" /></p>
<p>Agora vamos definir o código associado ao evento  Click do botão Procurar:</p>
<div class="codigo">
<pre><code><span class="pln"> </span><em><span class="typ">Protected</span><span class="pln"> </span><span class="typ">Sub</span><span class="pln"> btnProcurar_Click</span><span class="pun">(</span><span class="typ">ByVal</span><span class="pln"> sender </span><span class="typ">As</span><span class="pln"> </span><span class="typ">Object</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ByVal</span><span class="pln"> e </span><span class="typ">As</span><span class="pln"> </span><span class="typ">System</span><span class="pun">.</span><span class="typ">EventArgs</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Handles</span><span class="pln"> btnProcurar</span><span class="pun">.</span><span class="typ">Click</span><span class="pln">

  </span><span class="typ">Dim</span><span class="pln"> conexao </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">ConfigurationManager</span><span class="pun">.</span><span class="typ">ConnectionStrings</span><span class="pun">(</span><span class="str">"connectionStringAlunos"</span><span class="pun">).</span><span class="typ">ConnectionString</span><span class="pun">.</span><span class="typ">ToString</span><span class="pln">
  </span><span class="typ">Dim</span><span class="pln"> db </span><span class="typ">As</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> </span><span class="typ">DataContext</span><span class="pun">(</span><span class="pln">conexao</span><span class="pun">)</span><span class="pln">
  </span><span class="typ">Dim</span><span class="pln"> tAlunos </span><span class="typ">As</span><span class="pln"> </span><span class="typ">Table</span><span class="pun">(</span><span class="typ">Of</span><span class="pln"> aluno</span><span class="pun">)</span><span class="pln">
        tAlunos </span><span class="pun">=</span><span class="pln"> db</span><span class="pun">.</span><span class="typ">GetTable</span><span class="pun">(</span><span class="typ">Of</span><span class="pln"> aluno</span><span class="pun">)()</span><span class="pln">
        gdvAlunos</span><span class="pun">.</span><span class="typ">DataSource</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> tAlunos</span><span class="pun">.</span><span class="typ">Where</span><span class="pun">(</span><span class="typ">Function</span><span class="pun">(</span><span class="pln">a</span><span class="pun">)</span><span class="pln"> a</span><span class="pun">.</span><span class="typ">Nome</span><span class="pun">.</span><span class="typ">Contains</span><span class="pun">(</span><span class="pln">txtNome</span><span class="pun">.</span><span class="typ">Text</span><span class="pun">))</span><span class="pln">
        gdvAlunos</span><span class="pun">.</span><span class="typ">DataBind</span><span class="pun">()</span><span class="pln">

 </span><span class="typ">End</span><span class="pln"> Sub</span></em></code></pre>
</div>
<p>1. Obtemos a string de conexão a partir do arquivo  web.config:</p>
<div class="codigo">
<pre><code><span class="pln"> </span><em><span class="typ">Dim</span><span class="pln"> conexao </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">ConfigurationManager</span><span class="pun">.</span><span class="typ">ConnectionStrings</span><span class="pun">(</span><span class="str">"connectionStringAlunos"</span><span class="pun">).</span><span class="typ">ConnectionString</span><span class="pun">.</span><span class="pln">ToString</span></em></code></pre>
</div>
<p>2. Criamos uma instância da classe DataContext  usando a conexão obtida;</p>
<div class="codigo">
<pre><em><code><span class="typ">Dim</span><span class="pln"> db </span><span class="typ">As</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> </span><span class="typ">DataContext</span><span class="pun">(</span><span class="pln">conexao</span><span class="pun">)</span></code></em></pre>
</div>
<p>3. Definimos um objeto tAlunos do tipo Table(Of )</p>
<div class="codigo">
<pre><code><span class="pln">     
</span><em><span class="typ">Dim</span><span class="pln"> tAlunos </span><span class="typ">As</span><span class="pln"> </span><span class="typ">Table</span><span class="pun">(</span><span class="typ">Of</span><span class="pln"> aluno</span><span class="pun">)</span></em></code></pre>
</div>
<p>4. Obtemos a tabela ALunos a partir do  contexto criado através do método GetTable&lt;&gt; que referencia o nome da  classe aluno e não nome da tabela;</p>
<div class="codigo">
<pre><em><code><span class="pln">tAlunos </span><span class="pun">=</span><span class="pln"> db</span><span class="pun">.</span><span class="typ">GetTable</span><span class="pun">(</span><span class="typ">Of</span><span class="pln"> aluno</span><span class="pun">)()</span></code></em></pre>
</div>
<p>5. Usamos uma expressão lambda onde selecionamos os  nomes contidos na tabela a partir da expressão informada no TextBox txtNome;</p>
<div class="codigo">
<pre><em><code><span class="pln">tAlunos</span><span class="pun">.</span><span class="typ">Where</span><span class="pun">(</span><span class="typ">Function</span><span class="pun">(</span><span class="pln">a</span><span class="pun">)</span><span class="pln"> a</span><span class="pun">.</span><span class="typ">Nome</span><span class="pun">.</span><span class="typ">Contains</span><span class="pun">(</span><span class="pln">txtNome</span><span class="pun">.</span><span class="typ">Text</span><span class="pun">))</span></code></em></pre>
</div>
<p>Executando o projeto, se nada for informado na  caixa de texto, todos os dados da tabela serão exibidos:</p>
<p><img src="http://conteudo.imasters.uol.com.br/12776/aspablq5.gif" alt="" /></p>
<p>Informando um critério qualquer teremos:</p>
<p><img src="http://conteudo.imasters.uol.com.br/12776/aspablq6.gif" alt="" /></p>
<p>Observe que não nos preocupamos em definir objetos connection, commands, datareaders ou datasets apenas instanciamos um  contexto a partir do qual tivemos acesso, a partir da classe mapeada para a tabela, aos dados usando uma consulta LINQ.</p>
<p>O código ficou mais enxuto e tivemos menos  trabalho. E isso sem usar o assistente; com ele o trabalho de gerar a classe não  seria necessário. Devemos portanto conhecer os novos recursos para saber avaliar  quando usá-los para obtermos um produto final mais refinado.</p>
<p>Aguarde novos artigos sobre o assunto&#8230;</p>
<p>Pegue o projeto completo aqui: <a href="http://www.macoratti.net/09/05/acessoLINQ.zip"> acessoLINQ.zip</a></p>
<p><strong>Referências:</strong></p>
<ul>
<li>Veja os artigos da seção:<a href="http://www.macoratti.net/indlinq.htm"> LINQ</a></li>
<li><a class="l" href="http://www.macoratti.net/vbn_ssms.htm"> Usando o SQL Server Management Studio</a></li>
<li><a class="l" href="http://www.macoratti.net/sqlsv_bd.htm"> <em>Criando</em> um   <em>Banco de dados</em> no SQL    Server</a></li>
<li><a class="l" href="http://www.macoratti.net/08/05/vbn_cdcl.htm"> VB 2008 &#8211; Cadastro de Alunos</a></li>
<li><a class="l" href="http://www.macoratti.net/08/05/lnq_cbf3.htm"> ASP .NET &#8211; Usando LINQ &#8211; Expressões   <em>Lambda</em></a></li>
<li><a class="l" href="http://www.macoratti.net/08/10/asp_lqdb2.htm"> ASP .NET &#8211; Usando LINQ para manutenção de dados</a></li>
<li><a class="l" href="http://www.macoratti.net/08/06/vbn_psv3.htm"> VB .NET &#8211; Protótipo para sistema de vendas em LINQ</a></li>
</ul>
<p><img src="http://www.pplware.com/wp-content/images/ico_04.jpg" alt="" width="32" height="35" />Fonte: <a href="http://imasters.uol.com.br/artigo/12776/aspnet/acesso_basico_a_dados_com_linq_to_sql/" target="_blank">Imasters</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/acesso-basico-a-dados-com-linq-to-sql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP .NET &#8211; Filtrando e exibindo dados XML com LINQ</title>
		<link>http://www.debugando.com/asp-net-filtrando-e-exibindo-dados-xml-com-linq/</link>
		<comments>http://www.debugando.com/asp-net-filtrando-e-exibindo-dados-xml-com-linq/#comments</comments>
		<pubDate>Thu, 07 May 2009 16:52:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[ASP .NET]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=591</guid>
		<description><![CDATA[O LINQ to XML é um provedor de dados LINQ que é implementado no namespace System.Xml.LINQ a partir da versão 3.5 da plataforma .NET. Ele fornece um modelo de programação que permite ler, construir e escrever dados XML.
Você pode usar LINQ To XML para realizar consultas  LINQ sobre dados no formato XML que podem [...]]]></description>
			<content:encoded><![CDATA[<p>O LINQ to XML é um provedor de dados LINQ que é implementado no namespace System.Xml.LINQ a partir da versão 3.5 da plataforma .NET. Ele fornece um modelo de programação que permite ler, construir e escrever dados XML.</p>
<p>Você pode usar LINQ To XML para realizar consultas  LINQ sobre dados no formato XML que podem ser retornados do arquivo de sistemas, de uma URL HTTP remota, de um web service ou partir de qualquer XML em memória existente.</p>
<p>O objetivo será acessar uma fonte de dados XML exibindo o seu conteúdo em uma página ASP .NET e filtrar informações com base em um critério usando LINQ to XML.</p>
<p>Abaixo temos a tela de apresentação inicial da  aplicação e ao lado o filtro aplicado usando como critério a cidade selecionada  no controle dropdownlist.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12697/asplqfx1.gif" alt="" /><img src="http://conteudo.imasters.uol.com.br/12697/asplqfx2.gif" alt="" /></p>
<p>Eu vou usar o Visual Web Developer 2008 Express Edition (VWD 2008) no exemplo deste artigo.</p>
<p>Vamos abrir o VWD 2008 e no menu File selecionar New Web Site selecionando o template ASP .NET Web Site, a linguagem C# , informar o nome LINQ_xml e clicar no botão OK;</p>
<p>Com o web site criado, vamos definir uma fonte de dados XML no projeto. Primeiro, devemos criar a pasta App_Data clicando com o botão direito do mouse sobre o nome do projeto e selecionando add ASP .NET Folder -&gt; App_Data;</p>
<p>A seguir, clique com o botão direito sobre a pasta App_Data e selecione Add New Item;</p>
<p>A seguir, selecione o template XML File, informe o nome Clientes.xml e clique no botão Add;</p>
<p><img src="http://conteudo.imasters.uol.com.br/12697/asplqfx3.gif" alt="" /></p>
<p>A seguir, no editor XML que será aberto, defina a estrutura do arquivo XML conforme abaixo:</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;?</span><span class="pln">xml version</span><span class="pun">=</span><span class="str">"1.0"</span><span class="pln"> encoding</span><span class="pun">=</span><span class="str">"utf-8"</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">

</span><span class="pun">&lt;</span><span class="tag">Clientes</span><span class="pun">&gt;</span><span class="pln">

 </span><span class="pun">&lt;</span><span class="tag">Cliente</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="tag">Nome</span><span class="pun">&gt;</span><span class="pln">Macoratti</span><span class="pun">&lt;/</span><span class="tag">Nome</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="tag">Cidade</span><span class="pun">&gt;</span><span class="pln">Brasilia</span><span class="pun">&lt;/</span><span class="tag">Cidade</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="tag">Idade</span><span class="pun">&gt;</span><span class="pln">37</span><span class="pun">&lt;/</span><span class="tag">Idade</span><span class="pun">&gt;</span><span class="pln">
 </span><span class="pun">&lt;/</span><span class="tag">Cliente</span><span class="pun">&gt;</span><span class="pln">

 </span><span class="pun">&lt;</span><span class="tag">Cliente</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="tag">Nome</span><span class="pun">&gt;</span><span class="pln">Jessica</span><span class="pun">&lt;/</span><span class="tag">Nome</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="tag">Cidade</span><span class="pun">&gt;</span><span class="pln">Santos</span><span class="pun">&lt;/</span><span class="tag">Cidade</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="tag">Idade</span><span class="pun">&gt;</span><span class="pln">19</span><span class="pun">&lt;/</span><span class="tag">Idade</span><span class="pun">&gt;</span><span class="pln">
 </span><span class="pun">&lt;/</span><span class="tag">Cliente</span><span class="pun">&gt;</span><span class="pln">

 </span><span class="pun">&lt;</span><span class="tag">Cliente</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="tag">Nome</span><span class="pun">&gt;</span><span class="pln">Jefferson</span><span class="pun">&lt;/</span><span class="tag">Nome</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="tag">Cidade</span><span class="pun">&gt;</span><span class="pln">Marilia</span><span class="pun">&lt;/</span><span class="tag">Cidade</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="tag">Idade</span><span class="pun">&gt;</span><span class="pln">17</span><span class="pun">&lt;/</span><span class="tag">Idade</span><span class="pun">&gt;</span><span class="pln">
 </span><span class="pun">&lt;/</span><span class="tag">Cliente</span><span class="pun">&gt;</span><span class="pln">

 </span><span class="pun">&lt;</span><span class="tag">Cliente</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="tag">Nome</span><span class="pun">&gt;</span><span class="pln">Janice</span><span class="pun">&lt;/</span><span class="tag">Nome</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="tag">Cidade</span><span class="pun">&gt;</span><span class="pln">Campinas</span><span class="pun">&lt;/</span><span class="tag">Cidade</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="tag">Idade</span><span class="pun">&gt;</span><span class="pln">13</span><span class="pun">&lt;/</span><span class="tag">Idade</span><span class="pun">&gt;</span><span class="pln">
 </span><span class="pun">&lt;/</span><span class="tag">Cliente</span><span class="pun">&gt;</span><span class="pln">

</span><span class="pun">&lt;/</span><span class="tag">Clientes</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>Agora, vamos criar a interface com o usuário usando o formulário Default.aspx.</p>
<p>Selecione a página Default.aspx e, no modo de Design a partir do menu Table -&gt; Insert Table, inclua uma tabela com quatro linhas e duas colunas e inclua os seguintes componentes :</p>
<ul>
<li>Button : ID =butGetXML</li>
<li>Button : ID = butFiltraXML</li>
<li>DropDownList : ID = ddlCidade</li>
<li>Literal : ID = litXMLDados</li>
</ul>
<p>O leiaute do formulário web pode ser visto abaixo:</p>
<p><img src="http://conteudo.imasters.uol.com.br/12697/asplqfx4.gif" alt="" /></p>
<p>Vamos definir o código no arquivo Default.aspx.cs (code-behind).</p>
<p>A primeira coisa a fazer é declarar os namespaces para acessar os recursos do XML e do LINQ:</p>
<p><em>using System.Xml.Linq;<br />
using System.Xml;</em></p>
<p>No evento Load da página vamos verificar  se ocorre um postback e chamar a rotina carregaDLL para preencher  o controle dropdownlist;</p>
<div class="codigo">
<pre><em><code><span class="kwd">protected</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> Page_Load</span><span class="pun">(</span><span class="kwd">object</span><span class="pln"> sender</span><span class="pun">,</span><span class="pln"> </span><span class="typ">EventArgs</span><span class="pln"> e</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="typ">IsPostBack</span><span class="pun">)</span><span class="pln">
            carregaDLL</span><span class="pun">();</span><span class="pln">
    </span><span class="pun">}</span></code></em></pre>
</div>
<p>O código da rotina carregaDLL() é dado a  seguir. Estamos instanciando um XmlDocument e usando o seu método Load  para carregar o arquivo XML;</p>
<div class="codigo">
<pre><em><code><span class="kwd">protected</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> carregaDLL</span><span class="pun">()</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        </span><span class="typ">XmlDocument</span><span class="pln"> doc </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">XmlDocument</span><span class="pun">();</span><span class="pln">
        doc</span><span class="pun">.</span><span class="typ">Load</span><span class="pun">(</span><span class="typ">Server</span><span class="pun">.</span><span class="typ">MapPath</span><span class="pun">(</span><span class="str">"App_Data/Clientes.xml"</span><span class="pun">));</span><span class="pln">
        </span><span class="typ">XmlNodeList</span><span class="pln"> nodeList </span><span class="pun">=</span><span class="pln"> doc</span><span class="pun">.</span><span class="typ">SelectNodes</span><span class="pun">(</span><span class="str">"Clientes/Cliente"</span><span class="pun">);</span><span class="pln">

        </span><span class="kwd">foreach</span><span class="pln"> </span><span class="pun">(</span><span class="typ">XmlNode</span><span class="pln"> node </span><span class="kwd">in</span><span class="pln"> nodeList</span><span class="pun">)</span><span class="pln">
            ddlCidade</span><span class="pun">.</span><span class="typ">Items</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">ListItem</span><span class="pun">(</span><span class="pln">node</span><span class="pun">.</span><span class="typ">SelectSingleNode</span><span class="pun">(</span><span class="str">"Cidade"</span><span class="pun">).</span><span class="typ">InnerText</span><span class="pun">));</span><span class="pln">
    </span><span class="pun">}</span></code></em></pre>
</div>
<p>Agora no evento Click do botão Filtrar  XML temos o seguinte código:</p>
<div class="codigo">
<pre><em><code><span class="pln"> </span><span class="kwd">protected</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> butFiltraXML_Click</span><span class="pun">(</span><span class="kwd">object</span><span class="pln"> sender</span><span class="pun">,</span><span class="pln"> </span><span class="typ">EventArgs</span><span class="pln"> e</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
    </span><span class="typ">XDocument</span><span class="pln"> xmlDoc </span><span class="pun">=</span><span class="pln"> </span><span class="typ">XDocument</span><span class="pun">.</span><span class="typ">Load</span><span class="pun">(</span><span class="typ">Server</span><span class="pun">.</span><span class="typ">MapPath</span><span class="pun">(</span><span class="str">"App_Data/Clientes.xml"</span><span class="pun">));</span><span class="pln">

  </span><span class="kwd">var</span><span class="pln"> clientes </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">from</span><span class="pln"> cliente </span><span class="kwd">in</span><span class="pln"> xmlDoc</span><span class="pun">.</span><span class="typ">Descendants</span><span class="pun">(</span><span class="str">"Cliente"</span><span class="pun">)</span><span class="pln">
                              </span><span class="kwd">where</span><span class="pln"> cliente</span><span class="pun">.</span><span class="typ">Element</span><span class="pun">(</span><span class="str">"Cidade"</span><span class="pun">).</span><span class="typ">Value</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> ddlCidade</span><span class="pun">.</span><span class="typ">SelectedItem</span><span class="pun">.</span><span class="typ">ToString</span><span class="pun">()</span><span class="pln">
                             </span><span class="kwd">select</span><span class="pln"> </span><span class="kwd">new</span><span class="pln">
                             </span><span class="pun">{</span><span class="pln">
                                </span><span class="typ">Nome</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> cliente</span><span class="pun">.</span><span class="typ">Element</span><span class="pun">(</span><span class="str">"Nome"</span><span class="pun">).</span><span class="typ">Value</span><span class="pun">,</span><span class="pln">
                                </span><span class="typ">Cidade</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> cliente</span><span class="pun">.</span><span class="typ">Element</span><span class="pun">(</span><span class="str">"Cidade"</span><span class="pun">).</span><span class="typ">Value</span><span class="pun">,</span><span class="pln">
                                </span><span class="typ">Idade</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> cliente</span><span class="pun">.</span><span class="typ">Element</span><span class="pun">(</span><span class="str">"Idade"</span><span class="pun">).</span><span class="typ">Value</span><span class="pun">,</span><span class="pln">
                             </span><span class="pun">};</span><span class="pln">

        litXMLDados</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">""</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">foreach</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">var</span><span class="pln"> cliente </span><span class="kwd">in</span><span class="pln"> clientes</span><span class="pun">)</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
            litXMLDados</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> litXMLDados</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">"Nome  : "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> cliente</span><span class="pun">.</span><span class="typ">Nome</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">"&lt;br /&gt;"</span><span class="pun">;</span><span class="pln">
            litXMLDados</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> litXMLDados</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">"Cidade: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> cliente</span><span class="pun">.</span><span class="typ">Cidade</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">"&lt;br /&gt;"</span><span class="pun">;</span><span class="pln">
            litXMLDados</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> litXMLDados</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">"Idade : "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> cliente</span><span class="pun">.</span><span class="typ">Idade</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">"&lt;br /&gt;&lt;br /&gt;"</span><span class="pun">;</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">

        </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">litXMLDados</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="str">""</span><span class="pun">)</span><span class="pln">
            litXMLDados</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Nada encontrado."</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span></code></em></pre>
</div>
<p>Neste código, estamos usando uma consulta LINQ para filtrar as informações do arquivo Clientes.xml. Observe que estamos usando o item  selecionado do controle DropDownList para filtrar  as informações por cidade selecionada.</p>
<p>A seguir temos o código do evento Click do  botão &#8211; Exibir XML &#8211; que obtém as informações do arquivo xml e as exibe;</p>
<div class="codigo">
<pre><em><code><span class="kwd">protected</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> butGetXML_Click</span><span class="pun">(</span><span class="kwd">object</span><span class="pln"> sender</span><span class="pun">,</span><span class="pln"> </span><span class="typ">EventArgs</span><span class="pln"> e</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
  </span><span class="typ">XDocument</span><span class="pln"> xmlDoc </span><span class="pun">=</span><span class="pln"> </span><span class="typ">XDocument</span><span class="pun">.</span><span class="typ">Load</span><span class="pun">(</span><span class="typ">Server</span><span class="pun">.</span><span class="typ">MapPath</span><span class="pun">(</span><span class="str">"App_Data/Clientes.xml"</span><span class="pun">));</span><span class="pln">

    </span><span class="kwd">var</span><span class="pln"> clientes </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">from</span><span class="pln"> cliente </span><span class="kwd">in</span><span class="pln"> xmlDoc</span><span class="pun">.</span><span class="typ">Descendants</span><span class="pun">(</span><span class="str">"Cliente"</span><span class="pun">)</span><span class="pln">
                             </span><span class="kwd">select</span><span class="pln"> </span><span class="kwd">new</span><span class="pln">
                             </span><span class="pun">{</span><span class="pln">
                                   </span><span class="typ">Nome</span><span class="pln"> </span><span class="pun">=</span><span class="pln">  cliente</span><span class="pun">.</span><span class="typ">Element</span><span class="pun">(</span><span class="str">"Nome"</span><span class="pun">).</span><span class="typ">Value</span><span class="pun">,</span><span class="pln">
                                   </span><span class="typ">Cidade</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> cliente</span><span class="pun">.</span><span class="typ">Element</span><span class="pun">(</span><span class="str">"Cidade"</span><span class="pun">).</span><span class="typ">Value</span><span class="pun">,</span><span class="pln">
                                   </span><span class="typ">Idade</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> cliente</span><span class="pun">.</span><span class="typ">Element</span><span class="pun">(</span><span class="str">"Idade"</span><span class="pun">).</span><span class="typ">Value</span><span class="pun">,</span><span class="pln">
                             </span><span class="pun">};</span><span class="pln">

        litXMLDados</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">""</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">foreach</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">var</span><span class="pln"> cliente </span><span class="kwd">in</span><span class="pln"> clientes</span><span class="pun">)</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
            litXMLDados</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> litXMLDados</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">"Nome  : "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> cliente</span><span class="pun">.</span><span class="typ">Nome</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">"&lt;br /&gt;"</span><span class="pun">;</span><span class="pln">
            litXMLDados</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> litXMLDados</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">"Cidade: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> cliente</span><span class="pun">.</span><span class="typ">Cidade</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">"&lt;br /&gt;"</span><span class="pun">;</span><span class="pln">
            litXMLDados</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> litXMLDados</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">"Idade : "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> cliente</span><span class="pun">.</span><span class="typ">Idade</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">"&lt;br /&gt;&lt;br /&gt;"</span><span class="pun">;</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">

        </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">litXMLDados</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="str">""</span><span class="pun">)</span><span class="pln">
            litXMLDados</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Nada encontrado."</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span></code></em></pre>
</div>
<p>Aqui, novamente, usamos uma consulta LINQ para  selecionar informações do arquivo Clientes.xml.</p>
<p>Note que o código é bem simples, principalmente  usando os recursos do LINQ to XML.</p>
<p>Pegue o projeto completo aqui: <a class="ext" href="http://www.macoratti.net/09/04/LINQ_xml.zip">LINQ_xml.zip</a></p>
<p><img src="http://www.pplware.com/wp-content/images/ico_04.jpg" alt="" width="32" height="35" />Fonte: <a href="http://imasters.uol.com.br/artigo/12697/aspnet/asp_net_-_filtrando_e_exibindo_dados_xml_com_linq/" target="_blank">Imasters</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/asp-net-filtrando-e-exibindo-dados-xml-com-linq/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crie Arquivos .ZIP com ASP.NET</title>
		<link>http://www.debugando.com/crie-arquivos-zip-com-aspnet/</link>
		<comments>http://www.debugando.com/crie-arquivos-zip-com-aspnet/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 22:11:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[.ZIP]]></category>
		<category><![CDATA[ASP .NET]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=558</guid>
		<description><![CDATA[Neste artigo vou mostrar como criar arquivos .ZIP e como descompactar utilizando o ASP.net. Imagem de exemplo do exemplo deste artigo.
Um pouco de conhecimento antes de programarmos
Arquivos .zip é um formato muito conhecido. Em Matemática, um dos modos de se obter uma compressão de arquivos, é através de Transformada de Fourier. A compressão e compactação [...]]]></description>
			<content:encoded><![CDATA[<p>Neste artigo vou mostrar como criar arquivos .ZIP e como descompactar utilizando o ASP.net. <img src="http://conteudo.imasters.uol.com.br/7575/zipcomaspnet_img01.gif" alt="Imagem de exemplo do exemplo deste artigo." /><span class="imgdesc">Imagem de exemplo do exemplo deste artigo.</span></p>
<h3>Um pouco de conhecimento antes de programarmos</h3>
<p>Arquivos .zip é um formato muito conhecido. Em Matemática, um dos modos de se obter uma compressão de arquivos, é através de Transformada de Fourier. A compressão e compactação são importantíssimas para conseguirmos informações em tempos menores de transmissão, de forma mais barata possível.</p>
<p><strong>Qual a diferença entre Compressão e Compactação?</strong></p>
<p>A principal diferença entre os dois termos é que compactação não há perda de informação, enquanto que na compressão há perda. O Formato .MP3 é um exemplo de Compressão, pois há perda de informação, embora nossos ouvidos não notem muito. Mesmo entre os Mp3, temos aqueles com maior qualidade (menos perda) e os de menores qualidades (maior perda).</p>
<p>Entre os métodos mais conhecidos de compactação estão:</p>
<ul>
<li>Codificação por carreira</li>
<li>Codificação por Shannon-Fano</li>
<li>Codificação de Huffman (muito utilizado para compactar texto)</li>
<li>Codificação de Lempel-Ziv-Welch (LZW)</li>
<li>Codificação aritmética</li>
</ul>
<p>Entre os métodos mais conhecidos de compressão estão:</p>
<ul>
<li>Redução do domínio</li>
<li>Redução do espaço de quantização</li>
<li>Codificação preditiva</li>
<li>Codificação por sub-bandas</li>
<li>Codificação por transformadas</li>
<li>Quantização vetorial</li>
</ul>
<h3>Pré-requisitos</h3>
<p>Este artigo foi montado nas configurações abaixo. Não foi testado em outros ambientes.</p>
<ul>
<li>Framework ASP.NET 2.0 com VB.net</li>
<li>Visual Studio 2005.</li>
</ul>
<h3>Mãos a obra</h3>
<p>Clique <a class="ext" href="http://conteudo.imasters.uol.com.br/7575/ZipComAspNet.zip">aqui </a>para dar download no projeto de exemplo.</p>
<p>Primeiro, crie uma solução no seu VisualStudio. Adicione um novo projeto Web, e referencie a Biblioteca SharpZLib.</p>
<p>Caso você esteja usa utilizando a versão Express, crie um novo website, e coloque ICSharpCode.SharpZipLib.dll na pasta /bin.</p>
<p>Em seguida, vamos criar uma página chamada zip.ASPX.</p>
<h3>Compactando Diretório Inteiro</h3>
<p>Para compactar o diretório, você terá que informar o diretório de origem e o arquivo de destino.</p>
<div class="codigo">
<pre><code><span class="pln">
</span><em><span class="str">''' &lt;summary&gt;
    '''</span><span class="pln"> </span><span class="typ">Evento</span><span class="pln"> </span><span class="kwd">do</span><span class="pln"> bot</span><span class="pun">ã</span><span class="pln">o</span><span class="pun">,</span><span class="pln"> gerar diret</span><span class="pun">ó</span><span class="pln">rio
    </span><span class="str">''' &lt;/summary&gt;
    Protected Sub btnGerar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnGerar.Click
        gerarZipDiretorio(txtOrigem.Text, txtDestino.Text)
        subInitDescompactarArquivos()
    End Sub

    '''</span><span class="pln"> </span><span class="pun">&lt;</span><span class="pln">summary</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="str">''' Este método gera um zip, a partir de um diretório
    '''</span><span class="pln"> </span><span class="pun">&lt;</span><span class="str">/summary&gt;
    ''' &lt;param name="sDiretorioOrigem"&gt;
    ''' Diretório que será zipado
    ''' &lt;/</span><span class="pln">param</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="str">''' &lt;param name="sDiretorioDestino"&gt;
    '''</span><span class="pln"> </span><span class="typ">Diret</span><span class="pun">ó</span><span class="pln">rio que receber</span><span class="pun">á</span><span class="pln"> o arquivo zipado
    </span><span class="str">''' &lt;/param&gt;
    '''</span><span class="pln"> </span><span class="pun">&lt;</span><span class="pln">remarks</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="str">''' &lt;/remarks&gt;
    Public Sub gerarZipDiretorio(ByVal sDiretorioOrigem As String, ByVal sDiretorioDestino As String)

        Dim sz As New FastZip()
        Dim sArquivoZip As String = String.Empty

        '</span><span class="pln"> </span><span class="typ">Aqui</span><span class="pln"> vou criar um nome </span><span class="kwd">do</span><span class="pln"> arquivo</span><span class="pun">,</span><span class="pln"> com </span><span class="lit">6</span><span class="pln"> caracteres rand</span><span class="pun">ô</span><span class="pln">micos</span><span class="pun">.</span><span class="pln">
        </span><span class="str">' O Guid é um método do .net que gera string aleatórias únicas, baseada na hora e no
        '</span><span class="pln"> endere</span><span class="pun">ç</span><span class="pln">o MAC na m</span><span class="pun">á</span><span class="pln">quina gerada</span><span class="pun">.</span><span class="pln">
        sArquivoZip </span><span class="pun">=</span><span class="pln"> </span><span class="str">"MeuZip"</span><span class="pln"> </span><span class="pun">&amp;</span><span class="pln"> </span><span class="typ">Left</span><span class="pun">(</span><span class="typ">Guid</span><span class="pun">.</span><span class="typ">NewGuid</span><span class="pun">.</span><span class="typ">ToString</span><span class="pun">,</span><span class="pln"> </span><span class="lit">6</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&amp;</span><span class="pln"> </span><span class="str">".zip"</span><span class="pln">

        </span><span class="str">' Só um tratamento para garantir mais estabilidade
        If Right(sDiretorioOrigem, 1) &lt;&gt; "\" Then
            sDiretorioOrigem = sDiretorioOrigem &amp; "\"
        End If

        '</span><span class="pln"> S</span><span class="pun">ó</span><span class="pln"> um tratamento para garantir mais estabilidade
        </span><span class="typ">If</span><span class="pln"> </span><span class="typ">Right</span><span class="pun">(</span><span class="pln">sDiretorioDestino</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&lt;&gt;</span><span class="pln"> </span><span class="str">"\" Then
            sDiretorioDestino = sDiretorioDestino &amp; "</span><span class="pun">\</span><span class="str">"
        End If

        If Not Directory.Exists(sDiretorioDestino) Then
            lblErro.Text = "</span><span class="pln">O </span><span class="typ">Diret</span><span class="pun">ó</span><span class="pln">rio de </span><span class="typ">Destino</span><span class="pln"> informado n</span><span class="pun">ã</span><span class="pln">o existe</span><span class="pun">:</span><span class="pln"> </span><span class="pun">&lt;</span><span class="pln">br </span><span class="pun">/&gt;</span><span class="str">" &amp; sDiretorioDestino
            Exit Sub
        End If

        If Not Directory.Exists(sDiretorioOrigem) Then
            lblErro.Text = "</span><span class="pln">O </span><span class="typ">Diret</span><span class="pun">ó</span><span class="pln">rio de </span><span class="typ">Origem</span><span class="pln"> informado n</span><span class="pun">ã</span><span class="pln">o existe</span><span class="pun">:</span><span class="pln"> </span><span class="pun">&lt;</span><span class="pln">br </span><span class="pun">/&gt;</span><span class="str">" &amp; sDiretorioOrigem
            Exit Sub
        End If

        sz.CreateZip(sDiretorioDestino &amp; sArquivoZip, sDiretorioOrigem &amp; "" &amp; "</span><span class="pun">\</span><span class="str">", True, "", "")

        ' Aqui eu habilito o download do arquivo.
        ' Muito útil se você quiser salvar em diretórios protegidos
        ' Ou não acessível pela raíz do seu projeto web.
        HttpContext.Current.Response.TransmitFile(sDiretorioDestino &amp; sArquivoZip)

        ' "</span><span class="pln">Limpo</span><span class="str">" o objeto
        sz = Nothing

    End Sub</span></em></code></pre>
</div>
<p><strong>Obs.:</strong></p>
<p>Você pode definir uma senha para seu .zip, utilizando a propriedade &#8220;password&#8221;.</p>
<h3>Compactando Somente um Arquivo</h3>
<p>Para compactar somente um arquivo, você terá que informar o arquivo a ser compactado, e o diretório de destino.</p>
<div class="codigo">
<pre><code><span class="pln">
<em>    </em></span><em><span class="str">''' &lt;summary&gt;
    '''</span><span class="pln"> </span><span class="typ">Evento</span><span class="pln"> </span><span class="kwd">do</span><span class="pln"> bot</span><span class="pun">ã</span><span class="pln">o gerar </span><span class="typ">Arquivo</span><span class="pln">
    </span><span class="str">''' &lt;/summary&gt;
    Protected Sub btnGerarArquivo_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnGerarArquivo.Click
        gerarZipArquivo(txtArquivoOrigem.Text, txtArquivoDestino.Text)
        subInitDescompactarArquivos()
    End Sub

    '''</span><span class="pln"> </span><span class="pun">&lt;</span><span class="pln">summary</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="str">''' Este método gera um zip, a partir de um diretório
    '''</span><span class="pln"> </span><span class="pun">&lt;</span><span class="str">/summary&gt;
    ''' &lt;param name="sArquivoOrigem"&gt;
    ''' Arquivo que será zipado
    ''' &lt;/</span><span class="pln">param</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="str">''' &lt;param name="sDiretorioDestino"&gt;
    '''</span><span class="pln"> </span><span class="typ">Diret</span><span class="pun">ó</span><span class="pln">rio que receber</span><span class="pun">á</span><span class="pln"> o arquivo zipado
    </span><span class="str">''' &lt;/param&gt;
    '''</span><span class="pln"> </span><span class="pun">&lt;</span><span class="pln">remarks</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="str">''' &lt;/remarks&gt;
    Public Sub gerarZipArquivo(ByVal sArquivoOrigem As String, ByVal sDiretorioDestino As String)

        Dim sz As New FastZip()
        Dim sArquivoZip As String = String.Empty

        '</span><span class="pln"> </span><span class="typ">Aqui</span><span class="pln"> vou criar um nome </span><span class="kwd">do</span><span class="pln"> arquivo</span><span class="pun">,</span><span class="pln"> com </span><span class="lit">6</span><span class="pln"> caracteres rand</span><span class="pun">ô</span><span class="pln">micos</span><span class="pun">.</span><span class="pln">
        </span><span class="str">' O Guid é um método do .net que gera string aleatórias únicas, baseada na hora e no
        '</span><span class="pln"> endere</span><span class="pun">ç</span><span class="pln">o MAC na m</span><span class="pun">á</span><span class="pln">quina gerada</span><span class="pun">.</span><span class="pln">
        sArquivoZip </span><span class="pun">=</span><span class="pln"> </span><span class="str">"MeuZip"</span><span class="pln"> </span><span class="pun">&amp;</span><span class="pln"> </span><span class="typ">Left</span><span class="pun">(</span><span class="typ">Guid</span><span class="pun">.</span><span class="typ">NewGuid</span><span class="pun">.</span><span class="typ">ToString</span><span class="pun">,</span><span class="pln"> </span><span class="lit">6</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&amp;</span><span class="pln"> </span><span class="str">".zip"</span><span class="pln">

        </span><span class="str">' Só um tratamento para garantir mais estabilidade
        If Right(sDiretorioDestino, 1) &lt;&gt; "\" Then
            sDiretorioDestino = sDiretorioDestino &amp; "\"
        End If

        If Not Directory.Exists(sDiretorioDestino) Then
            lblErroArquivo.Text = "O Diretório de Destino informado não existe: &lt;br /&gt;" &amp; sDiretorioDestino
            Exit Sub
        End If

        If Not File.Exists(sArquivoOrigem) Then
            lblErroArquivo.Text = "O Arquivo de Origem informado não existe: &lt;br /&gt;" &amp; sArquivoOrigem
            Exit Sub
        End If

        '</span><span class="pln"> </span><span class="typ">Crio</span><span class="pln"> um arquivo </span><span class="kwd">do</span><span class="pln"> tipo stream</span><span class="pun">,</span><span class="pln"> aprontando para o meu zip de destino</span><span class="pun">.</span><span class="pln">
        </span><span class="typ">Dim</span><span class="pln"> strmZipOutputStream </span><span class="typ">As</span><span class="pln"> </span><span class="typ">ZipOutputStream</span><span class="pln">
        strmZipOutputStream </span><span class="pun">=</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> </span><span class="typ">ZipOutputStream</span><span class="pun">(</span><span class="typ">File</span><span class="pun">.</span><span class="typ">Create</span><span class="pun">(</span><span class="pln">sDiretorioDestino </span><span class="pun">&amp;</span><span class="pln"> sArquivoZip</span><span class="pun">))</span><span class="pln">

        </span><span class="str">' Seto o nível de compressão (0-&gt;Sem compressão / 9-&gt; Compressão Máxima)
        strmZipOutputStream.SetLevel(9)

        '</span><span class="pln"> </span><span class="typ">Leio</span><span class="pln"> o arquivo de origem
        </span><span class="typ">Dim</span><span class="pln"> strmFile </span><span class="typ">As</span><span class="pln"> </span><span class="typ">FileStream</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">File</span><span class="pun">.</span><span class="typ">OpenRead</span><span class="pun">(</span><span class="pln">sArquivoOrigem</span><span class="pun">)</span><span class="pln">
        </span><span class="typ">Dim</span><span class="pln"> abyBuffer</span><span class="pun">(</span><span class="pln">strmFile</span><span class="pun">.</span><span class="typ">Length</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">)</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">Byte</span><span class="pln">

        strmFile</span><span class="pun">.</span><span class="typ">Read</span><span class="pun">(</span><span class="pln">abyBuffer</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> abyBuffer</span><span class="pun">.</span><span class="typ">Length</span><span class="pun">)</span><span class="pln">

        </span><span class="str">' Aqui eu trato para pegar somente o arquivo, sem os diretórios
        '</span><span class="pln"> O split </span><span class="pun">é</span><span class="pln"> um m</span><span class="pun">é</span><span class="pln">todo que separa a </span><span class="kwd">string</span><span class="pun">,</span><span class="pln"> de acordo com um caractere</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">no</span><span class="pln"> meu caso </span><span class="str">"\"
        ' Cada indice da minha matriz é um diretório, e o ultimo é o arquivo
        Dim sAuxArquivo As String() = Split(sArquivoOrigem, "</span><span class="pun">\</span><span class="str">")

        ' Crio uma variável, adicionando o meu Arquivo ao Zip
        ' Com ubound, eu pego o ultimo índice da minha matriz, que é o nome do meu arquivo.
        Dim objZipEntry As ZipEntry = New ZipEntry(sAuxArquivo(UBound(sAuxArquivo)))

        ' Seto a data de criação
        objZipEntry.DateTime = DateTime.Now

        ' Informo o tamanho do stream. (Do meu arquivo a ser zipado)
        objZipEntry.Size = strmFile.Length

        ' Fecho meu stream para liberar memória
        strmFile.Close()

        ' Adiciono no objeto para gerar o zip.
        strmZipOutputStream.PutNextEntry(objZipEntry)
        strmZipOutputStream.Write(abyBuffer, 0, abyBuffer.Length)

        ' "</span><span class="pln">Limpo</span><span class="str">" o objeto
        strmZipOutputStream.Finish()
        strmZipOutputStream.Close()

        ' Aqui eu habilito o download do arquivo.
        ' Muito útil se você quiser salvar em diretórios protegidos
        ' Ou não acessível pela raíz do seu projeto web.
        HttpContext.Current.Response.TransmitFile(sDiretorioDestino &amp; sArquivoZip)

    End Sub</span></em></code></pre>
</div>
<h3>Descompactando um arquivo .zip</h3>
<p>Para descompactar um arquivo .zip você terá que informar o arquivo, e o diretório de destino.</p>
<div class="codigo">
<pre><code><span class="pln">

<em>    </em></span><em><span class="typ">Protected</span><span class="pln"> </span><span class="typ">Sub</span><span class="pln"> btnDescompactar_Click</span><span class="pun">(</span><span class="typ">ByVal</span><span class="pln"> sender </span><span class="typ">As</span><span class="pln"> </span><span class="typ">Object</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ByVal</span><span class="pln"> e </span><span class="typ">As</span><span class="pln"> </span><span class="typ">System</span><span class="pun">.</span><span class="typ">EventArgs</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Handles</span><span class="pln"> btnDescompactar</span><span class="pun">.</span><span class="typ">Click</span><span class="pln">
        descompactarZip</span><span class="pun">(</span><span class="pln">txtArquivoParaDescompactar</span><span class="pun">.</span><span class="typ">Text</span><span class="pun">,</span><span class="pln"> txtDescompactarArquivos</span><span class="pun">.</span><span class="typ">Text</span><span class="pun">)</span><span class="pln">
    </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Sub</span><span class="pln">

    </span><span class="str">''' &lt;summary&gt;
    '''</span><span class="pln"> </span><span class="typ">Sub</span><span class="pln"> que descompacta um arquivo </span><span class="pun">.</span><span class="pln">zip apra um diret</span><span class="pun">ó</span><span class="pln">rio
    </span><span class="str">''' &lt;/summary&gt;
    '''</span><span class="pln"> </span><span class="pun">&lt;</span><span class="pln">param name</span><span class="pun">=</span><span class="str">"sArquivoZip"</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="str">''' Arquivo para ser descompactado
    '''</span><span class="pln"> </span><span class="pun">&lt;</span><span class="str">/param&gt;
    ''' &lt;param name="sDiretorioParaDescompactar"&gt;
    ''' Diretório para ser descompactado
    ''' &lt;/</span><span class="pln">param</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="str">''' &lt;remarks&gt;&lt;/remarks&gt;
    Private Sub descompactarZip(ByVal sArquivoZip As String, ByVal sDiretorioParaDescompactar As String)

        Dim oMeuZip As New FastZip

        '</span><span class="pln"> </span><span class="typ">Se</span><span class="pln"> o arquivo n</span><span class="pun">ã</span><span class="pln">o existe eu aviso o usu</span><span class="pun">á</span><span class="pln">rio
        </span><span class="typ">If</span><span class="pln"> </span><span class="typ">Not</span><span class="pln"> </span><span class="typ">File</span><span class="pun">.</span><span class="typ">Exists</span><span class="pun">(</span><span class="pln">sArquivoZip</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Then</span><span class="pln">
            lblErroDescompactar</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="str">"Arquivo zip não existe: "</span><span class="pln"> </span><span class="pun">&amp;</span><span class="pln"> sArquivoZip</span><span class="pun">)</span><span class="pln">
            </span><span class="typ">Exit</span><span class="pln"> </span><span class="typ">Sub</span><span class="pln">
        </span><span class="typ">End</span><span class="pln"> </span><span class="typ">If</span><span class="pln">

        </span><span class="str">' Se o arquivo não for zip, eu aviso o usuário
        If LCase(Right(sArquivoZip, 3)) &lt;&gt; "zip" Then
            lblErroDescompactar.Text = ("Arquivo não é do formato .zip: " &amp; sArquivoZip)
            Exit Sub
        End If

        '</span><span class="pln"> </span><span class="typ">Se</span><span class="pln"> o arquivo n</span><span class="pun">ã</span><span class="pln">o </span><span class="kwd">for</span><span class="pln"> zip</span><span class="pun">,</span><span class="pln"> eu aviso o usu</span><span class="pun">á</span><span class="pln">rio
        </span><span class="typ">If</span><span class="pln"> </span><span class="typ">Not</span><span class="pln"> </span><span class="typ">Directory</span><span class="pun">.</span><span class="typ">Exists</span><span class="pun">(</span><span class="pln">sDiretorioParaDescompactar</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Then</span><span class="pln">
            lblErroDescompactar</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="str">"Diretório para descompactar os arquivos não existe: "</span><span class="pln"> </span><span class="pun">&amp;</span><span class="pln"> sDiretorioParaDescompactar</span><span class="pun">)</span><span class="pln">
            </span><span class="typ">Exit</span><span class="pln"> </span><span class="typ">Sub</span><span class="pln">
        </span><span class="typ">End</span><span class="pln"> </span><span class="typ">If</span><span class="pln">

        </span><span class="str">' "Deszipo" o arquivo, sem nunca sobrescrever
        oMeuZip.ExtractZip(sArquivoZip, sDiretorioParaDescompactar, FastZip.Overwrite.Never)

        lblErroDescompactar.Text = "Arquivo Descompactado com sucesso!!!!!"
    End Sub
</span></em></code></pre>
</div>
<h3>Para você testar!</h3>
<p>Para que você possa testar, colocamos um formulário, e um código de inicialização da página.</p>
<h4>Formulário:</h4>
<div class="codigo">
<pre><code><span class="pln">
</span><em><span class="pun">&lt;</span><span class="tag">html</span><span class="pln"> </span><span class="atn">xmlns</span><span class="pun">=</span><span class="atv">"http://www.w3.org/1999/xhtml"</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">head</span><span class="pln"> </span><span class="atn">runat</span><span class="pun">=</span><span class="atv">"server"</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="tag">title</span><span class="pun">&gt;</span><span class="pln">Criar Arquivos Zip em Asp.Net</span><span class="pun">&lt;/</span><span class="tag">title</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="tag">style</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"text/css"</span><span class="pun">&gt;</span><span class="pln">
    body</span><span class="pun">,</span><span class="pln"> input</span><span class="pun">{</span><span class="pln">
    font</span><span class="pun">-</span><span class="pln">family</span><span class="pun">:</span><span class="pln"> verdana</span><span class="pun">;</span><span class="pln">
    font</span><span class="pun">-</span><span class="pln">size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="pun">&lt;/</span><span class="tag">style</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">head</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">body</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="tag">form</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"form1"</span><span class="pln"> </span><span class="atn">runat</span><span class="pun">=</span><span class="atv">"server"</span><span class="pun">&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">div</span><span class="pun">&gt;</span><span class="pln">
            </span><span class="pun">&lt;</span><span class="tag">strong</span><span class="pun">&gt;</span><span class="pln">Este exemplo utiliza componentes de terceiros. Verifique o termo de uso.
                .</span><span class="pun">&lt;/</span><span class="tag">strong</span><span class="pun">&gt;</span><span class="pln">
            </span><span class="pun">&lt;</span><span class="tag">br</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
            </span><span class="pun">&lt;</span><span class="tag">br</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
            </span><span class="pun">&lt;</span><span class="tag">fieldset</span><span class="pun">&gt;</span><span class="pln">
                </span><span class="pun">&lt;</span><span class="tag">legend</span><span class="pun">&gt;</span><span class="pln">Criar Arquivo Zip do Diretório Inteiro </span><span class="pun">&lt;/</span><span class="tag">legend</span><span class="pun">&gt;</span><span class="pln">
                </span><span class="pun">&lt;</span><span class="tag">table</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="str">border: none;</span><span class="atv">"</span><span class="pun">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;</span><span class="tag">tr</span><span class="pun">&gt;</span><span class="pln">
                        </span><span class="pun">&lt;</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                            Diretório de Origem:
                        </span><span class="pun">&lt;/</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                        </span><span class="pun">&lt;</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                            </span><span class="pun">&lt;</span><span class="tag">asp:TextBox</span><span class="pln"> </span><span class="atn">ID</span><span class="pun">=</span><span class="atv">"txtOrigem"</span><span class="pln"> </span><span class="atn">runat</span><span class="pun">=</span><span class="atv">"server"</span><span class="pln"> </span><span class="atn">Columns</span><span class="pun">=</span><span class="atv">"60"</span><span class="pun">&gt;&lt;/</span><span class="tag">asp:TextBox</span><span class="pun">&gt;</span><span class="pln">
                        </span><span class="pun">&lt;/</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;/</span><span class="tag">tr</span><span class="pun">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;</span><span class="tag">tr</span><span class="pun">&gt;</span><span class="pln">
                        </span><span class="pun">&lt;</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                            Diretório de Destino:
                        </span><span class="pun">&lt;/</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                        </span><span class="pun">&lt;</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                            </span><span class="pun">&lt;</span><span class="tag">asp:TextBox</span><span class="pln"> </span><span class="atn">ID</span><span class="pun">=</span><span class="atv">"txtDestino"</span><span class="pln"> </span><span class="atn">runat</span><span class="pun">=</span><span class="atv">"server"</span><span class="pln"> </span><span class="atn">Columns</span><span class="pun">=</span><span class="atv">"60"</span><span class="pun">&gt;&lt;/</span><span class="tag">asp:TextBox</span><span class="pun">&gt;</span><span class="pln">
                        </span><span class="pun">&lt;/</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;/</span><span class="tag">tr</span><span class="pun">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;</span><span class="tag">tr</span><span class="pun">&gt;</span><span class="pln">
                        </span><span class="pun">&lt;</span><span class="tag">td</span><span class="pln"> </span><span class="atn">colspan</span><span class="pun">=</span><span class="atv">"2"</span><span class="pun">&gt;</span><span class="pln">
                            </span><span class="pun">&lt;</span><span class="tag">asp:Button</span><span class="pln"> </span><span class="atn">runat</span><span class="pun">=</span><span class="atv">"server"</span><span class="pln"> </span><span class="atn">ID</span><span class="pun">=</span><span class="atv">"btnGerar"</span><span class="pln"> </span><span class="atn">Text</span><span class="pun">=</span><span class="atv">"Gerar Zip do Diretório inteiro"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
                            </span><span class="pun">&lt;</span><span class="tag">asp:Label</span><span class="pln"> </span><span class="atn">runat</span><span class="pun">=</span><span class="atv">"server"</span><span class="pln"> </span><span class="atn">ID</span><span class="pun">=</span><span class="atv">"lblErro"</span><span class="pln"> </span><span class="atn">Font-Bold</span><span class="pun">=</span><span class="atv">"true"</span><span class="pln"> </span><span class="atn">ForeColor</span><span class="pun">=</span><span class="atv">"red"</span><span class="pun">&gt;&lt;/</span><span class="tag">asp:Label</span><span class="pun">&gt;</span><span class="pln">
                        </span><span class="pun">&lt;/</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;/</span><span class="tag">tr</span><span class="pun">&gt;</span><span class="pln">
                </span><span class="pun">&lt;/</span><span class="tag">table</span><span class="pun">&gt;</span><span class="pln">
            </span><span class="pun">&lt;/</span><span class="tag">fieldset</span><span class="pun">&gt;</span><span class="pln">
            </span><span class="pun">&lt;</span><span class="tag">br</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">   </span><span class="pun">&lt;</span><span class="tag">br</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
            </span><span class="pun">&lt;</span><span class="tag">fieldset</span><span class="pun">&gt;</span><span class="pln">
                </span><span class="pun">&lt;</span><span class="tag">legend</span><span class="pun">&gt;</span><span class="pln">Criar Arquivo Zip de um único Arquivo </span><span class="pun">&lt;/</span><span class="tag">legend</span><span class="pun">&gt;</span><span class="pln">
                </span><span class="pun">&lt;</span><span class="tag">table</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="str">border: none;</span><span class="atv">"</span><span class="pun">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;</span><span class="tag">tr</span><span class="pun">&gt;</span><span class="pln">
                        </span><span class="pun">&lt;</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                            Arquivo para ser "zipado":
                        </span><span class="pun">&lt;/</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                        </span><span class="pun">&lt;</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                            </span><span class="pun">&lt;</span><span class="tag">asp:TextBox</span><span class="pln"> </span><span class="atn">ID</span><span class="pun">=</span><span class="atv">"txtArquivoOrigem"</span><span class="pln"> </span><span class="atn">runat</span><span class="pun">=</span><span class="atv">"server"</span><span class="pln"> </span><span class="atn">Columns</span><span class="pun">=</span><span class="atv">"60"</span><span class="pun">&gt;&lt;/</span><span class="tag">asp:TextBox</span><span class="pun">&gt;</span><span class="pln">
                        </span><span class="pun">&lt;/</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;/</span><span class="tag">tr</span><span class="pun">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;</span><span class="tag">tr</span><span class="pun">&gt;</span><span class="pln">
                        </span><span class="pun">&lt;</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                            Diretório de Destino:
                        </span><span class="pun">&lt;/</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                        </span><span class="pun">&lt;</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                            </span><span class="pun">&lt;</span><span class="tag">asp:TextBox</span><span class="pln"> </span><span class="atn">ID</span><span class="pun">=</span><span class="atv">"txtArquivoDestino"</span><span class="pln"> </span><span class="atn">runat</span><span class="pun">=</span><span class="atv">"server"</span><span class="pln"> </span><span class="atn">Columns</span><span class="pun">=</span><span class="atv">"60"</span><span class="pun">&gt;&lt;/</span><span class="tag">asp:TextBox</span><span class="pun">&gt;</span><span class="pln">
                        </span><span class="pun">&lt;/</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;/</span><span class="tag">tr</span><span class="pun">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;</span><span class="tag">tr</span><span class="pun">&gt;</span><span class="pln">
                        </span><span class="pun">&lt;</span><span class="tag">td</span><span class="pln"> </span><span class="atn">colspan</span><span class="pun">=</span><span class="atv">"2"</span><span class="pun">&gt;</span><span class="pln">
                            </span><span class="pun">&lt;</span><span class="tag">asp:Button</span><span class="pln"> </span><span class="atn">runat</span><span class="pun">=</span><span class="atv">"server"</span><span class="pln"> </span><span class="atn">ID</span><span class="pun">=</span><span class="atv">"btnGerarArquivo"</span><span class="pln"> </span><span class="atn">Text</span><span class="pun">=</span><span class="atv">"Gerar Zip de um único Arquivo"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
                            </span><span class="pun">&lt;</span><span class="tag">asp:Label</span><span class="pln"> </span><span class="atn">runat</span><span class="pun">=</span><span class="atv">"server"</span><span class="pln"> </span><span class="atn">ID</span><span class="pun">=</span><span class="atv">"lblErroArquivo"</span><span class="pln"> </span><span class="atn">Font-Bold</span><span class="pun">=</span><span class="atv">"true"</span><span class="pln"> </span><span class="atn">ForeColor</span><span class="pun">=</span><span class="atv">"red"</span><span class="pun">&gt;&lt;/</span><span class="tag">asp:Label</span><span class="pun">&gt;</span><span class="pln">
                        </span><span class="pun">&lt;/</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;/</span><span class="tag">tr</span><span class="pun">&gt;</span><span class="pln">
                </span><span class="pun">&lt;/</span><span class="tag">table</span><span class="pun">&gt;</span><span class="pln">
            </span><span class="pun">&lt;/</span><span class="tag">fieldset</span><span class="pun">&gt;</span><span class="pln">
        </span><span class="pun">&lt;/</span><span class="tag">div</span><span class="pun">&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">br</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">   </span><span class="pun">&lt;</span><span class="tag">br</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">fieldset</span><span class="pun">&gt;</span><span class="pln">
            </span><span class="pun">&lt;</span><span class="tag">legend</span><span class="pun">&gt;</span><span class="pln">Descompactar Arquivo .ZIP </span><span class="pun">&lt;/</span><span class="tag">legend</span><span class="pun">&gt;</span><span class="pln">
            </span><span class="pun">&lt;</span><span class="tag">table</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="str">border: none;</span><span class="atv">"</span><span class="pun">&gt;</span><span class="pln">
                </span><span class="pun">&lt;</span><span class="tag">tr</span><span class="pun">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                        Arquivo para ser "deszipado":
                    </span><span class="pun">&lt;/</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                        </span><span class="pun">&lt;</span><span class="tag">asp:TextBox</span><span class="pln"> </span><span class="atn">ID</span><span class="pun">=</span><span class="atv">"txtArquivoParaDescompactar"</span><span class="pln"> </span><span class="atn">runat</span><span class="pun">=</span><span class="atv">"server"</span><span class="pln"> </span><span class="atn">Columns</span><span class="pun">=</span><span class="atv">"60"</span><span class="pun">&gt;&lt;/</span><span class="tag">asp:TextBox</span><span class="pun">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;/</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                </span><span class="pun">&lt;/</span><span class="tag">tr</span><span class="pun">&gt;</span><span class="pln">
                </span><span class="pun">&lt;</span><span class="tag">tr</span><span class="pun">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                        Diretório para arquivos serem descompactados :
                    </span><span class="pun">&lt;/</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                        </span><span class="pun">&lt;</span><span class="tag">asp:TextBox</span><span class="pln"> </span><span class="atn">ID</span><span class="pun">=</span><span class="atv">"txtDescompactarArquivos"</span><span class="pln"> </span><span class="atn">runat</span><span class="pun">=</span><span class="atv">"server"</span><span class="pln"> </span><span class="atn">Columns</span><span class="pun">=</span><span class="atv">"60"</span><span class="pun">&gt;&lt;/</span><span class="tag">asp:TextBox</span><span class="pun">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;/</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                </span><span class="pun">&lt;/</span><span class="tag">tr</span><span class="pun">&gt;</span><span class="pln">
                </span><span class="pun">&lt;</span><span class="tag">tr</span><span class="pun">&gt;</span><span class="pln">
                </span><span class="pun">&lt;</span><span class="tag">td</span><span class="pln"> </span><span class="atn">colspan</span><span class="pun">=</span><span class="atv">"2"</span><span class="pun">&gt;</span><span class="pln">
                </span><span class="pun">&lt;</span><span class="tag">asp:Button</span><span class="pln"> </span><span class="atn">runat</span><span class="pun">=</span><span class="atv">"server"</span><span class="pln"> </span><span class="atn">ID</span><span class="pun">=</span><span class="atv">"btnDescompactar"</span><span class="pln"> </span><span class="atn">Text</span><span class="pun">=</span><span class="atv">"Descompactar arquivo zip"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
                </span><span class="pun">&lt;</span><span class="tag">asp:Label</span><span class="pln"> </span><span class="atn">ID</span><span class="pun">=</span><span class="atv">"lblErroDescompactar"</span><span class="pln"> </span><span class="atn">runat</span><span class="pun">=</span><span class="atv">"server"</span><span class="pln"> </span><span class="atn">Font-Bold</span><span class="pun">=</span><span class="atv">"true"</span><span class="pln"> </span><span class="atn">ForeColor</span><span class="pun">=</span><span class="atv">"red"</span><span class="pun">&gt;&lt;/</span><span class="tag">asp:Label</span><span class="pun">&gt;</span><span class="pln">
                </span><span class="pun">&lt;/</span><span class="tag">td</span><span class="pun">&gt;</span><span class="pln">
                </span><span class="pun">&lt;/</span><span class="tag">tr</span><span class="pun">&gt;</span><span class="pln">
            </span><span class="pun">&lt;/</span><span class="tag">table</span><span class="pun">&gt;</span><span class="pln">
        </span><span class="pun">&lt;/</span><span class="tag">fieldset</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;/</span><span class="tag">form</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">body</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">html</span><span class="pun">&gt;</span><span class="pln">
</span></em></code></pre>
</div>
<h4>Inicialização da Página</h4>
<div class="codigo">
<pre><code><span class="pln">
<em>    </em></span><em><span class="typ">Protected</span><span class="pln"> </span><span class="typ">Sub</span><span class="pln"> Page_Load</span><span class="pun">(</span><span class="typ">ByVal</span><span class="pln"> sender </span><span class="typ">As</span><span class="pln"> </span><span class="typ">Object</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ByVal</span><span class="pln"> e </span><span class="typ">As</span><span class="pln"> </span><span class="typ">System</span><span class="pun">.</span><span class="typ">EventArgs</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Handles</span><span class="pln"> </span><span class="typ">Me</span><span class="pun">.</span><span class="typ">Load</span><span class="pln">

        </span><span class="typ">If</span><span class="pln"> </span><span class="typ">Not</span><span class="pln"> </span><span class="typ">Page</span><span class="pun">.</span><span class="typ">IsPostBack</span><span class="pln"> </span><span class="typ">Then</span><span class="pln">
            </span><span class="str">' Aqui eu dou um valor inicial, só para te ajudar a começar com um teste
            txtDestino.Text = Server.MapPath("") &amp; "\Destino\"
            txtOrigem.Text = Server.MapPath("") &amp; "\Origem\"

            '</span><span class="pln"> </span><span class="typ">Arquivo</span><span class="pln">
            txtArquivoDestino</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Server</span><span class="pun">.</span><span class="typ">MapPath</span><span class="pun">(</span><span class="str">""</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&amp;</span><span class="pln"> </span><span class="str">"\Destino\"
            txtArquivoOrigem.Text = Server.MapPath("") &amp; "</span><span class="pun">\</span><span class="typ">Origem</span><span class="pun">\</span><span class="typ">Figura</span><span class="pun">.</span><span class="pln">jpg</span><span class="str">"

            ' Descompactar
            txtDescompactarArquivos.Text = Server.MapPath("") &amp; "</span><span class="pun">\</span><span class="typ">Descompactar</span><span class="pun">\</span><span class="str">"
            subInitDescompactarArquivos()
        End If

    End Sub

    ''' &lt;summary&gt;
    ''' Sub só para demonstação, para você poder dezipar um arquivo, depois de enviá-lo
    ''' &lt;/summary&gt;
    ''' &lt;remarks&gt;&lt;/remarks&gt;
    Protected Sub subInitDescompactarArquivos()
        Dim sArquivos As String()
        Dim sArquivo As String

        ' Seleciono todos os arquivos do tipo zip.
        sArquivos = Directory.GetFiles(txtArquivoDestino.Text, "</span><span class="pun">*.</span><span class="pln">zip</span><span class="str">")

        For Each sArquivo In sArquivos
            txtArquivoParaDescompactar.Text = sArquivo
            Exit For
        Next

    End Sub</span></em></code></pre>
</div>
<h3>Considerações finais</h3>
<p>É possível também trabalhar com arquivos .tar, Gzip e BZip2 de forma análoga.</p>
<p><em>Fonte: <a onclick="javascript:urchinTracker ('/outbound/article/www.pplware.com');" href="http://imasters.uol.com.br/artigo/7575/aspnet/crie_arquivos_zip_com_aspnet/" target="_blank">Imasters</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/crie-arquivos-zip-com-aspnet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integrando controles de validação no GridView</title>
		<link>http://www.debugando.com/integrando-controles-de-validacao-no-gridview/</link>
		<comments>http://www.debugando.com/integrando-controles-de-validacao-no-gridview/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 21:57:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[GridView]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=548</guid>
		<description><![CDATA[
O controle GridView é usado para exibir dados no formato tabular além de fornecer as funcionalidades para incluir, alterar e excluir registros do banco de dados relacionado. Durante a alteração ou inclusão de dados, geralmente temos que efetuar a validação dos mesmos antes de salvar no banco de dados. Este artigo mostra como você pode [...]]]></description>
			<content:encoded><![CDATA[<div id="strConteudo">
<p>O controle GridView é usado para exibir dados no formato tabular além de fornecer as funcionalidades para incluir, alterar e excluir registros do banco de dados relacionado. Durante a alteração ou inclusão de dados, geralmente temos que efetuar a validação dos mesmos antes de salvar no banco de dados. Este artigo mostra como você pode integrar os controles de validação com o controle Gridview de forma dinâmica em tempo de execução.</p>
<p>Os controles de validação que a ASP .NET disponibiliza são:</p>
<ol>
<li>RequiredFieldValidator</li>
<li>RangeValidator</li>
<li>RegularExpressionValidator</li>
<li>CompareValidator</li>
<li>CustomValidator</li>
</ol>
<p>O que vamos mostrar é como os controles de validação podem ser criados dinamicamente em tempo de execução e serem integrados com qualquer controle de entrada de dados, no caso o GridView.</p>
<p>As ferramentas usadas neste artigo são:</p>
<ul>
<li>Visual Web Developer 2008 Express Edition (VWD2008);</li>
<li>SQL Server 2005 Express Edition (você pode usar o Microsoft Access);</li>
</ul>
<p>Abra o VWD2008 e no menu File selecione New Web Site;</p>
<p>A seguir, faça o seguinte:</p>
<ul>
<li>Selecione o template ASP .NET Web Site;</li>
<li>Selecione File System em Location;</li>
<li>Selecione a linguagem Visual Basic em Language (note que poderíamos usar C#);</li>
<li>Informe o nome do web site em uma pasta local. No exemplo eu estou informando: validaGridView</li>
<li>Tecle o botão OK;</li>
<p><img src="http://conteudo.imasters.uol.com.br/12343/aspnivc1.gif" alt="" width="511" height="338" /></ul>
<p>Na janela Solution Explorer selecione o formulário web Default.aspx e a partir da Caixa de Ferramentas (ToolBox) faça o seguinte:</p>
<ul>
<li>
<ul>
<li>Arraste e solte o controle         GridView na área de Design;</li>
<li>Defina a propriedade AutoGenerateColumns         do GridView como false;</li>
<li>Defina uma formatação padrão         ao GridView;</li>
</ul>
</li>
</ul>
<p>Vamos criar agora o banco de dados Clientes.mdf no SQL Server que será usado neste artigo.</p>
<p>No menu WebSite selecione Add New Item;</p>
<p>A seguir, na janela Add New Item, selecione o template SQL Server Database, informe o nome Clientes.mdf e clique em Add;</p>
<p><strong>Nota</strong>: Será apresentada uma caixa de diálogo solicitando a sua confirmação para copiar o arquivo para a pasta App_Data; Confirme;</p>
<p><img src="http://conteudo.imasters.uol.com.br/12343/aspnivc2.gif" alt="" /></p>
<p>Abra a pasta App_Data e clique no arquivo Clientes.mdf para abrir o DataBase Explorer;</p>
<p>Expanda os objetos do DataBase e clique com o botão direito sobre o objeto Tables e selecione Add New Table;</p>
<p>Vamos definir a tabela Contatos com a seguinte estrutura da seguinte forma:</p>
<ul>
<li>No editor, você digita o nome         da Coluna, define o seu tipo e define se a coluna permite         valores Nulls;</li>
<li>A seguir, define a coluna clienteID         como sendo a chave primária do tipo identidade (identity),         com isso ela será auto-incremental;</li>
<li>Para encerrar, você clica no         ícone para Salvar e informa o nome Contatos;</li>
<li>Defina os campos: clienteID, nome,         sexo, idade, cidade e email; (A coluna sexo permitirá os         valores M e F)</li>
<p><img src="http://conteudo.imasters.uol.com.br/12343/aspnivc3.gif" alt="" /></ul>
<p>Vamos incluir alguns dados na tabela. Na janela DataBase Explorer clique com o botão direito sobre o nome da tabela Contatos recém-criada e selecione Show Table Data. A seguir, informe alguns dados, conforme mostra a figura a seguir:</p>
<p><img src="http://conteudo.imasters.uol.com.br/12343/aspnivc4.gif" alt="" /></p>
<p>Com isso já temos o nosso banco de dados Clientes.mdf e a nossa tabela Contatos. Vamos continuar. Selecione o formulário web Default.aspx, acione o modo Design e selecione o controle GridView.</p>
<p>Tecle F4 para abrir a janela de propriedades e defina na propriedade DataKeyNames o campo clienteID. Selecione o GridView, acione a GridView Tasks e selecione a opção Edit Columns. Inclua 5 colunas BoundField no GridView e defina as seguintes propriedades para cada uma delas:</p>
<table border="0">
<tbody>
<tr>
<td><strong>HeaderText</strong></td>
<td>Nome</td>
<td>Sexo</td>
<td>Idade</td>
<td>Cidade</td>
<td>Email</td>
</tr>
<tr>
<td><strong>DataField</strong></td>
<td>nome</td>
<td>sexo</td>
<td>idade</td>
<td>cidade</td>
<td>email</td>
</tr>
</tbody>
</table>
<p>Conforme a figura abaixo:</p>
<p><img src="http://conteudo.imasters.uol.com.br/12343/aspnivc5.gif" alt="" />Inclua uma coluna CommandField, defina seu tipo de comando como Edit/Update e traduza os textos pertinentes (se desejar);</p>
<p><img src="http://conteudo.imasters.uol.com.br/12343/aspnivc6.gif" alt="" />Agora converta todos os campos vinculados (BoundField) no GridView para TemplateField, para isso, selecione o campo em Selected Fields e clique no link Convert this field into a TemplateField.</p>
<p>Volte a selecionar o GridView e em GridView Tasks clique no link Edit Templates.</p>
<p>Defina cada campo convertido como TemplateField da seguinte forma:</p>
<p>1. A seção ItemTemplate deverá possui um controle Label vinculado coluna de nome correspondente. Ex: coluna Nome -&gt; Bind(&#8220;nome&#8221;)</p>
<p><img src="http://conteudo.imasters.uol.com.br/12343/aspnivc8.gif" alt="" />2. A seção EditItemTemplate deverá possuir um controle TextBox vinculado à coluna de nome correspondente. Ex: Coluna Nome -&gt; Bind(&#8220;Nome&#8221;)</p>
<p><img src="http://conteudo.imasters.uol.com.br/12343/aspnivc9.gif" alt="" />Em seguida, a partir da ToolBox, na guia Validation, para a coluna Nome, inclua o controle RequiredFieldValidator e defina as seguintes propriedades:</p>
<ul>
<li>ErrorMessage =         Informe o nome;</li>
</ul>
<ul>
<li>
<ul>
<li>ControlToValidate         = TextBox1;</li>
</ul>
</li>
<p><img src="http://conteudo.imasters.uol.com.br/12343/aspnivca.gif" alt="" /></ul>
<p>Os demais controles de validação serão definidos via código. A seguir temos quais os controles iremos usar para cada uma das colunas:</p>
<table border="0">
<tbody>
<tr>
<td>Nome</td>
<td>RequiredFieldValidator</td>
</tr>
<tr>
<td>Sexo</td>
<td>CustomValidator</td>
</tr>
<tr>
<td>Idade</td>
<td>RangeValidator</td>
</tr>
<tr>
<td>cidade</td>
<td>RequiredFieldValidator</td>
</tr>
<tr>
<td>Email</td>
<td>RegularExpressionValidator</td>
</tr>
</tbody>
</table>
<p>Dessa forma, temos o controle de validação definido para Nome em tempo de desenho e os demais controles iremos definir em tempo de execução via código.</p>
<p>Agora, temos que efetuar a vinculação do controle GridView com a nossa fonte de dados: a tabela Contatos do banco de dados Clientes.mdf.</p>
<p>Como vamos fazer isso via código, vamos criar um método chamado vinculaGrid() no arquivo Default.aspx.vb com o seguinte código:</p>
<div class="codigo">
<pre><em><code><span class="typ">Private</span><span class="pln"> </span><span class="typ">Sub</span><span class="pln"> vinculaGrid</span><span class="pun">()</span><span class="pln">

 </span><span class="typ">Dim</span><span class="pln">
conn </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Data
Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Clientes.mdf;Integrated
Security=True;User Instance=True"</span><span class="pln">

        </span><span class="typ">Dim</span><span class="pln"> sql </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Select * from Contatos order by Nome"</span><span class="pln">
        </span><span class="typ">Dim</span><span class="pln"> da </span><span class="typ">As</span><span class="pln"> </span><span class="typ">SqlDataAdapter</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> </span><span class="typ">SqlDataAdapter</span><span class="pun">(</span><span class="pln">sql</span><span class="pun">,</span><span class="pln"> conn</span><span class="pun">)</span><span class="pln">
        </span><span class="typ">Dim</span><span class="pln"> dt </span><span class="typ">As</span><span class="pln"> </span><span class="typ">DataTable</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> </span><span class="typ">DataTable</span><span class="pun">()</span><span class="pln">

        da</span><span class="pun">.</span><span class="typ">Fill</span><span class="pun">(</span><span class="pln">dt</span><span class="pun">)</span><span class="pln">

        GridView1</span><span class="pun">.</span><span class="typ">DataSource</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> dt
        GridView1</span><span class="pun">.</span><span class="typ">DataBind</span><span class="pun">()</span><span class="pln">
    </span><span class="typ">End</span><span class="pln"> Sub</span></code></em></pre>
</div>
<p><em>Lembrando que devemos declarar no início do arquivo os imports: </em></p>
<p><em>Imports System.Data.SqlClient </em></p>
<p><em>Imports System.Data</em></p>
<p>Para chamar o método acima, vamos usar o evento Load da página da seguinte forma:</p>
<div class="codigo">
<pre><code><span class="pln"> </span><em><span class="typ">Protected</span><span class="pln"> </span><span class="typ">Sub</span><span class="pln"> Page_Load</span><span class="pun">(</span><span class="typ">ByVal</span><span class="pln"> sender </span><span class="typ">As</span><span class="pln"> </span><span class="typ">Object</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ByVal</span><span class="pln"> e </span><span class="typ">As</span><span class="pln"> </span><span class="typ">System</span><span class="pun">.</span><span class="typ">EventArgs</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Handles</span><span class="pln"> </span><span class="typ">Me</span><span class="pun">.</span><span class="typ">Load</span><span class="pln">
        </span><span class="typ">If</span><span class="pln"> </span><span class="typ">Not</span><span class="pln"> </span><span class="typ">IsPostBack</span><span class="pln"> </span><span class="typ">Then</span><span class="pln">
            vinculaGrid</span><span class="pun">()</span><span class="pln">
        </span><span class="typ">End</span><span class="pln"> </span><span class="typ">If</span><span class="pln">
    </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Sub</span></em></code></pre>
</div>
<p>Executando o projeto neste momento, iremos obter:</p>
<p><img src="http://conteudo.imasters.uol.com.br/12343/aspnivcb.gif" alt="" />O próximo passo é habilitar a edição e o cancelamento da edição, pois se você clicar no link Edita irá ocorrer um erro.</p>
<p>Lembre-se de que o nosso GridView não foi gerado usando um assistente e por isso não possui os eventos para edição e cancelamento ativos. Vamos ativá-los&#8230;</p>
<p>No evento RowEditing do controle GridView informe o código abaixo para permitir a edição:</p>
<div class="codigo">
<pre><em><code><span class="typ">Protected</span><span class="pln"> </span><span class="typ">Sub</span><span class="pln"> GridView1_RowEditing</span><span class="pun">(</span><span class="typ">ByVal</span><span class="pln"> sender </span><span class="typ">As</span><span class="pln"> </span><span class="typ">Object</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ByVal</span><span class="pln"> e </span><span class="typ">As</span><span class="pln"> </span><span class="typ">System</span><span class="pun">.</span><span class="typ">Web</span><span class="pun">.</span><span class="pln">UI</span><span class="pun">.</span><span class="typ">WebControls</span><span class="pun">.</span><span class="typ">GridViewEditEventArgs</span><span class="pun">)</span><span class="pln"> _
                   </span><span class="typ">Handles</span><span class="pln"> GridView1</span><span class="pun">.</span><span class="typ">RowEditing</span><span class="pln">
                           GridView1</span><span class="pun">.</span><span class="typ">EditIndex</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> e</span><span class="pun">.</span><span class="typ">NewEditIndex</span><span class="pln">
        vinculaGrid</span><span class="pun">()</span><span class="pln">
    </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Sub</span></code></em></pre>
</div>
<p>Para permitir o cancelamento do evento acima, vamos incluir o código abaixo no evento RowCancelingEdit:</p>
<div class="codigo">
<pre><em><code><span class="typ">Protected</span><span class="pln"> </span><span class="typ">Sub</span><span class="pln">
GridView1_RowCancelingEdit</span><span class="pun">(</span><span class="typ">ByVal</span><span class="pln"> sender </span><span class="typ">As</span><span class="pln"> </span><span class="typ">Object</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ByVal</span><span class="pln"> e </span><span class="typ">As</span><span class="pln">
</span><span class="typ">System</span><span class="pun">.</span><span class="typ">Web</span><span class="pun">.</span><span class="pln">UI</span><span class="pun">.</span><span class="typ">WebControls</span><span class="pun">.</span><span class="typ">GridViewCancelEditEventArgs</span><span class="pun">)</span><span class="pln"> _
</span><span class="typ">Handles</span><span class="pln"> GridView1</span><span class="pun">.</span><span class="typ">RowCancelingEdit</span><span class="pln">
        GridView1</span><span class="pun">.</span><span class="typ">EditIndex</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1</span><span class="pln">
        vinculaGrid</span><span class="pun">()</span><span class="pln">
    </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Sub</span></code></em></pre>
</div>
<p>Executando o projeto neste momento e a seguir clicando no link Edita iremos conseguir efetuar a edição dos dados. Para a coluna Nome, como já temos o controle de validação definido, ao tentar informar um nome em branco obteremos o resultado abaixo:</p>
<p><img src="http://conteudo.imasters.uol.com.br/12343/aspnivcc.gif" alt="" />Precisamos então definir os demais controles de validação e, para isso, vamos usar o evento RowDataBound do controle GridView.</p>
<p>Para a coluna Sexo iremos usar o controle CustomValidator, que é usado para validar uma entrada de forma customizada no lado do cliente ou do servidor. No exemplo iremos usar uma validação JavaScript do lado do cliente. Lembre-se de que a coluna Sexo deve aceitar somente os valores M, para masculino, e F, para feminino.</p>
<p>Primeiro vamos definir criar o código que define o controle em tempo de execução no servidor:</p>
<p>Depois verificamos se a linha é do tipo DataRow, ou seja, é uma linha de dados e não de cabeçalho;</p>
<p>A seguir verificamos se EditIndex é igual ao índice da linha atual (RowIndex) para em seguida definir via código o controle CustomValidator;</p>
<div class="codigo">
<pre><code><em><span class="typ">Protected</span><span class="pln"> </span><span class="typ">Sub</span><span class="pln"> GridView1_RowDataBound</span><span class="pun">(</span><span class="typ">ByVal</span><span class="pln"> sender </span><span class="typ">As</span><span class="pln"> </span><span class="typ">Object</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ByVal</span><span class="pln"> e </span><span class="typ">As</span><span class="pln"> </span><span class="typ">System</span><span class="pun">.</span><span class="typ">Web</span><span class="pun">.</span><span class="pln">UI</span><span class="pun">.</span><span class="typ">WebControls</span><span class="pun">.</span><span class="typ">GridViewRowEventArgs</span><span class="pun">)</span><span class="pln"> _
</span><span class="typ">Handles</span><span class="pln"> GridView1</span><span class="pun">.</span><span class="typ">RowDataBound</span></em><span class="pln"><em>
</em>
</span><em><span class="typ">If</span><span class="pln"> e</span><span class="pun">.</span><span class="typ">Row</span><span class="pun">.</span><span class="typ">RowType</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">DataControlRowType</span><span class="pun">.</span><span class="typ">DataRow</span><span class="pln"> </span><span class="typ">Then</span><span class="pln">

</span><span class="str">'Verificando se EditIndex é igual a Row Index atual

'</span><span class="pln">ent</span><span class="pun">ã</span><span class="pln">o vincula os controles de valida</span><span class="pun">çã</span><span class="pln">o a linha particular

</span><span class="typ">If</span><span class="pln"> GridView1</span><span class="pun">.</span><span class="typ">EditIndex</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> e</span><span class="pun">.</span><span class="typ">Row</span><span class="pun">.</span><span class="typ">RowIndex</span><span class="pln"> </span><span class="typ">Then</span><span class="pln">

</span><span class="str">'Coluna Sexo- definindo o CustomValidator

Dim cv As CustomValidator = New CustomValidator

cv.ID = "CustomValidator1"

cv.ControlToValidate = "TextBox2"

cv.ErrorMessage = "Informação inválida"

cv.SetFocusOnError = True

cv.ValidateEmptyText = True

cv.ClientValidationFunction = "validaSexo"

e.Row.Cells(1).Controls.Add(cv)

End If

End If

End Sub</span></em></code></pre>
</div>
<ul>
<li>No código acima criamos uma         instância da classe CustomValidator e         definimos um ID para esta instância;</li>
<li>A seguir especificamos o         controle que será validado, no caso o controle TextBox2;</li>
<li>Definimos a mensagem de erro em         ErrorMessage.</li>
</ul>
<p><em>Fonte: <a onclick="javascript:urchinTracker ('/outbound/article/www.pplware.com');" href="http://imasters.uol.com.br/artigo/12343/aspnet/integrando_controles_de_validacao_no_gridview/" target="_blank">Imasters</a></em></div>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/integrando-controles-de-validacao-no-gridview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Construindo aplicações ricas de internet com Adobe Flex 3 e ASP.NET</title>
		<link>http://www.debugando.com/construindo-aplicacoes-ricas-de-internet-com-adobe-flex-3-e-aspnet/</link>
		<comments>http://www.debugando.com/construindo-aplicacoes-ricas-de-internet-com-adobe-flex-3-e-aspnet/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 21:52:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[FLEX]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[ASP .NET]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=545</guid>
		<description><![CDATA[
Utilizarei o Visual Studio 2008 com o SQL Server 2005 e o banco de dados Northwind, porém os mesmos passos podem ser seguidos no Visual Studio 2005 com o SQL Server 2000.
Crie um novo projeto Web no Visual Studio, logo em seguida clique com o botão direito sobre a solução e escolha Add / New [...]]]></description>
			<content:encoded><![CDATA[<div id="strConteudo">
<p>Utilizarei o Visual Studio 2008 com o SQL Server 2005 e o banco de dados Northwind, porém os mesmos passos podem ser seguidos no Visual Studio 2005 com o SQL Server 2000.</p>
<p>Crie um novo projeto Web no Visual Studio, logo em seguida clique com o botão direito sobre a solução e escolha Add / New Item.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/01_adicionarnovoitem-300x216.png" alt="" /></p>
<p>Na janela que se abrirá, selecione o Item DataSet e atribua o nome DsTerritorio.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/02_novodataset-300x181.png" alt="" /></p>
<p>Com o DataSet criado, clique com o botão direito dentro da janela do DataSet, escolha Add / TableAdapter, abrirá uma janela solicitando qual conexão com o banco de dados será utilizado para a construção do TableAdapter, crie a conexão com o SQL Server e salve com o nome NorthwindConn e clique em Next.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/03_adicionartableadapter-300x216.png" alt="" /></p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/04_selecionarconexao-300x235.png" alt="" /></p>
<p>Na próxima janela selecione como o TableAdapter acessará o banco de dados, as opções possíveis são: SQL statements, criar nova Stored Procedure ou utilizar uma Stored Procedure já existente no banco de dados.</p>
<p>Deixe a opção Use SQL statements marcada e clique em Next.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/05_selecionarmodoacesso-300x235.png" alt="" /></p>
<p>A próxima janela é onde se insere o código SQL para o retorno dos dados, porém você pode utilizar o Query Builder, que é a ferramenta visual para construção de instruções SQL, portanto clique no botão Query Builder.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/06_entradasql-300x235.png" alt="" /></p>
<p>Após clicar no botão Query Builder, aparecerão duas janelas, a janela do próprio Query Builder e a janela de Add Table, a segunda janela já com as tabelas existentes no banco de dados.</p>
<p>Procure e selecione a tabela Region, em seguida, clique em Add. A tabela Region aparecerá no Query Builder.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/07_adicionartabelaquerybuilder-300x216.png" alt="" /></p>
<p>Clique em Close, em seguida, selecione as duas colunas da tabela Region (RegionID e RegionDescription). Agora clique em Execute Query.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/08_querybuilderregion-300x246.png" alt="" /></p>
<p>Se o resultado do Execute Query for igual à figura acima, clique em Ok. A próxima janela solicitará nomes para os métodos de Fill e Return que por padrão são Fill e GetData respectivamente.</p>
<p>Para a tabela Region, deixe os nomes sugeridos e clique em Next. A próxima janela exibirá o sumário da criação do TableAdapter. Clique em Finish.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/09_definirnomemetodo-300x235.png" alt="" /></p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/10_tableadaptercriado-300x235.png" alt="" /></p>
<p>Agora já é possível visualizar o TableAdapter dentro do DataSet dsTerritorio.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/11_datasetterritorio-300x216.png" alt="" /></p>
<p>Ainda dentro do DataSet dsTerritorio, crie outro TableAdapter. Novamente, clique com o botão direito dentro do DataSet, escolha Add / TableAdapter, escolha a conexão com a base de dados, também escolha Use SQL statements.</p>
<p>Na janela do Query Builder, adicione a tabela Territories, selecione todas as colunas. Na linha RegionID, insira o parâmetro @RegionID na coluna Filter. O parâmetro será responsável por aplicar o filtro de qual região o SQL retornará os territórios.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/12_querybuilderterritories-300x246.png" alt="" /></p>
<p>Na janela de definições dos métodos, acrescente a expressão ByRegionID, após Fill e GetData. Dessa maneira apenas pelo nome do método é possível saber que um parâmetro chamado RegionID é esperado.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/13_definirnomemetodoterritories-300x235.png" alt="" /></p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/14_datasetterritoriocompleto-300x216.png" alt="" /></p>
<p>Agora que concluiu a criação do DataSet dsTerritorio, crie o DataSet dsVendedor, e dentro dele crie um TableAdapter com o SQL abaixo.</p>
<div class="codigo">
<pre><em><code><span class="pln">SELECT  </span><span class="typ">EmployeeTerritories</span><span class="pun">.</span><span class="typ">EmployeeID</span><span class="pun">,</span><span class="pln">
        </span><span class="typ">Employees</span><span class="pun">.</span><span class="typ">FirstName</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">' '</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="typ">Employees</span><span class="pun">.</span><span class="typ">LastName</span><span class="pln"> AS </span><span class="typ">FullName</span><span class="pun">,</span><span class="pln">
        </span><span class="typ">EmployeeTerritories</span><span class="pun">.</span><span class="typ">TerritoryID</span><span class="pln">
FROM </span><span class="typ">Employees</span><span class="pln"> INNER JOIN </span><span class="typ">EmployeeTerritories</span><span class="pln">
        ON </span><span class="typ">Employees</span><span class="pun">.</span><span class="typ">EmployeeID</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">EmployeeTerritories</span><span class="pun">.</span><span class="typ">EmployeeID</span><span class="pln">
WHERE </span><span class="pun">(</span><span class="typ">EmployeeTerritories</span><span class="pun">.</span><span class="typ">TerritoryID</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">@TerritoryID</span><span class="pun">)</span></code></em></pre>
</div>
<p><img src="http://conteudo.imasters.uol.com.br/12375/15_entradasqlemployees-300x235.png" alt="" /></p>
<p>Acrescente ByTerritoryID na definição dos métodos Fill e GetData.</p>
<p>Após clicar em Finish, o TableAdapter criado estará com os nomes DataTable1 e DataTable1TableAdapter, altere-os para Employee e EmployeeTableAdapter.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/16_tableadapteremployee.png" alt="" /></p>
<p>Crie um novo DataSet chamado dsCliente, e também crie um novo TableAdapter com o código abaixo.</p>
<div class="codigo">
<pre><em><code><span class="pln">SELECT  </span><span class="typ">Customers</span><span class="pun">.</span><span class="typ">CustomerID</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Customers</span><span class="pun">.</span><span class="typ">CompanyName</span><span class="pun">,</span><span class="pln"> </span><span class="typ">CustomerEmployee</span><span class="pun">.</span><span class="typ">EmployeeID</span><span class="pln">
FROM </span><span class="pun">(</span><span class="pln">SELECT </span><span class="typ">CustomerID</span><span class="pun">,</span><span class="pln"> </span><span class="typ">EmployeeID</span><span class="pln">
        FROM </span><span class="typ">Orders</span><span class="pln">
        GROUP BY </span><span class="typ">CustomerID</span><span class="pun">,</span><span class="pln"> </span><span class="typ">EmployeeID</span><span class="pun">)</span><span class="pln"> AS </span><span class="typ">CustomerEmployee</span><span class="pln"> INNER JOIN
        </span><span class="typ">Customers</span><span class="pln"> ON </span><span class="typ">CustomerEmployee</span><span class="pun">.</span><span class="typ">CustomerID</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Customers</span><span class="pun">.</span><span class="typ">CustomerID</span><span class="pln">
WHERE </span><span class="pun">(</span><span class="typ">CustomerEmployee</span><span class="pun">.</span><span class="typ">EmployeeID</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">@EmployeeID</span><span class="pun">)</span></code></em></pre>
</div>
<p>Para os nomes dos métodos Fill e GetDate, não esqueça de adicionar ByEmployeeID em ambos.</p>
<p>Como no TableAdapter de vendedores, os nomes deste TableAdapter também não estão corretos, altere-os para Customers e CustomersTableAdapter respectivamente.</p>
<p>Para concluir a construção dos DataSets, crie mais um chamado dsPedido e também crie um novo TableAdapter com o código abaixo.</p>
<div class="codigo">
<pre><em><code><span class="pln">SELECT </span><span class="typ">OrderID</span><span class="pun">,</span><span class="pln"> </span><span class="typ">CustomerIR</span><span class="pun">,</span><span class="pln"> </span><span class="typ">EmployeeID</span><span class="pun">,</span><span class="pln"> </span><span class="typ">OrderDate</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ShippedDate</span><span class="pun">,</span><span class="pln">
        </span><span class="typ">ShipName</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ShipAddress</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ShipCity</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Shipcountry</span><span class="pln">
FROM </span><span class="typ">Orders</span><span class="pln">
WHERE </span><span class="pun">(</span><span class="typ">CustormerID</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">@CustomerID</span><span class="pun">)</span><span class="pln"> AND
        </span><span class="pun">(</span><span class="typ">EmployeeID</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">@EmployeeID</span><span class="pun">)</span></code></em></pre>
</div>
<p>Acrescente ByCustomerIDEmployeeID  aos métodos Fill e GetData e clique em Finalizar.</p>
<p>Agora crie o último TableAdapter chamado OrderDetails conforme a figura abaixo.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/17_sqlorderdetails-300x247.png" alt="" /></p>
<p>Após a criação de todos os DataSets (Território, Vendedor, Cliente e Pedido) o projeto deve estar conforme a figura abaixo.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/18_arquivosprojeto.png" alt="" /></p>
<p>Copie os seguintes arquivos do diretório de instalação do WebOrb (por padrão em c:\inetpub\wwwroot\weborb30) para o diretório do projeto .NET.</p>
<p><em>/weborb.config<br />
/bin/weborb.dll<br />
/WEB-INF</em></p>
<p>Adicione o código XML abaixo ao web.config do projeto .NET.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">configuration</span><span class="pun">&gt;</span><span class="pln">
 </span><span class="pun">&lt;</span><span class="tag">system</span><span class="pln">.</span><span class="atn">web</span><span class="pun">&gt;</span><span class="pln">
   </span><span class="pun">&lt;</span><span class="tag">httpHandlers</span><span class="pun">&gt;</span><span class="pln">
     </span><span class="pun">&lt;</span><span class="tag">add</span><span class="pln"> </span><span class="atn">verb</span><span class="pun">=</span><span class="atv">"*"</span><span class="pln"> </span><span class="atn">path</span><span class="pun">=</span><span class="atv">"weborb.aspx"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"Weborb.ORBHttpHandler"</span><span class="pun">/&gt;</span><span class="pln">
     </span><span class="pun">&lt;</span><span class="tag">add</span><span class="pln"> </span><span class="atn">verb</span><span class="pun">=</span><span class="atv">"*"</span><span class="pln"> </span><span class="atn">path</span><span class="pun">=</span><span class="atv">"codegen.aspx"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="pln"> </span><span class="atv">"Weborb.Management.CodeGen.CodegeneratorHttpHandler"</span><span class="pun">/&gt;</span><span class="pln">
   </span><span class="pun">&lt;/</span><span class="tag">httpHandlers</span><span class="pun">&gt;</span><span class="pln">
 </span><span class="pun">&lt;/</span><span class="tag">system</span><span class="pln">.</span><span class="atn">web</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">configuration</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>É preciso referenciar o weborb.dll ao projeto, para isso no Solution Explorer do Visual Studio, clique duas vezes sobre a opção My Project, em seguida clique em References e depois em Add / References?</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/19_myproject-300x216.png" alt="" /></p>
<p>Clique na aba Browse, localize o diretório Bin do projeto, selecione o arquivo weborb.dll e clique em OK, salve o projeto e feche a janela My Project.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/20_weborb_dll-300x246.png" alt="" /></p>
<p>Clique com o botão direito sobre a solução e escolha Add / New Item, porém escolha Class e dê o nome de csFlex.vb.</p>
<p>Nesta classe serão criados os métodos de chamada e retorno dos DataSets e TableAdapters criados anteriormente, através desses métodos é que a comunicação entre o .NET e o Flex ocorrerá.</p>
<p>Insira o código abaixo ao arquivo csFlex.vb</p>
<div class="codigo">
<pre><em><code><span class="typ">Imports</span><span class="pln"> </span><span class="typ">Weborb</span><span class="pun">.</span><span class="typ">Service</span><span class="pln">

</span><span class="typ">Public</span><span class="pln"> </span><span class="typ">Class</span><span class="pln"> csFlex

    </span><span class="typ">Public</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> getRegion</span><span class="pun">()</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">DataTable</span><span class="pln">
        </span><span class="typ">Return</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> dsTerritorioTableAdapters</span><span class="pun">.</span><span class="typ">RegionTableAdapter</span><span class="pun">().</span><span class="typ">GetData</span><span class="pun">()</span><span class="pln">
    </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Function</span><span class="pln">

    </span><span class="typ">Public</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> getTerritories</span><span class="pun">(</span><span class="typ">ByVal</span><span class="pln"> </span><span class="typ">RegionID</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pun">)</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">DataTable</span><span class="pln">
        </span><span class="typ">Return</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> dsTerritorioTableAdapters</span><span class="pun">.</span><span class="typ">TerritoriesTableAdapter</span><span class="pun">().</span><span class="typ">GetDataByRegionID</span><span class="pun">(</span><span class="typ">RegionID</span><span class="pun">)</span><span class="pln">
    </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Function</span><span class="pln">

    </span><span class="typ">Public</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> getEmployee</span><span class="pun">(</span><span class="typ">ByVal</span><span class="pln"> </span><span class="typ">TerritoryID</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pun">)</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">DataTable</span><span class="pln">
        </span><span class="typ">Return</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> dsVendedorTableAdapters</span><span class="pun">.</span><span class="typ">EmployeeTableAdapter</span><span class="pun">().</span><span class="typ">GetDataByTerritoryID</span><span class="pun">(</span><span class="typ">TerritoryID</span><span class="pln">
    </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Function</span><span class="pln">

    </span><span class="typ">Public</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> getCustomers</span><span class="pun">(</span><span class="typ">ByVal</span><span class="pln"> </span><span class="typ">EmployeeID</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pun">)</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">DataTable</span><span class="pln">
        </span><span class="typ">Return</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> dsClienteTableAdapters</span><span class="pun">.</span><span class="typ">CustomersTableAdapter</span><span class="pun">().</span><span class="typ">GetDataByEmployeeID</span><span class="pun">(</span><span class="typ">EmployeeID</span><span class="pun">)</span><span class="pln">
    </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Function</span><span class="pln">

    </span><span class="typ">Public</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> getOrders</span><span class="pun">(</span><span class="typ">ByVal</span><span class="pln"> </span><span class="typ">CustomerID</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ByVal</span><span class="pln"> </span><span class="typ">EmployeeID</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pun">)</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">DataTable</span><span class="pln">
        </span><span class="typ">Return</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> dsPedidoTableAdapters</span><span class="pun">.</span><span class="typ">OrdersTableAdapter</span><span class="pun">().</span><span class="typ">GetDataByCustomerIDEmployeeID</span><span class="pun">(</span><span class="typ">CustomerID</span><span class="pun">,</span><span class="pln"> </span><span class="typ">EmployeeID</span><span class="pun">)</span><span class="pln">
    </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Function</span><span class="pln">

    </span><span class="typ">Public</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> getOrderDetails</span><span class="pun">(</span><span class="typ">ByVal</span><span class="pln"> </span><span class="typ">OrderID</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pun">)</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">DataTable</span><span class="pln">
        </span><span class="typ">Return</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> dsPedidoTableAdapters</span><span class="pun">.</span><span class="typ">OrderDetailsTableAdapter</span><span class="pun">().</span><span class="typ">GetDataByOrderID</span><span class="pun">(</span><span class="typ">OrderID</span><span class="pun">)</span><span class="pln">
    </span><span class="typ">End</span><span class="pln"> </span><span class="typ">Function</span><span class="pln">

</span><span class="typ">End</span><span class="pln"> </span><span class="typ">Class</span></code></em></pre>
</div>
<p>Salve e feche o arquivo csFlex, agora compile o projeto. Caso o Visual Studio sinalize algum erro, volte e execute os passos novamente.</p>
<p>Antes de criar a interface no Adobe Flex, crie a aplicação Web no Internet Information Services (IIS) com o nome do projeto, verifique se ao acessar o endereço através do navegador uma página em branco é exibida.</p>
<p>Agora já com a aplicação web configurada no IIS, abra o Adobe Flex Builder 3, adicione um novo projeto (File / New / Flex Project).</p>
<p>Agora defina o nome do Projeto, se a opção Use default location estiver marcada, desmarque-a e localize o endereço do projeto .NET e dentro da pasta do projeto crie uma nova pasta chamada FlexSrc. O Project location do Flex deve ficar como a figura abaixo. A opção de Application type deixe marcado Web Application, e em Server technology selecione ASP.NET. Clique em Next.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/21_definirnomeprojeto-300x267.png" alt="" /></p>
<p>Na próxima janela, na opção Server selecione Use Internet Information Services (IIS), em Web application root informe o diretório raiz da aplicação web definida no IIS e no campo Web application URL informe o endereço da aplicação no IIS. Após clicar no botão Validate Configuration, na parte superior da janela o Flex Builder deve ser informar: &#8220;The web application root and URL are valid&#8221;, caso apareça outra mensagem, os endereços informados não estão corretos, corrija antes de prosseguir.</p>
<p>Na mesma janela, um pouco abaixo está definida a pasta bin-debug como local a serem salvos os arquivos Flex compilados, deixe o nome que o Builder sugeriu e clique Next.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/22_definirservidor-300x267.png" alt="" /></p>
<p>Na última janela de configuração do projeto Flex, é possível definir qual a pasta onde o Flex Builder salvará os arquivos fontes, bem como qual o nome do primeiro arquivo do projeto a ser criado.</p>
<p>Deixe os campos preenchidos como o Builder sugeriu e clique em Finish. Após alguns segundos o Adobe Flex Builder 3 exibirá o arquivo ArtigoFlex.mxml pronto para o início da construção da interface da aplicação.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/23_adobeflexbuilder-300x216.png" alt="" /></p>
<p>Porém antes começar a codificar é necessário incluir um argumento de compilação ao projeto, pois sem esse argumento o Flex não conseguirá acessar os métodos construídos na classe csFlex. Para incluir o argumento, clique com o botão direito sobre o nome do projeto no Flex Navigator e em seguida clique em Properties. Com a janela de propriedades aberta, clique sobre a opção Flex Compiler, e insira o argumento após o argumento ?locale en_US</p>
<div class="codigo">
<pre><code><span class="pun">-</span><span class="pln">services c</span><span class="pun">:\</span><span class="typ">Inetpub</span><span class="pun">\</span><span class="pln">wwwroot</span><span class="pun">\</span><span class="pln">weborb30</span><span class="pun">\</span><span class="pln">web</span><span class="pun">-</span><span class="pln">inf</span><span class="pun">\</span><span class="pln">flex</span><span class="pun">\</span><span class="pln">services</span><span class="pun">-</span><span class="pln">config</span><span class="pun">.</span><span class="pln">xml</span></code></pre>
</div>
<p><img src="http://conteudo.imasters.uol.com.br/12375/24_propriedadeflexcompiler-300x230.png" alt="" /></p>
<p>Após inserir o argumento services, clique em OK.</p>
<p>Agora com o projeto corretamente configurado e pronto para comunicar com o .NET é possível iniciar a construção da interface, para tanto crie um painel, entre as tags , com o título Painel de Vendas, esse painel terá um tamanho ajustável conforme as dimensões do navegador do cliente, para isso configure as propriedades left, right, top e bottom, todos com o valor 10.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">mx:Panel</span><span class="pln"> </span><span class="atn">layout</span><span class="pun">=</span><span class="atv">"absolute"</span><span class="pln"> </span><span class="atn">left</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">right</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">top</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">bottom</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">title</span><span class="pun">=</span><span class="atv">"Painel de Vendas"</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">mx:Panel</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>É possível verificar como o projeto está ficando, bastar clicar no Play.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/25_executaraplicacaoflex-300x36.png" alt="" /></p>
<p>Dentro do painel, crie um canvas na cor cinza.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">mx:Canvas</span><span class="pln"> </span><span class="atn">height</span><span class="pun">=</span><span class="atv">"42"</span><span class="pln"> </span><span class="atn">left</span><span class="pun">=</span><span class="atv">"0"</span><span class="pln"> </span><span class="atn">top</span><span class="pun">=</span><span class="atv">"0"</span><span class="pln"> </span><span class="atn">right</span><span class="pun">=</span><span class="atv">"0"</span><span class="pln"> </span><span class="atn">backgroundColor</span><span class="pun">=</span><span class="atv">"#F3F3F3"</span><span class="pln"> </span><span class="atn">borderStyle</span><span class="pun">=</span><span class="atv">"none"</span><span class="pln"> </span><span class="atn">borderThickness</span><span class="pun">=</span><span class="atv">"1"</span><span class="pln"> </span><span class="atn">borderColor</span><span class="pun">=</span><span class="atv">"#C2BEBE"</span><span class="pun">&gt;</span><span class="pln">

</span><span class="pun">&lt;/</span><span class="tag">mx:Canvas</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>Dentro do canvas coloque os labels e comboboxs que serão utilizados para selecionar região, território, vendedor e cliente, coloque também dentro do canvas o botão consultar.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">mx:Label</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"12"</span><span class="pln"> </span><span class="atn">text</span><span class="pun">=</span><span class="atv">"Região"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"-348"</span><span class="pun">/&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:ComboBox</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"cbRegion"</span><span class="pln"> </span><span class="atn">labelField</span><span class="pun">=</span><span class="atv">"RegionDescription"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"89"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"-274"</span><span class="pun">&gt;&lt;/</span><span class="tag">mx:ComboBox</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:Label</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"12"</span><span class="pln"> </span><span class="atn">text</span><span class="pun">=</span><span class="atv">"Território"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"-194"</span><span class="pun">/&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:ComboBox</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"cbTerritory"</span><span class="pln"> </span><span class="atn">labelField</span><span class="pun">=</span><span class="atv">"TerritoryDescription"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"89"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"-114"</span><span class="pun">&gt;&lt;/</span><span class="tag">mx:ComboBox</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:Label</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"12"</span><span class="pln"> </span><span class="atn">text</span><span class="pun">=</span><span class="atv">"Vendedor"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"-32"</span><span class="pun">/&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:ComboBox</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"cbEmployee"</span><span class="pln"> </span><span class="atn">labelField</span><span class="pun">=</span><span class="atv">"FullName"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"89"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"49"</span><span class="pun">&gt;&lt;/</span><span class="tag">mx:ComboBox</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:Label</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"12"</span><span class="pln"> </span><span class="atn">text</span><span class="pun">=</span><span class="atv">"Cliente"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"124"</span><span class="pun">/&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:ComboBox</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"cbCustomer"</span><span class="pln"> </span><span class="atn">labelField</span><span class="pun">=</span><span class="atv">"CompanyName"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"89"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"198"</span><span class="pun">&gt;&lt;/</span><span class="tag">mx:ComboBox</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:Button</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">label</span><span class="pun">=</span><span class="atv">"Consultar"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"119"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"310"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"btConsultar"</span><span class="pun">/&gt;</span></code></em></pre>
</div>
<p>A propriedade horizontalCenter define qual a distância em pixel que um objeto está do centro da página, valores negativos representam objetos a esquerda do centro da tela e valores positivos representam objetos a direita, os valores definidos garantem que os objetos estarão sempre centralizados.</p>
<p>labelField é a propriedade que define qual o campo que será exibido como label do combobox. O Adobe Flex trabalha de maneira diferente do .NET quando o assunto é combobox ou dropdownlist, pois no .NET é possível definir apenas dois valores ao dropdownlist, o datatextfield e o datavalueFfeld, já no Adobe Flex só se define qual será o valor de exibição do combobox, labelField, pois cada linha de opção do combobox é um objeto com propriedades. Essas propriedades são as colunas que retornaram do banco de dados, logo você não tem acesso a somente duas colunas como dropdownlist, você tem acesso a todas as colunas que retornaram do banco de dados.</p>
<p>A propriedade Y define qual a distância que o objeto tem do topo do componente ao qual ele está pertencendo, neste caso, y=&#8221;12&#8243; diz ao Flex que o label está a 12 pixel do topo do canvas.</p>
<p>Após o canvas inclua um datagrid onde serão exibidos os pedidos resultantes da consulta ao banco de dados.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">mx:DataGrid</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"dgPedido"</span><span class="pln"> </span><span class="atn">right</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">left</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">top</span><span class="pun">=</span><span class="atv">"55"</span><span class="pln"> </span><span class="atn">bottom</span><span class="pun">=</span><span class="atv">"10"</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:columns</span><span class="pun">&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Detalhes"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"85"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Data Pedido"</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"OrderDate"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Data Entrega"</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"ShippedDate"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Entregue para"</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"ShipName"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Endereço"</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"ShipAdress"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Cidade"</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"ShipCity"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"País"</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"ShipCountry"</span><span class="pun">/&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">mx:columns</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">mx:DataGrid</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>Para fazer a comunicação entre a interface Flex e a aplicação server-side .NET utilize o componente RemoteObject do Adobe Flex 3.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">mx:RemoteObject</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"roNet"</span><span class="pln"> </span><span class="atn">destination</span><span class="pun">=</span><span class="atv">"GenericDestination"</span><span class="pln">
        </span><span class="atn">source</span><span class="pun">=</span><span class="atv">"ArtigoFlex.csFlex"</span><span class="pln"> </span><span class="atn">showBusyCursor</span><span class="pun">=</span><span class="atv">"true"</span><span class="pln">
        </span><span class="atn">fault</span><span class="pun">=</span><span class="atv">"faultHandler(event)"</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln">

        </span><span class="pun">&lt;</span><span class="tag">mx:method</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"getRegion"</span><span class="pln"> </span><span class="atn">result</span><span class="pun">=</span><span class="atv">"gotRegion(event)"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:method</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"getTerritories"</span><span class="pln"> </span><span class="atn">result</span><span class="pun">=</span><span class="atv">"gotTerritories(event)"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:method</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"getEmployee"</span><span class="pln"> </span><span class="atn">result</span><span class="pun">=</span><span class="atv">"gotEmployee(event)"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:method</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"getCustomers"</span><span class="pln"> </span><span class="atn">result</span><span class="pun">=</span><span class="atv">"gotCustomers(event)"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:method</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"getOrders"</span><span class="pln"> </span><span class="atn">result</span><span class="pun">=</span><span class="atv">"gotOrders(event)"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:method</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"getOrderDetails"</span><span class="pln"> </span><span class="atn">result</span><span class="pun">=</span><span class="atv">"gotOrderDetails(event)"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">

</span><span class="pun">&lt;/</span><span class="tag">mx:RemoteObject</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>A propriedade destination deve sempre ser &#8220;GenericDestination&#8221; para a comunicação através do weborb, a propriedade source deve ser preenchida com o nome do projeto .NET e a classe que será acessada, então neste caso será &#8220;ArtigoFlex.csFlex&#8221;.</p>
<p>A propriedade showBusyCursor seta se será exibido ou não o relógio como cursor do mouse enquanto alguma requisição ao .NET estiver sendo feita. E finalmente, fault define qual função será disparada caso algum erro ocorra durante alguma requisição do .NET.</p>
<p>Os métodos (</p>
<p>A propriedade result define qual função será disparada após o retorno da requisição ao .NET.</p>
<p>É necessário agora construir as funções, faultHandler, gotRegion, gotTerritories, gotEmployee, gotCustomers, gotOrders e gotOrderDetails. As funções são escritas na linguagem Action Script 3.0</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">mx:Script</span><span class="pun">&gt;</span><span class="pln">
        &lt;![CDATA[
                import mx.rpc.events.ResultEvent;
                import mx.controls.Alert;
                import mx.rpc.events.FaultEvent;
        ]]&gt;
</span><span class="pun">&lt;/</span><span class="tag">mx:Script</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>Nesta parte do código além do bloco das tags de inicio e fim de script, também estão declaradas as importações das bibliotecas ResultEvent, Alert e FaultEvent que serão utilizadas logo mais.</p>
<p>Agora crie a função faultHandler</p>
<div class="codigo">
<pre><em><code><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> faultHandler</span><span class="pun">(</span><span class="kwd">event</span><span class="pun">:</span><span class="typ">FaultEvent</span><span class="pun">):</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        </span><span class="typ">Alert</span><span class="pun">.</span><span class="pln">show</span><span class="pun">(</span><span class="kwd">event</span><span class="pun">.</span><span class="pln">fault</span><span class="pun">.</span><span class="pln">faultString</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Erro"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></code></em></pre>
</div>
<p>A função faultHandler recebe um parâmetro do tipo FaultEvent que será exibido para o usuário através do Alert.show quando algum erro ocorrer durante a requisição ao .NET.</p>
<p>Agora crie os métodos de preenchimento dos valores do combobox região.</p>
<div class="codigo">
<pre><em><code><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> bindRegion</span><span class="pun">():</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        roNet</span><span class="pun">.</span><span class="pln">getRegion</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> gotRegion</span><span class="pun">(</span><span class="kwd">event</span><span class="pun">:</span><span class="typ">ResultEvent</span><span class="pun">):</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        cbRegion</span><span class="pun">.</span><span class="pln">dataProvider </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">event</span><span class="pun">.</span><span class="pln">result</span><span class="pun">;</span><span class="pln">
        cbRegion</span><span class="pun">.</span><span class="pln">selectedIndex </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
        bindTerritories</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></code></em></pre>
</div>
<p>No código acima foram criadas duas funções, bindRegion e gotRegion. A função bindRegion chama o método getRegion do remote object roNet.</p>
<p>Após o retorno da requisição ao método roNet.getRegion, a função gotRegion é disparada recebendo um parâmetro do tipo ResultEvent que contém o retorno do método getRegion, o retorno é associado como dataProvider do combobox cbRegion, em seguida é selecionado o índice zero dos dados retornados. Após a seleção do índice, a função bindTerritories() é disparada.</p>
<div class="codigo">
<pre><em><code><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> bindTerritories</span><span class="pun">():</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        roNet</span><span class="pun">.</span><span class="pln">getTerritories</span><span class="pun">(</span><span class="pln">cbRegion</span><span class="pun">.</span><span class="pln">selectedItem</span><span class="pun">.</span><span class="typ">RegionID</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> gotTerritories</span><span class="pun">(</span><span class="kwd">event</span><span class="pun">:</span><span class="typ">ResultEvent</span><span class="pun">):</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        cbTerritory</span><span class="pun">.</span><span class="pln">dataProvider </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">event</span><span class="pun">.</span><span class="pln">result</span><span class="pun">;</span><span class="pln">
        cbTerritory</span><span class="pun">.</span><span class="pln">selectedIndex </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
        bindEmployee</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></code></em></pre>
</div>
<p>Assim como a função bindRegion, bindTerritories chama um método do remote object roNet, porém agora o método chamado é o getTerritories, esse método espera como parâmetro o código da região, por isso o parâmetro informado é o cbRegion.selectedItem.RegionID. RegionID é uma propriedade que o dataProvider do cbRegion passou a ter após a atribuição do event.result. Abaixo estão as demais funções para a preparação dos comboboxs.</p>
<div class="codigo">
<pre><em><code><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> bindEmployee</span><span class="pun">():</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        roNet</span><span class="pun">.</span><span class="pln">getEmployee</span><span class="pun">(</span><span class="pln">cbTerritory</span><span class="pun">.</span><span class="pln">selectedItem</span><span class="pun">.</span><span class="typ">TerritoryID</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> gotEmployee</span><span class="pun">(</span><span class="kwd">event</span><span class="pun">:</span><span class="typ">ResultEvent</span><span class="pun">):</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        cbEmployee</span><span class="pun">.</span><span class="pln">dataProvider </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">event</span><span class="pun">.</span><span class="pln">result</span><span class="pun">;</span><span class="pln">
        cbEmployee</span><span class="pun">.</span><span class="pln">selectedIndex </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
        bindCustomers</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">       

</span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> bindCustomers</span><span class="pun">():</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        roNet</span><span class="pun">.</span><span class="pln">getCustomers</span><span class="pun">(</span><span class="pln">cbEmployee</span><span class="pun">.</span><span class="pln">selectedItem</span><span class="pun">.</span><span class="typ">EmployeeID</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> gotCustomers</span><span class="pun">(</span><span class="kwd">event</span><span class="pun">:</span><span class="typ">ResultEvent</span><span class="pun">):</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        cbCustomer</span><span class="pun">.</span><span class="pln">dataProvider </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">event</span><span class="pun">.</span><span class="pln">result</span><span class="pun">;</span><span class="pln">
        cbCustomer</span><span class="pun">.</span><span class="pln">selectedIndex </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></code></em></pre>
</div>
<p>Para que quando o usuário acesse a aplicação os comboboxs já sejam preenchidos é necessário definir a propriedade creationComplete na tag mx:Application.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">mx:Application</span><span class="pln"> </span><span class="atn">xmlns:mx</span><span class="pun">=</span><span class="atv">"http://www.adobe.com/2006/mxml"</span><span class="pln"> </span><span class="atn">layout</span><span class="pun">=</span><span class="atv">"absolute"</span><span class="pln"> </span><span class="atn">creationComplete</span><span class="pun">=</span><span class="atv">"bindRegion()"</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>Com essa propriedade definida, depois de criada a aplicação, a função bindRegion será disparada iniciando assim a população de todos os comboboxs, pois eles estão aninhados.</p>
<p>Também é preciso configurar os comboboxs para que depois de alterada a seleção de um dos filtros, os outros sejam alterados também, para isso será utilizada a propriedade change.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">mx:ComboBox</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"cbRegion"</span><span class="pln"> </span><span class="atn">labelField</span><span class="pun">=</span><span class="atv">"RegionDescription"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"89"</span><span class="pln"> </span><span class="atn">change</span><span class="pun">=</span><span class="atv">"bindTerritories()"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"-274"</span><span class="pun">&gt;&lt;/</span><span class="tag">mx:ComboBox</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:ComboBox</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"cbTerritory"</span><span class="pln"> </span><span class="atn">labelField</span><span class="pun">=</span><span class="atv">"TerritoryDescription"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"89"</span><span class="pln"> </span><span class="atn">change</span><span class="pun">=</span><span class="atv">"bindEmployee()"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"-114"</span><span class="pun">&gt;&lt;/</span><span class="tag">mx:ComboBox</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:ComboBox</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"cbEmployee"</span><span class="pln"> </span><span class="atn">labelField</span><span class="pun">=</span><span class="atv">"FullName"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"89"</span><span class="pln"> </span><span class="atn">change</span><span class="pun">=</span><span class="atv">"bindCustomers()"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"49"</span><span class="pun">&gt;&lt;/</span><span class="tag">mx:ComboBox</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>Agora faça a população da datagrid,</p>
<div class="codigo">
<pre><em><code><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> bindOrders</span><span class="pun">():</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        roNet</span><span class="pun">.</span><span class="pln">getOrders</span><span class="pun">(</span><span class="pln">cbCustomer</span><span class="pun">.</span><span class="pln">selectedItem</span><span class="pun">.</span><span class="typ">CustomerID</span><span class="pun">,</span><span class="pln">cbEmployee</span><span class="pun">.</span><span class="pln">selectedItem</span><span class="pun">.</span><span class="typ">EmployeeID</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> gotOrders</span><span class="pun">(</span><span class="kwd">event</span><span class="pun">:</span><span class="typ">ResultEvent</span><span class="pun">):</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        dgPedido</span><span class="pun">.</span><span class="pln">dataProvider </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">event</span><span class="pun">.</span><span class="pln">result</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></code></em></pre>
</div>
<p>Para que a função bindOrders seja disparada ao clicar o botão Consultar, defina a propriedade click do botão btConsultar.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">mx:Button</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">label</span><span class="pun">=</span><span class="atv">"Consultar"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"119"</span><span class="pln"> </span><span class="atn">click</span><span class="pun">=</span><span class="atv">"bindOrders()"</span><span class="pln"> </span><span class="atn">horizontalCenter</span><span class="pun">=</span><span class="atv">"310"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"btConsultar"</span><span class="pun">/&gt;</span></code></em></pre>
</div>
<p>Para finalizar o projeto, crie a estrutura para exibir os detalhes dos pedidos. Para isso crie uma TitleWindow, em File / New / MXML Component, defina o nome de orderDetails, baseado em TitleWindow</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/26_criarnovocomponente-300x284.png" alt="" /></p>
<p>Utilize o código abaixo para a TitleWindow orderDetails.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;?</span><span class="pln">xml version</span><span class="pun">=</span><span class="str">"1.0"</span><span class="pln"> encoding</span><span class="pun">=</span><span class="str">"utf-8"</span><span class="pun">?&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:TitleWindow</span><span class="pln"> </span><span class="atn">xmlns:mx</span><span class="pun">=</span><span class="atv">"http://www.adobe.com/2006/mxml"</span><span class="pln"> </span><span class="atn">layout</span><span class="pun">=</span><span class="atv">"absolute"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"730"</span><span class="pln"> </span><span class="atn">height</span><span class="pun">=</span><span class="atv">"420"</span><span class="pln"> </span><span class="atn">title</span><span class="pun">=</span><span class="atv">"Detalhes do Pedido"</span><span class="pln"> </span><span class="atn">showCloseButton</span><span class="pun">=</span><span class="atv">"true"</span><span class="pln"> </span><span class="atn">close</span><span class="pun">=</span><span class="atv">"{PopUpManager.removePopUp(this)}"</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:Script</span><span class="pun">&gt;</span><span class="pln">
        &lt;![CDATA[
                import mx.managers.PopUpManager;
                import mx.events.CloseEvent;
        ]]&gt;
</span><span class="pun">&lt;/</span><span class="tag">mx:Script</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:DataGrid</span><span class="pln"> </span><span class="atn">left</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">right</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">top</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">bottom</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"dgOrderDetails"</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:columns</span><span class="pun">&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Cód."</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"ProductID"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Produto"</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"ProductName"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Preço Un."</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"UnitPrice"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Qtde"</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"Quantity"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Desconto"</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"Discount"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Total"</span><span class="pln"> </span><span class="atn">dataField</span><span class="pun">=</span><span class="atv">"Total"</span><span class="pun">/&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">mx:columns</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">mx:DataGrid</span><span class="pun">&gt;</span><span class="pln">  
</span><span class="pun">&lt;/</span><span class="tag">mx:TitleWindow</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>Crie as funções para a população da TitleWindow orderDetails dentro do script do arquivo ArtigoFlex.mxml</p>
<div class="codigo">
<pre><em><code><span class="kwd">import</span><span class="pln"> mx</span><span class="pun">.</span><span class="pln">managers</span><span class="pun">.</span><span class="typ">PopUpManager</span><span class="pun">;</span><span class="pln">

</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> bindOrderDetails</span><span class="pun">():</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        roNet</span><span class="pun">.</span><span class="pln">getOrderDetails</span><span class="pun">(</span><span class="pln">dgPedido</span><span class="pun">.</span><span class="pln">selectedItem</span><span class="pun">.</span><span class="typ">OrderID</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> gotOrderDetails</span><span class="pun">(</span><span class="kwd">event</span><span class="pun">:</span><span class="typ">ResultEvent</span><span class="pun">):</span><span class="kwd">void</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">var</span><span class="pln"> popUp</span><span class="pun">:</span><span class="pln">orderDetails </span><span class="pun">=</span><span class="pln"> orderDetails</span><span class="pun">(</span><span class="typ">PopUpManager</span><span class="pun">.</span><span class="pln">createPopUp</span><span class="pun">(</span><span class="kwd">this</span><span class="pun">,</span><span class="pln"> orderDetails</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">));</span><span class="pln">
        </span><span class="typ">PopUpManager</span><span class="pun">.</span><span class="pln">centerPopUp</span><span class="pun">(</span><span class="pln">popUp</span><span class="pun">);</span><span class="pln">
        popUp</span><span class="pun">.</span><span class="pln">dgOrderDetails</span><span class="pun">.</span><span class="pln">dataProvider </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">event</span><span class="pun">.</span><span class="pln">result</span><span class="pun">;</span><span class="pln">                                              
</span><span class="pun">}</span></code></em></pre>
</div>
<p>Altere a primeira coluna da datagrid dgPedido para o código abaixo para inserir o botão para exibir os detalhes do pedido.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">mx:DataGridColumn</span><span class="pln"> </span><span class="atn">headerText</span><span class="pun">=</span><span class="atv">"Detalhes"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"85"</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:itemRenderer</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">mx:Component</span><span class="pun">&gt;</span><span class="pln">                                          
        </span><span class="pun">&lt;</span><span class="tag">mx:HBox</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"100%"</span><span class="pln"> </span><span class="atn">height</span><span class="pun">=</span><span class="atv">"100%"</span><span class="pln"> </span><span class="atn">horizontalAlign</span><span class="pun">=</span><span class="atv">"center"</span><span class="pun">&gt;</span><span class="pln">
                </span><span class="pun">&lt;</span><span class="tag">mx:Button</span><span class="pln"> </span><span class="atn">y</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"80"</span><span class="pln"> </span><span class="atn">label</span><span class="pun">=</span><span class="atv">"Detalhes"</span><span class="pln"> </span><span class="atn">click</span><span class="pun">=</span><span class="atv">"outerDocument.bindOrderDetails()"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"btDetalhes"</span><span class="pun">/&gt;</span><span class="pln">
        </span><span class="pun">&lt;/</span><span class="tag">mx:HBox</span><span class="pun">&gt;</span><span class="pln">                      
</span><span class="pun">&lt;/</span><span class="tag">mx:Component</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">mx:itemRenderer</span><span class="pun">&gt;</span><span class="pln">                              
</span><span class="pun">&lt;/</span><span class="tag">mx:DataGridColumn</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>Salve o projeto e execute, o resultado deve ser como o das figuras abaixo.</p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/27_datagridpreenchida-300x216.png" alt="" /></p>
<p><img src="http://conteudo.imasters.uol.com.br/12375/28_datagridorderdetailspreenchida-300x216.png" alt="" /></p>
<p>Baixe o <a href="http://www.igormusardo.com.br/wp-content/uploads/2009/01/fonte.rar" target="_blank">código fonte completo</a>.</p>
<p>Divirta-se.</p>
<p><span class="c4">Publicado originalmente em <em><a href="http://www.igormusardo.com.br/2009/01/26/construindo-aplicacoes-ricas-de-internet-com-adobe-flex-3-e-aspnet">http://www.igormusardo.com.br</a></em></span></p>
<p><em>Fonte: <a onclick="javascript:urchinTracker ('/outbound/article/www.pplware.com');" href="http://imasters.uol.com.br/artigo/12375/aspnet/construindo_aplicacoes_ricas_de_internet_com_adobe_flex_3_e_aspnet/" target="_blank">Imasters</a></em></div>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/construindo-aplicacoes-ricas-de-internet-com-adobe-flex-3-e-aspnet/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>.NET &#8211; Invocação de objetos Remotos (Remoting)</title>
		<link>http://www.debugando.com/net-invocacao-de-objetos-remotos-remoting/</link>
		<comments>http://www.debugando.com/net-invocacao-de-objetos-remotos-remoting/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 23:36:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Objetos Remotos]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=496</guid>
		<description><![CDATA[O .NET Remoting suporta a comunicação de objetos distribuídos pela utilização da representação binária ou SOAP do fluxo de dados.
Sendo mais direto: O .NET Remoting proporciona que seus aplicativos tenham comunicação com sistemas remotos utilizando protocolos de comunicação.
Uma das vantagens é que podemos aproveitar os recursos de um projeto desktop (Windows Forms) em um projeto [...]]]></description>
			<content:encoded><![CDATA[<p>O <strong>.NET Remoting</strong> suporta a comunicação de objetos distribuídos pela utilização da representação binária ou <strong>SOAP </strong>do fluxo de dados.</p>
<p>Sendo mais direto: <strong>O .NET Remoting proporciona que seus aplicativos tenham comunicação com sistemas remotos utilizando protocolos de comunicação</strong>.</p>
<p>Uma das vantagens é que podemos aproveitar os recursos de um projeto desktop (Windows Forms) em um projeto web usando o .NET Remoting, efetuando troca de informações entre os processos através de métodos e funções. Dessa forma temos que os objetos distribuídos representam serviços que uma camada de componentes oferece para uma camada de apresentação do sistema. Lembre-se que para que a troca de informações seja possível, os objetos devem ser serializáveis.</p>
<p>Os 3 componentes principais do <strong>.NET Framework Remoting</strong> são:</p>
<ol>
<li><strong>Remotable Object</strong></li>
<li><strong>Remote Listener Application &#8211; (escuta requisições para o Remote Object)</strong></li>
<li><strong>Remote Client Application &#8211; (efetua requisições para o Remote Object)</strong></li>
</ol>
<p>O <strong>Remote Object</strong> é implementado em uma classe que deriva de <kbd>System.MarshalByRefObject</kbd> .</p>
<p>Portanto o <strong>Remotable Object</strong> é qualquer objeto fora do domínio da aplicação. Qualquer objeto pode ser transformado em um objeto remoto a partir da classe <strong>MarshalByRefObject</strong>. (Um objeto remoto é derivado da classe MarshalByRefObject)</p>
<p><strong>A classe <em>MarshalByRefObject</em> permite acesso a objetos através de limites de domínio do aplicativo em aplicativos que suporte o Remoting.</strong></p>
<p>Um domínio de aplicativo é uma partição em um processo do sistema operacional onde um ou mais aplicativos residem. Objetos no mesmo domínio do aplicativo se comunicam diretamente. Objetos em domínios diferentes aplicativos se comunicam por transporte de cópias dos objetos através de limites de domínio de aplicativo, ou usando um proxy para trocar mensagens.</p>
<p><strong>MarshalByRefObject</strong> é a classe base para objetos que se comunicam através de limites de domínio de aplicativo, trocar mensagens usando um proxy. Objetos que não herdam de <strong>MarshalByRefObject</strong> são implicitamente empacotados por valor. Quando um aplicativo remoto referencia um pacote por valor de objeto, uma cópia do objeto é passada através de limites de domínio de aplicativo.</p>
<p>Objetos que não herdem de <strong>MarshalByRefObject</strong> são chamados de <strong>Non-Remotable Objects</strong>.</p>
<p>A seguir temos um fluxo básico da <strong>arquitetura .NET Remoting</strong>:</p>
<p><img src="http://conteudo.imasters.uol.com.br/11390/net_rmt1.gif" alt="" /></p>
<p><img src="http://conteudo.imasters.uol.com.br/11390/net_rmt4.gif" alt="" /></p>
<p>Quando um cliente chama um método remoto, ele não chama o método diretamente, ele recebe um <strong>proxy</strong> para o objeto remoto e o utiliza para invocar o método em um <strong>Remote Object</strong>.</p>
<p>Desde que o proxy recebe a chamada do método do cliente, ele codifica a mensagem usando um formato apropriado (<strong>Binary Formatter ou SOAP Formatter</strong>).</p>
<p>Formatters são usados para codificar e decodificar mensagens antes que elas sejam transportadas pelo Canal.</p>
<p>Existem dois tipos de formatadores suportados:</p>
<ul>
<li>Binary Formatter &#8211; (System.RunTime.Serialization.Formatters.Binary) &#8211; os dados possuem um tamanho menor;</li>
<li>SOAP Formatter &#8211; (System.RunTime.Serialization.Formatters.Soap) &#8211; dados no formato texto baseado em arquivos XML que podem ser lidos;</li>
</ul>
<p>A configuração dos formatadores e dos canais é feita através de arquivos de configuração como arquivos XML.</p>
<p>A seguir ele efetua a chamada para o servidor usando um canal selecionado (<strong>TcpChannel ,HttpChannel</strong>).</p>
<p>Canais são usados para transportar mensagens entre objetos Remotos, sendo assim objetos responsáveis pelo tratamento dos protocolos de rede e formatos de serialização.</p>
<p>Um canal pode ser implementado pela chamada do método <kbd>ChannelServices.RegisterChannel</kbd> ou pela utilização do arquivo de configuração, mas deve ser registrado antes dos objetos.</p>
<p>Quando um canal é registrado, ele automaticamente inicia a escuta para as requisições do cliente em uma porta especificada. Pelo menos um canal deve ser registrado antes que um Remote Object possa ser chamado.</p>
<p>Existem dois tipos de canais :</p>
<ul>
<li>canal HTTP &#8211; transporta mensagens para e a partir de objetos remotos usando o protocolo SOAP;</li>
<li>canal TCP &#8211; usa o formato binário para serializar todas as mensagens para um fluxo binário e transporta o fluxo para uma URL de destino usando o protocolo TCP;</li>
</ul>
<p>O canal do lado do servidor recebe a requisição do proxy e encaminha para o Servidor no sistema remoto que localiza e invoca os métodos do objeto Remoto.</p>
<p>Quando a execução do método remoto é completada, qualquer resultado da chamada é retornado de volta ao cliente.</p>
<p>Antes de uma instância do objeto de um tipo Remotable poder ser acessado, ele precisa ser criado e inicializado pelo processo chamado <strong>Activation </strong>que pode ser classificado em dois modelos: <strong>Client-Activated Objects e Server-activated Objects</strong>.</p>
<p>A diferença entre <strong>client-activated e server-activated</strong> é que o primeiro não é realmente criado quando faz a sua instanciação, ao invés disso, ele é criado somente quando necessário.</p>
<p>Por padrão .NET Framework vem com dois formatadores: <strong>Binary Formatter or SOAP Formatter</strong> e dois canais : <strong>TcpChannel ,HttpChannel</strong></p>
<h4><span class="c2">Trabalhando com .NET Remoting</span></h4>
<h5>1- Criando o Remotable Type</h5>
<p>No código abaixo temos um exemplo da criação de um objeto remoto no VB .NET que envia a hora atual para a aplicação cliente usando o Framwork Remoting.</p>
<p>Note que a classe <strong>RemoteTim</strong>e é derivada de <strong>MarshalByRefObject</strong> e, que no interior da classe, ele possui o método <strong>getTime()</strong> o qual retorna a hora atual de um <strong>Remote Object</strong>.</p>
<div class="codigo">
<pre><em><code>Imports System
Public Class RemoteTime
   Inherits MarshalByRefObject

   Private currentTime As String = ""

   Public Function getTime() As String
          currentTime = DateTime.Now.ToShortTimeString()
          Return "Hora do servidor remoto : " &amp; currentTime
   End Function 

End Class </code></em></pre>
</div>
<p>Crie uma aplicação do tipo <strong>Class Library</strong> no VB .NET e salve com o nome de <strong>RemoteTime.vb</strong>; em seguida compile o arquivo em um library usando a linha de comando do NET Framework com a seguinte sintaxe:</p>
<p><span class="c2"><strong>vbc /t:library RemoteTime.vb</strong></span></p>
<p>Após isso você irá obter o arquivo <strong>RemoteTime.dll</strong> .</p>
<h5>2- Criando o Remote Listener Application</h5>
<p>Agora temos que criar um objeto <strong>Listener </strong>para permitir que os objetos do domínio da outra aplicação possam criar instâncias do nosso objeto <strong>RemoteTime</strong> remotamente.</p>
<p>Quando da criação do objeto <strong>Listener </strong>temos que escolher e registrar o canal para o tratamento do protocolo de rede e do formato de serialização e registrar o Tipo no .NET Remoting de forma que ele possa usar o canal para escutar as requisições para o Tipo.</p>
<p>No exemplo a seguir vamos criar uma aplicação listener chamada <strong>TimeListener</strong> que irá atuar como um objeto Listener para o Tipo Remoto <strong>RemoteTime</strong>.</p>
<p>A classe Listener TimeListener precisa estar habilitada a encontrar o arquivo TimeListener.exe.config para carregar a configuração para a classe RemotableType.</p>
<p>Vamos criar uma aplicação do tipo console no <span class="c2">VB 2008 Express</span> com o nome <strong>TimeListener</strong>;</p>
<p>A seguir copie o código abaixo no arquivo <strong>TimeListener.vb</strong>;</p>
<div class="codigo">
<pre><em><code>Imports System
Imports System.Runtime.Remoting

Public Class TimeListener
     Public Shared Sub Main()
             RemotingConfiguration.Configure("TimeListener.exe.config")
             Console.WriteLine("Escutando requisições do cliente. Para sair pressione ENTER...")
             Console.ReadLine()
      End Sub
End Class</code></em></pre>
</div>
<p>A seguir temos que criar um arquivo de configuração adicional para fornecer a informação da comunicação para o objeto <strong>listener</strong>.</p>
<p>O arquivo de configuração é um arquivo padrão XML onde podemos especificar o modo de ativação (<strong>Activation Mode</strong>) , o tipo Remoto (<strong>Remote Type</strong>) , Canal , porta para comunicação , etc.</p>
<p>Vemos abaixo o arquivo XML  <strong>TimeListener.exe.config</strong>:</p>
<div class="codigo">
<pre><em><code>&lt;configuration&gt;
   &lt;system.runtime.remoting&gt;
     &lt;application&gt;
       &lt;service&gt;
       &lt;wellknown mode="Singleton" type="RemoteTime, RemoteTime" objectUri="RemoteTime.rem" /&gt;
      &lt;/service&gt;
       &lt;channels&gt;
        &lt;channel ref="http" port="9090" /&gt;
       &lt;/channels&gt;
   &lt;/application&gt;
    &lt;/system.runtime.remoting&gt;
&lt;/configuration&gt;</code></em></pre>
</div>
<p>Vamos compilar o arquivo <strong>TimeListener.vb</strong> usando a ferramenta de linha de comando da plataforma .NET. O comando é o seguinte:</p>
<p><span class="c2">vbc /r:RemoteTime.dll TimeListener.vb</span></p>
<p>Após compilar você deve obter o arquivo <strong>TimeListener.exe</strong>.</p>
<h4><span class="c2">Criando o aplicação CLiente</span></h4>
<h5>3-  Criando o Remote Client Application</h5>
<p>A aplicação cliente que faz a chamada ao método do objeto Remoto é muito fácil de criar no VB .NET.</p>
<p>Crie uma nova aplicação do tipo Console no VB .NET com o nome <strong>Client </strong>e copie o código abaixo no arquivo <strong>Client.vb</strong>;</p>
<div class="codigo">
<pre><em><code>Imports System
Imports System.Runtime.Remoting

Public Class Client
   Public Shared Sub Main()
         RemotingConfiguration.Configure("Client.exe.config")
        Dim remoteTimeObject As New RemoteTime()
        Console.WriteLine(remoteTimeObject.getTime())
End Sub
End Class</code></em></pre>
</div>
<p>A aplicação cliente cria uma instância do Tipo remoto <strong>RemoteTime</strong> e chama o método <strong>getTime()</strong> ; além disso ela usa o arquivo de configuração <strong>cliente.exe.config</strong> para obter a informação da comunicação para o <strong>Remoting Framework</strong>.</p>
<p>Temos então que criar um arquivo de configuração adicional para fornecer a informação da comunicação para o objeto <strong>Client</strong>.</p>
<div class="codigo">
<pre><em><code>&lt;configuration&gt;
    &lt;system.runtime.remoting&gt;
      &lt;application&gt;
       &lt;client&gt;
              &lt;wellknown type="RemoteTime, RemoteTime" url="http://localhost:9090/RemoteTime.rem" /&gt;
       &lt;/client&gt;
     &lt;/application&gt;
  &lt;/system.runtime.remoting&gt;
&lt;/configuration&gt;</code></em></pre>
</div>
<p>Compile o arquivo Client.vb usando a ferramenta da linha de comando do <strong>NET Framework SDK</strong>. O comando é o seguinte:</p>
<p><span class="c2"><strong>vbc /r:RemoteTime.dll Client.vb</strong></span></p>
<p>Iremos obter o arquivo Client.exe.</p>
<p>Compilando e rodando a aplicação</p>
<p>Já temos os arquivos necessários para colocar para funcionar o nosso exemplo de aplicação usando o .NET Remoting. Então vamos lá&#8230;</p>
<p>Crie uma nova pasta chamara <strong>SRC </strong>e ponha os três arquivos que criamos nesta pasta:</p>
<ol>
<li><a class="ext" href="http://vb.net-informations.com/remoting/vb.net-remotable-type.htm">RemoteTime.vb</a></li>
<li><a class="ext" href="http://vb.net-informations.com/remoting/vb.net-remote-listener.htm">TimeListener.vb</a></li>
<li><a class="ext" href="http://vb.net-informations.com/remoting/vb.net-remote-client.htm">Client.vb</a></li>
</ol>
<p>Inclua os dois arquivos de configuração na mesma pasta:</p>
<ol>
<li><a class="ext" href="http://vb.net-informations.com/remoting/vb.net-remote-configuration.htm">TimeListener.exe.config</a></li>
<li><a class="ext" href="http://vb.net-informations.com/remoting/vb.net-remote-configuration.htm">Client.exe.config</a></li>
</ol>
<p>Lembre-se de que os arquivos já foram compilados usando a ferramenta de linha de comando do .<strong>NET Framework SDK</strong>. Os comandos usados foram:</p>
<p><span class="c2"><strong>vbc /t:library RemoteTime.vb</strong></span></p>
<p><span class="c2"><strong>vbc /r:RemoteTime.dll TimeListener.vb</strong></span></p>
<p><span class="c2"><strong>vbc /r:RemoteTime.dll Client.vb</strong></span></p>
<p><img src="http://conteudo.imasters.uol.com.br/11390/net_rmt2.gif" alt="" /></p>
<p><span class="c1">Nota: Você deve fornecer o caminho físico para cada arquivo na compilação. Ex: se os arquivos estiverem na pasta c:\SRC , você deverá informar:</span></p>
<h5><span class="c1">vbc /r:c:\SRC\RemoteTime.dll c:\SRC\TimeListener.vb</span></h5>
<p>Após compilar os arquivos fontes deveremos obter os 3 arquivos na pasta <strong>SRC</strong>:  <span class="c2">RemoteTime.dll</span>, <span class="c2">TimeListener.exe</span> e <span class="c2">Client.exe</span></p>
<h4><span class="c2">Rodando a aplicação</span></h4>
<p>Agora crie duas novas pastas com o nome <strong>Server </strong>e <strong>Client </strong>respectivamente:</p>
<p>- Copie os arquivos : <span class="c2">RemoteTime.dll , TimeListener.exe and TimeListener.exe.config</span> para a pasta <strong>Server</strong>;</p>
<p>- Copie os arquivos:  <span class="c2">RemoteTime.dll , Client.exe and Client.exe.config</span> para pasta <strong>Client</strong>;</p>
<p><img src="http://conteudo.imasters.uol.com.br/11390/net_rmt3.gif" alt="" /></p>
<p>Abra um prompt de comando na pasta Server e digite : <strong>TimeListener</strong></p>
<p>Você deverá obter uma janela exibindo a mensagem : <span class="c2">Escutando requisições do cliente. Para sair pressione ENTER&#8230;</span></p>
<p>Abra um prompt de comando na pasta <strong>Client </strong>e digite <strong>Client</strong>;</p>
<p>Você deverá obter a hora atual do objeto remoto.</p>
<p><strong><span class="c1">Nota: Se você obtiver uma exceção relativa à segurança do IIS, você deverá configurar o IIS.</span></strong></p>
<p>Pronto! Você acabou de criar o seu primeiro programa usando <strong>.NET Remoting</strong> com sucesso.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/net-invocacao-de-objetos-remotos-remoting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial C#: Introdução às Console Applications</title>
		<link>http://www.debugando.com/tutorial-c-introducao-as-console-applications/</link>
		<comments>http://www.debugando.com/tutorial-c-introducao-as-console-applications/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 13:09:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=300</guid>
		<description><![CDATA[Na continuidade dos tutoriais de C#, decidi hoje introduzir uma novidade. As Console Application. Até agora os tutoriais foram sobretudo orientados às Windows Applications, mas hoje será relacionado com as Console Application.

Certamente muitos de vós estão a suspirar pelos tutoriais mais difíceis, mas como estes tutoriais ainda são de iniciação, servem sobretudo para aprender as [...]]]></description>
			<content:encoded><![CDATA[<p>Na continuidade dos tutoriais de C#, decidi hoje introduzir uma novidade. As Console Application. Até agora os tutoriais foram sobretudo orientados às Windows Applications, mas hoje será relacionado com as Console Application.</p>
<p><img src="http://www.pplware.com/wp-content/images2008/csharp_01/imagem_csharp01.jpg" alt="" width="425" height="393" /></p>
<p>Certamente muitos de vós estão a suspirar pelos tutoriais mais difíceis, mas como estes tutoriais ainda são de iniciação, servem sobretudo para aprender as noções básicas sobre C# para quem não sabe este tipo de linguagem.</p>
<p>Dito isto, vamos então começar a programar.<br />
Vamos dar uma ajuda a muita gente, o tema do tutorial é sobre tabuada. O código que será escrito serve para no fim apresentar a tabuada de um número inteiro entre 1 e 9. O número será escolhido pelo utilizador.<br />
Como se trata de uma Console Application, é necessário escolher essa opção.</p>
<p><strong>- Crie um novo projecto e escolha Console Application</strong></p>
<p align="center"><img src="http://www.pplware.com/wp-content/images2008/csharp_03/imagem_csharp03_01.jpg" alt="" /></p>
<p>Irá poder verificar que agora já não existe nenhum lugar para colocar “botões”, “textbox” e outros elementos gráficos. Pois nas Console Application a apresentação dos resultados é tipo “DOS”.</p>
<p>O código deve ser escrito dentro das chavetas do <strong>static void</strong>.</p>
<p align="center"><img src="http://www.pplware.com/wp-content/images2008/csharp_03/imagem_csharp03_02.jpg" alt="" width="425" height="229" /></p>
<p>Vamos criar duas variáveis de inteiros.</p>
<p>Uma variável para “guardar” o número que o utilizador escolher, e uma variável para contar o número de vezes que já foi feito o cálculo, isto é, como a tabuada acaba aos “10”, é necessário o programa saber quando acaba.</p>
<p><strong>- Crie a variável int numero e int contador</strong></p>
<p>Não se esqueça de atribuir o valo 0 (zero) às variáveis.</p>
<p>int numero = 0 ;<br />
int contador = 0;</p>
<p>Enquanto nas Windows Application tem botões e textbox para inserir números, nas Console Application isso não acontece.</p>
<p>Neste caso, para poder “aparecer” algo no ecrã da console, e para escrever o número terá de usar a classe Console.</p>
<p>Vamos então permitir ao utilizador inserir um número.</p>
<p>- Para isso escreva Console e de seguida coloque um ponto (.)</p>
<p>Irá verificar que surgiram bastantes opções para a classe.</p>
<p>- Neste caso vamos usar a WriteLine (Console.WriteLine)</p>
<p>Como o próprio nome indica, “linha para escrever”.</p>
<p>Com este código podemos acrescentar a pergunta que queremos que seja mostrada.</p>
<p>Para isso coloque:</p>
<p><strong>* Console.WriteLine (“Introduza o número da tabuada que quer saber?”);</strong></p>
<p>Como já foi explicado em tutoriais anteriores, não se esqueça de colocar as aspas, pois é uma string.</p>
<p>Se pressionar o CTRL + F5, o resultado deverá ser igual à imagem seguinte.</p>
<p align="center"><img src="http://www.pplware.com/wp-content/images2008/csharp_03/imagem_csharp03_03.jpg" alt="" /></p>
<p>Agora é necessário fazer com que o programa saiba qual foi o número que o utilizador introduziu.</p>
<p>Para isso teremos de acrescentar o seguinte código.</p>
<p><strong>- numero = Int32.Parse(Console.ReadLine());</strong></p>
<p><strong>Este código faz o seguinte</strong>:</p>
<ul>
<li>Atribui à variável numero, o valor inserido pelo utilizador.</li>
<li>Converte o número introduzido num inteiro (Int32.Parse).</li>
<li>O Console.ReadLine faz com que o programa “leia a linha”</li>
</ul>
<p>Agora que o programa já “sabe” o número que foi introduzido, vamos fazer com que a validação seja feita.</p>
<p>Como foi mencionado no início, o utilizador só poderá introduzir um valor entre 1 e 10.</p>
<p>Para esta validação, vamos precisar do if e do else.</p>
<p><strong>A lógica de pensamento é</strong>:</p>
<p>Se o número for igual ou inferior a 0 ou o número for superior a 10</p>
<p>O programa avisa que o número está fora do permitido.</p>
<p><strong>Senão</strong></p>
<p>Elabora a tabuada enquanto não atingir 10 resultados</p>
<p>Apresenta os números referentes à tabuada.</p>
<p>- A expressão “ou” em C# escreve-se com o código ||</p>
<p><strong>O código será</strong>:</p>
<p><!--  /* Font Definitions */  @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:1; 	mso-generic-font-family:roman; 	mso-font-format:other; 	mso-font-pitch:variable; 	mso-font-signature:0 0 0 0 0 0;} @font-face 	{font-family:Calibri; 	panose-1:2 15 5 2 2 2 4 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073750139 0 0 159 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} .MsoPapDefault 	{mso-style-type:export-only; 	margin-bottom:10.0pt; 	line-height:115%;} @page Section1 	{size:612.0pt 792.0pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --></p>
<p>if (numero &lt;= 0 || numero &gt; 10)</p>
<p>{</p>
<p>Console.WriteLine(”O número inválido. Fora do intervalo”);</p>
<p>}</p>
<p>else</p>
<p>while (contador &lt;= 10)</p>
<p>{</p>
<p>Console.WriteLine(numero + ” x ” + contador + ” = ” + numero * contador);</p>
<p>contador = contador + 1;</p>
<p>}</p>
<p>Uma nota importante é o facto de se a primeira validação (se o número está entre os parâmetros permitidos) estiver correcta, ele “saltará” para o While.</p>
<p>No While verifica se já foram atingidos todos os ciclos (10). Ao apresentar os resultados, e como o faz individualmente, indica ao contador que foi contabilizado mais um número (contador = contador +1).</p>
<p>Assim, o resultado apresentado será:</p>
<p>O número introduzido (variável numero) vezes (*) o variável contador.</p>
<p>Como deve ter reparado, no código para apresentar o resultado o código tem:</p>
<p>(…) numero <strong>+ ” x ” +</strong> contador <strong>+ ” = ” +</strong> (…)</p>
<p>Isto serve exclusivamente para adicionar texto entre variáveis para que seja possível o resultado ficar igual a 8 x 1 = 8.</p>
<p>8 (variável numero) x 1 (variável contador) = 8.</p>
<p>- Pressione as teclas <strong>CTRL + F5</strong></p>
<p>E o resultado final será:</p>
<p align="center"><img src="http://www.pplware.com/wp-content/images2008/csharp_03/imagem_csharp03_04.jpg" alt="" /></p>
<p>Apesar de todos sabermos a tabuada (penso eu), este tutorial serviu exclusivamente para apresentar o código em Console Application. Os tutoriais seguintes serão orientados às Windows Application.</p>
<p>Na próxima semana o tema será base de dados, em que o objectivo é fazer uma simples ligação entre o programa e uma base de dados. Também servirá para dar início à construção de um pequeno programa, para funcionar como o nosso gestor de CDs ou Livros.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/tutorial-c-introducao-as-console-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial C# &#8211; II</title>
		<link>http://www.debugando.com/tutorial-c-ii/</link>
		<comments>http://www.debugando.com/tutorial-c-ii/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 11:56:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=116</guid>
		<description><![CDATA[Hoje vamos começar a trabalhar com variáveis e estruturas de decisão (if/else). O tutorial de hoje será simples, e visa somente em escrevermos três números, e o programa irá “dizer” qual o maior.


Em programação as variáveis fazem sempre parte da estrutura do código. No tutorial de hoje vamos a começar a trabalhar com este aspecto [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje vamos começar a trabalhar com variáveis e estruturas de decisão (if/else). O tutorial de hoje será simples, e visa somente em escrevermos três números, e o programa irá “dizer” qual o maior.</p>
<p align="center"><img src="http://www.pplware.com/wp-content/images2008/csharp_01/imagem_csharp01.jpg" alt="" width="425" height="393" /></p>
<p align="center">
<p style="text-align: left;">Em programação as variáveis fazem sempre parte da estrutura do código. No tutorial de hoje vamos a começar a trabalhar com este aspecto importantíssimo na programação.</p>
<p style="text-align: left;">Recomendo a leitura a todos que estão começando ou querendo começar no C#.</p>
<p style="text-align: left;"><em>Fonte: <a onclick="javascript:urchinTracker ('/outbound/article/www.pplware.com');" href="http://www.pplware.com/2008/12/04/tutorial-c-ii/" target="_blank">PeopleWare</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/tutorial-c-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introdução ao C#</title>
		<link>http://www.debugando.com/introducao-ao-c/</link>
		<comments>http://www.debugando.com/introducao-ao-c/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 12:11:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=89</guid>
		<description><![CDATA[Nos dias de hoje existe uma infinidade de linguagens de programação, e em alguns casos escolher/trocar uma é uma tarefa difícil, principalmente pelo fanatismo que os programadores de cada linguagem possuem.
Eu acredito esse fanatismo em alguns casos ser algo normal, afinal é o famoso “puxa a sardinha para o seu lado”, porém é preciso deixar [...]]]></description>
			<content:encoded><![CDATA[<p>Nos dias de hoje existe uma infinidade de linguagens de programação, e em alguns casos escolher/trocar uma é uma tarefa difícil, principalmente pelo fanatismo que os programadores de cada linguagem possuem.</p>
<p>Eu acredito esse fanatismo em alguns casos ser algo normal, afinal é o famoso “puxa a sardinha para o seu lado”, porém é preciso deixar claro que não existe uma “linguagem perfeita”.<br />
<img class="alignnone size-full wp-image-1170" title="C#" src="http://www.fernandoquadro.com.br/html/wp-content/uploads/2008/11/csharp.jpg" alt="" width="425" height="393" /><br />
Eu por exemplo, programo em algumas linguagens, apesar de simpatizar e ter a maior experiência em Java, não acho que ela seja a melhor, o que penso é que tudo depende do contexto.</p>
<p>Sendo assim, hoje vamos falar um pouco do C#, que é uma linguagem da Microsoft, e que tem crescido muito no mercado. Achei no site do Peopleware, co-irmão português, um <a onclick="javascript:urchinTracker ('/outbound/article/www.pplware.com');" href="http://www.pplware.com/2008/11/26/introducao-ao-c-csharp/" target="_blank">bom tutorial introdutório</a> e recomendo a leitura a todos que estão começando ou querendo começar no C#.</p>
<p><em>Fonte: <a onclick="javascript:urchinTracker ('/outbound/article/www.pplware.com');" href="http://www.pplware.com/2008/11/26/introducao-ao-c-csharp/" target="_blank">PeopleWare</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/introducao-ao-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

