<?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>Tiago Salgado &#187; dev</title>
	<atom:link href="http://blog.tiagosalgado.com/tag/dev/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tiagosalgado.com</link>
	<description>personal blog</description>
	<lastBuildDate>Sat, 21 Jan 2012 15:20:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Revista PROGRAMAR &#8211; 29ª Edição &#8211; Junho 2011</title>
		<link>http://blog.tiagosalgado.com/2011/06/15/revista-programar-29-edio-junho-2011/</link>
		<comments>http://blog.tiagosalgado.com/2011/06/15/revista-programar-29-edio-junho-2011/#comments</comments>
		<pubDate>Tue, 14 Jun 2011 23:01:16 +0000</pubDate>
		<dc:creator>Tiago Salgado</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[revista programar]]></category>

		<guid isPermaLink="false">http://blog.tiagosalgado.com/revista-programar-29-edio-junho-2011/</guid>
		<description><![CDATA[Download Tema de capa GIT &#8211; Controlo de Versões para Pequenos e Grandes Projectos A programar LUA &#8211; Linguagem de Programação &#8211; Parte 9 Introdução ao Cloud Computing e à Plataforma Windows Managed Extensibility Framework (MEF) e AJAX Microsoft BizTalk Server aos olhos dos programadores O Editor de texto VIM Visual (Not) Basic Introdução ao]]></description>
			<content:encoded><![CDATA[<p><img src="http://img3.imageshack.us/img3/9278/ed291.jpg" width="247" height="349" /></p>
</p>
<p><a href="http://www.portugal-a-programar.org/revista-programar/edicoes/download.php?e=29&amp;t=site">Download</a></p>
<p>Tema de capa    <br /><a href="http://www.revista-programar.info/?action=articles&amp;type=viewarticle&amp;n=209">GIT &#8211; Controlo de Versões para Pequenos e Grandes Projectos</a></p>
<p>A programar    <br /><a href="http://www.revista-programar.info/?action=articles&amp;type=viewarticle&amp;n=210">LUA &#8211; Linguagem de Programação &#8211; Parte 9</a>     <br /><a href="http://www.revista-programar.info/?action=articles&amp;type=viewarticle&amp;n=211">Introdução ao Cloud Computing e à Plataforma Windows</a>     <br /><a href="http://www.revista-programar.info/?action=articles&amp;type=viewarticle&amp;n=212">Managed Extensibility Framework (MEF) e AJAX</a>     <br /><a href="http://www.revista-programar.info/?action=articles&amp;type=viewarticle&amp;n=213">Microsoft BizTalk Server aos olhos dos programadores</a>     <br /><a href="http://www.revista-programar.info/?action=articles&amp;type=viewarticle&amp;n=214">O Editor de texto VIM</a></p>
<p>Visual (Not) Basic    <br /><a href="http://www.revista-programar.info/?action=articles&amp;type=viewarticle&amp;n=216">Introdução ao OpenXML SDK</a></p>
<p>Core Dump    <br /><a href="http://www.revista-programar.info/?action=articles&amp;type=viewarticle&amp;n=215">Fazer mal = Rápido?</a></p>
<p>Comunidades    <br /><a href="http://www.revista-programar.info/?action=articles&amp;type=viewarticle&amp;n=217">Certificações Microsoft</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tiagosalgado.com/2011/06/15/revista-programar-29-edio-junho-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instaladores Habilitados de TDT por Código Postal (JSON + C#)</title>
		<link>http://blog.tiagosalgado.com/2011/04/01/instaladores-habilitados-de-tdt-por-cdigo-postal-json-c/</link>
		<comments>http://blog.tiagosalgado.com/2011/04/01/instaladores-habilitados-de-tdt-por-cdigo-postal-json-c/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 17:30:00 +0000</pubDate>
		<dc:creator>Tiago Salgado</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[dev]]></category>

		<guid isPermaLink="false">http://blog.tiagosalgado.com/instaladores-habilitados-de-tdt-por-cdigo-postal-json-c/</guid>
		<description><![CDATA[Pois é, a TDT já anda aí, e por razões que não interessam, precisei de retornar todos os instaladores por cada código postal, cuja PT indica como sendo um instalador habilitado. Para tal, fiz uma pequena aplicação que enviada um pedido com o código postal, e interpretava o resultado retornado em JSON. Primeiro tive que]]></description>
			<content:encoded><![CDATA[<p>Pois é, a TDT já anda aí, e por razões que não interessam, precisei de retornar todos os instaladores por cada código postal, cuja PT indica como sendo um instalador habilitado.</p>
<p>Para tal, fiz uma pequena aplicação que enviada um pedido com o código postal, e interpretava o resultado retornado em JSON.</p>
<p>Primeiro tive que criar um ficheiro de texto com todos os códigos postais. Podem fazer download do que usei <a href="http://www.box.net/shared/hn52rj4h38" target="_blank">aqui</a>.</p>
<p>O código poderá não ser o melhor, mas fez o que pretendia e não precisei de me chatear mais com o assunto.</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:d60490cc-6ec5-4f42-a36b-2621f06e335e" class="wlWriterEditableSmartContent">
<pre name="code" class="c">using System;
using System.Collections.Generic;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;

namespace WebApplication1
{
    public class CPs
    {
        public string cp4 { get; set; }
        public string cp3 { get; set; }
    }

    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            GetData();
        }

        private void GetData()
        {
            List&lt;CPs&gt; cps = new List&lt;CPs&gt;();

            TextReader t = new StreamReader(@"C:cps.txt");
            string line = "";
            t.ReadLine();
            while (t.Peek() &gt; 0)
            {
                line = t.ReadLine();
                cps.Add(new CPs() { cp4 = line.Split('-')[0].ToString(), cp3 = line.Split('-')[1].ToString() });
            }

            HttpWebRequest request = null;

            foreach (CPs cp in cps)
            {
                try
                {
                    request = (HttpWebRequest)HttpWebRequest.Create(@"http://tdt.telecom.pt/handlers/installerSearch.ashx?cp4=" + cp.cp4 + "&amp;cp3=" + cp.cp3);
                    request.ContentType = "application/json; charset=utf-8";
                    request.Accept = "application/json, text/javascript, */*";
                    WebResponse response = request.GetResponse();

                    Stream stream = response.GetResponseStream();
                    string json = "";

                    using (StreamReader reader = new StreamReader(stream))
                    {
                        while (!reader.EndOfStream)
                        {
                            json += reader.ReadLine();
                        }
                    }

                    JavaScriptSerializer serializer = new JavaScriptSerializer();
                    Dictionary&lt;string, object&gt; x = (Dictionary&lt;string, object&gt;)serializer.DeserializeObject(json);

                    if (x.Count &gt; 0)
                        Response.Write(cp.cp4 + ";" + cp.cp3 + ";" + x["name"].ToString() + ";" + x["phoneNumber1"].ToString() + ";" + x["phoneNumber2"].ToString() + "&lt;br /&gt;");

                }
                catch (Exception)
                {

                }

            }
        }

    }

}</pre>
</div>
<p><!-- Start block. Created with Code4Blog for Microsoft Visual Studio 2010. Copyright (c)2010 Vitaly Zayko http://zayko.net --><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #a31515"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #a5c25c"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #a31515"><span style="color: #ffffff"><span style="color: #a5c25c"><span style="color: #ffffff"><span style="color: #a5c25c"><span style="color: #ffffff"><span style="color: #a5c25c"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #a5c25c"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #a5c25c"><span style="color: #ffffff"><span style="color: #a5c25c"><span style="color: #ffffff"><span style="color: #a5c25c"><span style="color: #ffffff"><span style="color: #a5c25c"><span style="color: #ffffff"><span style="color: #a5c25c"><span style="color: #ffffff"><span style="color: #a5c25c"><span style="color: #ffffff"><span style="color: #a5c25c"><span style="color: #ffffff"><span style="color: #a5c25c"><span style="color: #ffffff"><span style="color: #cc7832"><span style="color: #ffffff"><span style="color: #ffc66d"><span style="color: #ffffff"><!-- End block --></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tiagosalgado.com/2011/04/01/instaladores-habilitados-de-tdt-por-cdigo-postal-json-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CODE PROJECT VIRTUAL TECH SUMMIT ON MOBILE DEVELOPMENT – ON DEMAND</title>
		<link>http://blog.tiagosalgado.com/2011/03/12/code-project-virtual-tech-summit-on-mobile-development-on-demand/</link>
		<comments>http://blog.tiagosalgado.com/2011/03/12/code-project-virtual-tech-summit-on-mobile-development-on-demand/#comments</comments>
		<pubDate>Sat, 12 Mar 2011 17:21:20 +0000</pubDate>
		<dc:creator>Tiago Salgado</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://blog.tiagosalgado.com/code-project-virtual-tech-summit-on-mobile-development-on-demand/</guid>
		<description><![CDATA[Quem não assistiu ao Code Project’s Virtual Tech Summit on Mobile Development, pode agora ver todas as sessões “on demand”. As sessões são: The Mobile Development Landscape Android Push Notifications Beginning Android Flash Development Android for .NET/C# Developers Using MonoDroid iPhone 101: Introduction to iPhone and iOS Development Building Rich Mobile Apps with HTML5, CSS3]]></description>
			<content:encoded><![CDATA[<p>Quem não assistiu ao Code Project’s Virtual Tech Summit on Mobile Development, pode agora ver todas as sessões <em>“on demand”</em>.</p>
<p>As sessões são:</p>
<ul>
<li>The Mobile Development Landscape</li>
<li>Android Push Notifications</li>
<li>Beginning Android Flash Development</li>
<li>Android for .NET/C# Developers Using MonoDroid</li>
<li>iPhone 101: Introduction to iPhone and iOS Development</li>
<li>Building Rich Mobile Apps with HTML5, CSS3 and JavaScript</li>
<li>Building MVVM apps for Windows Phone 7</li>
<li>Using Panorama and Pivot Controls for WP7 apps</li>
<li>Building Data Visualization Applications for Windows Phone 7</li>
</ul>
<p>Para aceder às sessões, é necessário fazer o registo no seguinte link:</p>
<p><a href="http://www.virtualtechsummits.com/Register.aspx?EventID=11">http://www.virtualtechsummits.com/Register.aspx?EventID=11</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tiagosalgado.com/2011/03/12/code-project-virtual-tech-summit-on-mobile-development-on-demand/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilizar a API do bit.ly para gerar um url curto em C#</title>
		<link>http://blog.tiagosalgado.com/2010/04/24/utilizar-a-api-do-bit-ly-para-gerar-um-url-curto-em-c/</link>
		<comments>http://blog.tiagosalgado.com/2010/04/24/utilizar-a-api-do-bit-ly-para-gerar-um-url-curto-em-c/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 23:33:13 +0000</pubDate>
		<dc:creator>Tiago Salgado</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[dicas]]></category>

		<guid isPermaLink="false">http://blog.tiagosalgado.com/utilizar-a-api-do-bit-ly-para-gerar-um-url-curto-em-c/</guid>
		<description><![CDATA[Hoje andei a dar uma olhadela à API do serviço bit.ly. Para utilizarmos basta mesmo criar uma conta, e com a key que gera para utilizarmos a API rapidamente fazemos qualquer brincadeira. Segue um exemplo rápido de como gerar um link curto a partir da URL inserida. string username = "username"; string api = "your_api_key";]]></description>
			<content:encoded><![CDATA[<p>Hoje andei a dar uma olhadela à API do serviço bit.ly. Para utilizarmos basta mesmo criar uma conta, e com a key que gera para utilizarmos a API rapidamente fazemos qualquer brincadeira.</p>
<p>Segue um exemplo rápido de como gerar um link curto a partir da URL inserida.</p>
<p style="background-color: white;"><code style="font-size: 12px;"><span style="color: blue;">string </span><span style="color: black;">username </span><span style="color: blue;">= </span><span style="color: darkred;">"username"</span><span style="color: gray;">;<br />
</span><span style="color: blue;">string </span><span style="color: black;">api </span><span style="color: blue;">= </span><span style="color: darkred;">"your_api_key"</span><span style="color: gray;">;<br />
</span><span style="color: blue;">using </span><span style="color: gray;">(</span><span style="color: black;">WebClient w </span><span style="color: blue;">= new </span><span style="color: black;">WebClient</span><span style="color: gray;">())<br />
</span><span style="color: black;">{<br />
</span><span style="color: blue;">string </span><span style="color: black;">LongUrl </span><span style="color: blue;">= </span><span style="color: darkred;">"http://blog.tiagosalgado.com"</span><span style="color: gray;">;<br />
</span><span style="color: blue;">string </span><span style="color: black;">bitLyUrl </span><span style="color: blue;">=string</span><span style="color: black;">.Format</span><span style="color: gray;">(</span><span style="color: darkred;">"http://api.bit.ly/v3/shorten?login={0}&amp;apiKey={1}&amp;uri={2}&amp;format=txt"</span><span style="color: gray;">,</span><span style="color: black;">username</span><span style="color: gray;">,</span><span style="color: black;">api</span><span style="color: gray;">,</span><span style="color: black;">LongUrl</span><span style="color: gray;">);<br />
</span><span style="color: blue;">string </span><span style="color: black;">ShortUrl </span><span style="color: blue;">= </span><span style="color: black;">w.DownloadString</span><span style="color: gray;">(</span><span style="color: black;">bitLyUrl</span><span style="color: gray;">);<br />
</span><span style="color: black;">Console.Write</span><span style="color: gray;">(</span><span style="color: black;">ShortUrl</span><span style="color: gray;">);<br />
</span><span style="color: black;">Console.Read</span><span style="color: gray;">();<br />
</span><span style="color: black;">}</span></code></p>
<p>E temos algo como isto:</p>
<p><img src="http://img691.imageshack.us/img691/154/outputbitlyapp.png" alt="" width="677" height="342" /></p>
<p><a title="Download do Projecto" href="http://www.box.net/shared/pr65xpnjhe" target="_blank"><img src="http://e3.boxcdn.net/resources/a5y417x8pf/thumbs/27x30/application/zip.gif" border="0" alt="File icon" width="24" height="24" align="absMiddle" />bitLy_get_shorturl_csharp.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tiagosalgado.com/2010/04/24/utilizar-a-api-do-bit-ly-para-gerar-um-url-curto-em-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Livro ASP.NET 4.0</title>
		<link>http://blog.tiagosalgado.com/2010/04/22/livro-asp-net-4-0/</link>
		<comments>http://blog.tiagosalgado.com/2010/04/22/livro-asp-net-4-0/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 13:14:15 +0000</pubDate>
		<dc:creator>Tiago Salgado</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[livros]]></category>

		<guid isPermaLink="false">http://blog.tiagosalgado.com/?p=541</guid>
		<description><![CDATA[Já está disponivel para compra, o ultimo livro do Luis Abreu e João Paulo Carreiro. Os temas abordados são os seguintes: Arquitectura de aplicações ASP.NET, Formulários Web e Controlos ASP.NET; Controlos data source e Controlos data bound; Serviços, segurança e perfis de utilizadores; Manutenção de estado; Validação de dados e scripts no lado cliente; Configuração]]></description>
			<content:encoded><![CDATA[<p><img src="http://img706.imageshack.us/img706/63/63150947.jpg" alt="aspnet40" /><br />
Já está disponivel para compra, o ultimo livro do <a href="http://pontonetpt.com/blogs/luisabreu" target="_blank">Luis Abreu</a> e <a href="http://pontonetpt.com/blogs/jpc/default.aspx" target="_blank">João Paulo Carreiro</a>.</p>
<p>Os temas abordados são os seguintes:</p>
<ul>
<li>Arquitectura de aplicações ASP.NET, Formulários Web e Controlos ASP.NET;</li>
<li>Controlos data source e Controlos data bound;</li>
<li>Serviços, segurança e perfis de utilizadores;</li>
<li>Manutenção de estado;</li>
<li>Validação de dados e scripts no lado cliente;</li>
<li>Configuração de aplicações e tratamento de erros;</li>
<li>User controls, master pages, themes e skins;</li>
<li>Localização de aplicações;</li>
<li>Handlers e módulos;</li>
<li>ASP.NET AJAX no lado servidor;</li>
<li>A nova livraria ASP.NET AJAX no lado cliente;</li>
<li>Projectos e Aplicações, Construção de portais e Ciclo de vida de uma  página.</li>
</ul>
<p>Este livro pode ser encontrado na <a href="http://www.fca.pt/cgi-bin/fca_main.cgi/?isbn=978-972-722-653-5&amp;op=2" target="_blank">FCA</a>, <a href="http://www.wook.pt/ficha/asp-net-4-0/a/id/6673726" target="_blank">Wook</a>, etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tiagosalgado.com/2010/04/22/livro-asp-net-4-0/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>T-SQL: CSV para Linhas (UDF e XML)</title>
		<link>http://blog.tiagosalgado.com/2010/04/10/t-sql-csv-para-linhas-udf-e-xml/</link>
		<comments>http://blog.tiagosalgado.com/2010/04/10/t-sql-csv-para-linhas-udf-e-xml/#comments</comments>
		<pubDate>Sat, 10 Apr 2010 17:19:57 +0000</pubDate>
		<dc:creator>Tiago Salgado</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[sql server 2008]]></category>

		<guid isPermaLink="false">http://blog.tiagosalgado.com/t-sql-comma-separated-values-para-linhas-udf-e-xml/</guid>
		<description><![CDATA[Esta semana precisei de fazer exactamente o que o titulo do post indica, ou seja, retornar todas as linhas de uma tabela mas ao mesmo tempo separar os valores numa das colunas em cada linha. Para testar, criei a seguinte tabela: CREATE TABLE [dbo].[Agentes]( [Codigo] [varchar](50) NULL, [Nome] [varchar](50) NULL, [Emails] [varchar](100) NULL ) Inseri]]></description>
			<content:encoded><![CDATA[<p>Esta semana precisei de fazer exactamente o que o titulo do post indica, ou seja, retornar todas as linhas de uma tabela mas ao mesmo tempo separar os valores numa das colunas em cada linha.</p>
<p>Para testar, criei a seguinte tabela:</p>
<div class="csharpcode">
<pre class="alt"><span class="kwrd">CREATE</span> <span class="kwrd">TABLE</span> [dbo].[Agentes](</pre>
<pre>    [Codigo] [<span class="kwrd">varchar</span>](50) <span class="kwrd">NULL</span>,</pre>
<pre class="alt">    [Nome] [<span class="kwrd">varchar</span>](50) <span class="kwrd">NULL</span>,</pre>
<pre>    [Emails] [<span class="kwrd">varchar</span>](100) <span class="kwrd">NULL</span></pre>
<pre class="alt">) </pre>
</div>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
</p>
<p>Inseri alguns dados com o mesmo formato da tabela real que iria depois utilizar:</p>
<div class="csharpcode">
<pre class="alt">INSERT <span class="kwrd">INTO</span> Agentes </pre>
<pre><span class="kwrd">VALUES</span>(<span class="str">'C12345'</span>,<span class="str">'Agente 1'</span>,<span class="str">'agente1@xpto.pt;agente1.loja@xpto.pt'</span>)</pre>
<pre>INSERT <span class="kwrd">INTO</span> Agentes </pre>
<pre><span class="kwrd">VALUES</span>(<span class="str">'C12346'</span>,<span class="str">'Agente 2'</span>,<span class="str">'agente2@xpto.pt;agente2.loja@xpto.pt'</span>)</pre>
</div>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>Como já podem perceber, o campo “Emails” precisa de ser retornado com apenas um email, ou seja, preciso de passar uma listagem como esta</p>
<p><img src="http://img256.imageshack.us/img256/1892/select1.png" width="362" height="66" /></p>
<p>para uma como esta</p>
<p><img src="http://img256.imageshack.us/img256/3897/select2c.png" width="267" height="98" /></p>
<p>Para isso precisei de fazer uma função que me separasse cada um emails de forma a poder retornar um por cada linha.</p>
<div class="csharpcode">
<pre class="alt">

<span class="kwrd">CREATE</span> <span class="kwrd">FUNCTION</span> dbo.SplitEmails(@separador <span class="kwrd">char</span>(1), @emails <span class="kwrd">varchar</span>(512))
</pre>
<pre><span class="kwrd">RETURNS</span> <span class="kwrd">table</span></pre>
<pre class="alt"><span class="kwrd">AS</span></pre>
<pre><span class="kwrd">RETURN</span> (</pre>
<pre class="alt">    <span class="kwrd">WITH</span> Emails(pn, <span class="kwrd">start</span>, stop) <span class="kwrd">AS</span> (</pre>
<pre>      <span class="kwrd">SELECT</span> 1, 1, CHARINDEX(@separador, @emails)</pre>
<pre class="alt">      <span class="kwrd">UNION</span> <span class="kwrd">ALL</span></pre>
<pre>      <span class="kwrd">SELECT</span> pn + 1, stop + 1, CHARINDEX(@separador, @emails, </pre>
<pre>stop + 1)</pre>
<pre class="alt">      <span class="kwrd">FROM</span> Emails</pre>
<pre>      <span class="kwrd">WHERE</span> stop &gt; 0</pre>
<pre class="alt">    )</pre>
<pre>    <span class="kwrd">SELECT</span> <span class="kwrd">SUBSTRING</span>(@emails, <span class="kwrd">start</span>, <span class="kwrd">CASE</span> <span class="kwrd">WHEN</span> stop &gt; 0 <span class="kwrd">THEN</span> </pre>
<pre>stop-<span class="kwrd">start</span> <span class="kwrd">ELSE</span> 512 <span class="kwrd">END</span>) <span class="kwrd">AS</span> email</pre>
<pre class="alt">    <span class="kwrd">FROM</span> Emails</pre>
<pre>  )</pre>
</div>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>
  <br />Por fim, para ter a listagem com o formato pretendido, bastou fazer o CROSS APPLY com a minha tabela de agentes, e está o trabalho feito.</p>
<div class="csharpcode">
<pre class="alt"><span class="kwrd">SELECT</span> a.Codigo,a.Nome,c.email <span class="kwrd">FROM</span> Agentes a</pre>
<pre><span class="kwrd">CROSS</span> APPLY SplitEmails(<span class="str">';'</span>,a.Emails) c</pre>
</div>
<p><img src="http://img406.imageshack.us/img406/6914/select3.png" width="271" height="110" /></p>
<p>Outra forma de retornar esta listagem, indicada pelo <a href="http://twitter.com/CaioProiete" target="_blank">@Caio</a>, era recorrendo ao XML e evitava assim criar uma função para fazer o split dos emails.</p>
<div class="csharpcode">
<pre class="alt"><span class="kwrd">WITH</span> Consulta <span class="kwrd">AS</span></pre>
<pre>(</pre>
<pre class="alt"><span class="kwrd">SELECT</span> Codigo, Nome,</pre>
<pre><span class="kwrd">CAST</span>(<span class="str">'&lt;email&gt;'</span> + </pre>
<pre>REPLACE(Emails, <span class="str">';'</span>, <span class="str">'&lt;/email&gt;&lt;email&gt;'</span>) + </pre>
<pre><span class="str">'&lt;/email&gt;'</span> <span class="kwrd">AS</span> XML) </pre>
<pre><span class="kwrd">AS</span> EmailXml</pre>
<pre class="alt"><span class="kwrd">FROM</span> Agentes</pre>
<pre>)</pre>
<pre class="alt">&#160;</pre>
<pre><span class="kwrd">SELECT</span> Codigo, Nome,</pre>
<pre class="alt">    r.<span class="kwrd">value</span>(<span class="str">'.'</span>, <span class="str">'varchar(255)'</span>) <span class="kwrd">AS</span> Email</pre>
<pre><span class="kwrd">FROM</span></pre>
<pre class="alt">    Consulta</pre>
<pre><span class="kwrd">CROSS</span> APPLY</pre>
<pre class="alt">    consulta.EmailXml.nodes(<span class="str">'email'</span>) <span class="kwrd">AS</span> x(r)</pre>
</div>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
]]></content:encoded>
			<wfw:commentRss>http://blog.tiagosalgado.com/2010/04/10/t-sql-csv-para-linhas-udf-e-xml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2010 and .NET Framework 4 Training Course</title>
		<link>http://blog.tiagosalgado.com/2009/11/03/visual-studio-2010-and-net-framework-4-training-course/</link>
		<comments>http://blog.tiagosalgado.com/2009/11/03/visual-studio-2010-and-net-framework-4-training-course/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 13:56:52 +0000</pubDate>
		<dc:creator>Tiago Salgado</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[dotnet]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[visual studio]]></category>

		<guid isPermaLink="false">http://blog.tiagosalgado.com/?p=499</guid>
		<description><![CDATA[The Visual Studio 2010 and .NET Framework 4 Training Course includes videos and hands-on-labs designed to help you learn how to utilize the Visual Studio 2010 features and a variety of framework technologies including: C# 4.0, Visual Basic 10, F#, Parallel Computing Platform, WCF, WF, WPF, ASP.NET AJAX 4.0, ASP.NET MVC Dynamic Data. Units in]]></description>
			<content:encoded><![CDATA[<p><span id="ctl00_MainPlaceHolder_DescriptionLabel">The Visual Studio 2010 and .NET Framework 4 Training Course includes videos and hands-on-labs designed to help you learn how to utilize the Visual Studio 2010 features and a variety of framework technologies including: C# 4.0, Visual Basic 10, F#, Parallel Computing Platform, WCF, WF, WPF, ASP.NET AJAX 4.0, ASP.NET MVC Dynamic Data.</span></p>
<p><span>Units in this course:<br />
</span></p>
<ul>
<li>Overview</li>
<li>Managed Languages</li>
<li>ASP.NET 4</li>
<li>Data Platform</li>
<li>Windows Communication Foundation and Workflow</li>
<li>Parallel Computing</li>
<li>Application Lifecycle Management</li>
<li>Summary</li>
</ul>
<p><a href="http://channel9.msdn.com/learn/courses/VS2010/" target="_blank">Visual Studio 2010 and .NET Framework 4 Training Course</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tiagosalgado.com/2009/11/03/visual-studio-2010-and-net-framework-4-training-course/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ciclo de Seminários sobre desenvolvimento de software</title>
		<link>http://blog.tiagosalgado.com/2009/09/28/ciclo-de-seminarios-sobre-desenvolvimento-de-software/</link>
		<comments>http://blog.tiagosalgado.com/2009/09/28/ciclo-de-seminarios-sobre-desenvolvimento-de-software/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 12:54:08 +0000</pubDate>
		<dc:creator>Tiago Salgado</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://blog.tiagosalgado.com/?p=485</guid>
		<description><![CDATA[Vai-se realizar um ciclo de seminários pela FCT da Universidade de Coimbra, no ambito da parceria com a Universidade Carnegie Mellon, sobre desenvolvimento de software. Serão 4 seminários, realizados em Lisboa e no Porto, com o seguintes temas e datas: 10 de Outubro &#8211; Gestão de Risco em Projectos de Software 31 de Outubro &#8211;]]></description>
			<content:encoded><![CDATA[<p>Vai-se realizar um ciclo de seminários pela FCT da Universidade de Coimbra, no ambito da parceria com a Universidade Carnegie Mellon, sobre desenvolvimento de software.</p>
<p>Serão 4 seminários, realizados em Lisboa e no Porto, com o seguintes temas e datas:</p>
<ul>
<li>10 de Outubro &#8211; Gestão de Risco em Projectos de Software</li>
<li>31 de Outubro &#8211; Desenvolvimento Ágil de Software com SCRUM</li>
<li>21 de Novembro &#8211; Dinâmica de Equipas e Grupos</li>
<li>12 de Dezembro &#8211; Metodologias de Desenvolvimento de Software</li>
</ul>
<p>Cada seminário terá um valor de 25€ ou poderão fazer o registo para todos pelo valor de 70€.</p>
<p>Para mais informações visitem <a href="http://mse.dei.uc.pt/workshop/" target="_blank">http://mse.dei.uc.pt/workshop/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tiagosalgado.com/2009/09/28/ciclo-de-seminarios-sobre-desenvolvimento-de-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Free AJAX and Silverlight Automated Testing by Telerik</title>
		<link>http://blog.tiagosalgado.com/2009/09/17/free-ajax-and-silverlight-automated-testing-by-telerik/</link>
		<comments>http://blog.tiagosalgado.com/2009/09/17/free-ajax-and-silverlight-automated-testing-by-telerik/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 13:14:23 +0000</pubDate>
		<dc:creator>Tiago Salgado</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[dotnet]]></category>
		<category><![CDATA[silverlight]]></category>
		<category><![CDATA[unit test]]></category>

		<guid isPermaLink="false">http://blog.tiagosalgado.com/?p=465</guid>
		<description><![CDATA[WebAii Testing Framework helps developers build automated unit tests, functional tests and end to end scenario tests for both AJAX- and Silverlight-powered applications. From automating complex UI actions, waiting on DOM changes to imitating the complete list of UI XAML elements in Silverlight – it’s all in here for free! Website: WebAii Testing Framework]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.telerik.com/products/webaii-testing-framework.aspx" target="_blank">WebAii Testing Framework</a> helps developers build automated unit tests, functional tests and end to end scenario tests for both AJAX- and Silverlight-powered applications. From automating complex UI actions, waiting on DOM changes to imitating the complete list of UI XAML elements in Silverlight – it’s all in here for free!</p>
<p>Website: <a href="http://www.telerik.com/products/webaii-testing-framework.aspx" target="_blank">WebAii Testing Framework</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tiagosalgado.com/2009/09/17/free-ajax-and-silverlight-automated-testing-by-telerik/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ReMix 09 PT</title>
		<link>http://blog.tiagosalgado.com/2009/09/02/remix-09-pt/</link>
		<comments>http://blog.tiagosalgado.com/2009/09/02/remix-09-pt/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 13:05:16 +0000</pubDate>
		<dc:creator>Tiago Salgado</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[dotnet]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[Expression]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[silverlight]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[Windows Azure]]></category>
		<category><![CDATA[www]]></category>

		<guid isPermaLink="false">http://blog.tiagosalgado.com/?p=459</guid>
		<description><![CDATA[O ReMIX traz-lhe as tendência e a inovação Web: o futuro das tecnologias como o Silverlight, o Internet Explorer, Expression, ASP.NET e Windows Azure. Um dia completo, com três tracks, 13 sessões e os melhores Oradores. Terá ainda a oportunidade de partilhar as melhores práticas com a Comunidade Web. Inscreva-se Já! Número de lugares limitado.]]></description>
			<content:encoded><![CDATA[<p style="text-align:center;"><a href="http://www.microsoft.com/portugal/remix/index.aspx"><img class="aligncenter size-full wp-image-460" title="remix09_pt" src="http://oito.files.wordpress.com/2009/09/remix09_pt.png" alt="remix09_pt" width="889" height="321" /></a></p>
<blockquote>
<p style="text-align:left;"><em>O ReMIX traz-lhe as tendência e a inovação Web: o futuro das tecnologias como o  <strong>Silverlight</strong>, o <strong>Internet Explorer</strong>,  <strong>Expression</strong>, <strong>ASP.NET</strong> e <strong>Windows  Azure</strong>.</em></p>
<p style="text-align:left;"><em>Um dia completo, com três <em>tracks</em>, 13 sessões e os melhores <a href="/portugal/remix/speakers.aspx">Oradores</a>. Terá ainda a oportunidade de  partilhar as melhores práticas com a Comunidade Web.<br />
Inscreva-se Já! Número  de lugares limitado. 50€, com IVA incluído.</em> (tirado do site)</p></blockquote>
<p style="text-align:left;">
]]></content:encoded>
			<wfw:commentRss>http://blog.tiagosalgado.com/2009/09/02/remix-09-pt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

