<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8881625176226146931</id><updated>2012-01-17T21:03:21.141-03:00</updated><category term='Mi sitio'/><category term='Mail'/><category term='UpdateProgress'/><category term='MYME Types'/><category term='Mime Type mcml'/><category term='Project REAL'/><category term='Framework 3.5'/><category term='TIMER'/><category term='Microsoft'/><category term='SQL 2008'/><category term='SilverLight'/><category term='Autenticacion'/><category term='NET'/><category term='AJAX'/><category term='Framework 2.0'/><category term='SQL 2005'/><category term='Exam 70-301'/><category term='Triggers'/><category term='Windows Media Center'/><category term='Exam'/><category term='WMC'/><category term='Expression Blend 2.5'/><category term='ASP.NET'/><category term='VS2008'/><category term='WF'/><category term='Servidor'/><category term='Publish'/><category term='SEO'/><category term='Presentation Layer Web applications'/><category term='BI'/><category term='MSF'/><category term='Miguel'/><category term='WINDOWS WORKFLOW FUNDATION'/><category term='Error'/><category term='VS2005'/><category term='SSIS'/><category term='Ciacci'/><category term='Certificaciones'/><category term='.NET'/><category term='Framework 3.0'/><category term='Excel'/><title type='text'>.Net &amp; Business Intelligence Blog</title><subtitle type='html'>Blog acerca de SSIS, .Net y otras tecnologías Microsoft</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>30</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-2078313920186406894</id><published>2009-02-25T12:48:00.010-02:00</published><updated>2009-02-27T14:07:40.939-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Publish'/><category scheme='http://www.blogger.com/atom/ns#' term='Mime Type mcml'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Media Center'/><category scheme='http://www.blogger.com/atom/ns#' term='WMC'/><category scheme='http://www.blogger.com/atom/ns#' term='Presentation Layer Web applications'/><title type='text'>Publicación Sitio Web Windows Media Center (WMC)</title><content type='html'>Windows Media Center esta disponibles en los SO Windows Home Premiun y Ultimate.&lt;br /&gt;&lt;br /&gt;Los pasos a Seguir para la publicación de una aplicación &lt;b&gt;&lt;i&gt;Windows Media Center Presentation Layer Web applications&lt;/b&gt;&lt;/i&gt; en Windows Vista Ultimate son los siguientes:&lt;br /&gt;&lt;br /&gt;1. Crear en un nuevo Directorio Virtual en IIS, luego convertirlo a Application. El path debe ser el directorio físico que contiene los archivos mcml.&lt;br /&gt;&lt;br /&gt;2. Agregar un nuevo Mime Type ".mcml - text/xml" para el sitio como se muestra en la imagen siguiente.&lt;br /&gt;&lt;br /&gt; &lt;a href="http://1.bp.blogspot.com/_sXwGa2aCdwI/SaVdUhp3LuI/AAAAAAAACv8/00-yt6o48hw/s1600-h/Mime+Types.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 195px;" src="http://1.bp.blogspot.com/_sXwGa2aCdwI/SaVdUhp3LuI/AAAAAAAACv8/00-yt6o48hw/s320/Mime+Types.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5306750343138717410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. Ir a Menú Inicio - All Programs - Accesories y ejecutar como administrador el Command Prompt.&lt;br /&gt;&lt;br /&gt;4. Debemos contar con archivo DivInstall.cmd el que instalará en la GAC la dll del proyecto y registrará la aplicación en WMC. EL codigo del DivInstall.cmd deberá ser algo así como esto:&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color:silver;"&gt;&lt;br /&gt;@ECHO OFF&lt;br /&gt;ECHO.&lt;br /&gt;ECHO.Usage: DevInstall.cmd [/u][/debug]&lt;br /&gt;ECHO.&lt;br /&gt;ECHO.This script requires Administrative privileges to run properly.&lt;br /&gt;ECHO.Start &gt; All Programs &gt; Accessories&gt; Right-Click Command Prompt &gt; Select 'Run As Administrator'&lt;br /&gt;ECHO.&lt;br /&gt; &lt;br /&gt;set CompanyName=MyCompany&lt;br /&gt;set AssemblyName=MyMediaCenter&lt;br /&gt;set RegistrationName=Registration&lt;br /&gt;set ProgramImage=img_Application.png&lt;br /&gt; &lt;br /&gt;ECHO.Determine whether we are on an 32 or 64 bit machine&lt;br /&gt;if "%PROCESSOR_ARCHITECTURE%"=="x86" if "%PROCESSOR_ARCHITEW6432%"=="" goto x86&lt;br /&gt;set ProgramFilesPath=%ProgramFiles(x86)%&lt;br /&gt;ECHO.&lt;br /&gt; &lt;br /&gt;goto unregister&lt;br /&gt; &lt;br /&gt;:x86&lt;br /&gt;&lt;br /&gt;    ECHO.On an x86 machine&lt;br /&gt;    set ProgramFilesPath=%ProgramFiles%&lt;br /&gt;    ECHO.&lt;br /&gt;&lt;br /&gt;:unregister&lt;br /&gt;&lt;br /&gt;    ECHO.*** Unregistering and deleting assemblies ***&lt;br /&gt;    ECHO.&lt;br /&gt;&lt;br /&gt;    ECHO.Unregister and delete previously installed files (which may fail if nothing is registered)&lt;br /&gt;    ECHO.&lt;br /&gt;&lt;br /&gt;    ECHO.Unregister the application entry points&lt;br /&gt;    %windir%\ehome\RegisterMCEApp.exe /allusers "%ProgramFilesPath%\%CompanyName%\%AssemblyName%\%RegistrationName%.xml" /u&lt;br /&gt;    ECHO.&lt;br /&gt;&lt;br /&gt;    ECHO.Remove the DLL from the Global Assembly cache&lt;br /&gt;    "%ProgramFilesPath%\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /u "%AssemblyName%"&lt;br /&gt;    ECHO.&lt;br /&gt;&lt;br /&gt;    ECHO.Delete the folder containing the DLLs and supporting files (silent if successful)&lt;br /&gt;    rd /s /q "%ProgramFilesPath%\%CompanyName%\%AssemblyName%"&lt;br /&gt;    rd /s /q "%ProgramFilesPath%\%CompanyName%&lt;br /&gt;    ECHO.&lt;br /&gt;&lt;br /&gt;    REM Exit out if the /u uninstall argument is provided, leaving no trace of program files.&lt;br /&gt;    if "%1"=="/u" goto exit&lt;br /&gt;                &lt;br /&gt;:releasetype&lt;br /&gt; &lt;br /&gt;    if "%1"=="/debug" goto debug&lt;br /&gt;    set ReleaseType=Release&lt;br /&gt;    ECHO.&lt;br /&gt;    goto checkbin&lt;br /&gt;                &lt;br /&gt;:debug&lt;br /&gt;    set ReleaseType=Debug&lt;br /&gt;    ECHO.&lt;br /&gt;                &lt;br /&gt;:checkbin&lt;br /&gt; &lt;br /&gt;    if exist ".\bin\%ReleaseType%\%AssemblyName%.dll" goto register&lt;br /&gt;    ECHO.Cannot find %ReleaseType% binaries.&lt;br /&gt;    ECHO.Build solution as %ReleaseType% and run script again. &lt;br /&gt;    goto exit&lt;br /&gt;                &lt;br /&gt;:register&lt;br /&gt;&lt;br /&gt;    ECHO.*** Copying and registering assemblies ***&lt;br /&gt;    ECHO.&lt;br /&gt;&lt;br /&gt;    ECHO.Create the path for the binaries and supporting files (silent if successful)&lt;br /&gt;    md "%ProgramFilesPath%\%CompanyName%\%AssemblyName%"&lt;br /&gt;    ECHO.&lt;br /&gt;    &lt;br /&gt;    ECHO.Copy the binaries to program files&lt;br /&gt;    copy /y ".\bin\%ReleaseType%\%AssemblyName%.dll" "%ProgramFilesPath%\%CompanyName%\%AssemblyName%\"&lt;br /&gt;    ECHO.&lt;br /&gt;    &lt;br /&gt;    ECHO.Copy the registration XML to program files&lt;br /&gt;    copy /y ".\%RegistrationName%.xml" "%ProgramFilesPath%\%CompanyName%\%AssemblyName%\"&lt;br /&gt;    ECHO.&lt;br /&gt;    &lt;br /&gt;    ECHO.Copy the program image to program files&lt;br /&gt;    copy /y ".\Images\%ProgramImage%" "%ProgramFilesPath%\%CompanyName%\%AssemblyName%\"&lt;br /&gt;    ECHO.&lt;br /&gt;&lt;br /&gt;    ECHO.Register the DLL with the global assembly cache&lt;br /&gt;    "%ProgramFilesPath%\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /if "%ProgramFilesPath%\%CompanyName%\%AssemblyName%\%AssemblyName%.dll"&lt;br /&gt;    ECHO.&lt;br /&gt;&lt;br /&gt;    ECHO.Register the application with Windows Media Center&lt;br /&gt;    %windir%\ehome\RegisterMCEApp.exe /allusers "%ProgramFilesPath%\%CompanyName%\%AssemblyName%\%RegistrationName%.xml"&lt;br /&gt;    ECHO.&lt;br /&gt;&lt;br /&gt;:exit&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;5. En el command Prompt dirigirnos al path que contiene el archivo DivInstall.cmd (aplicando los comandos CD correspondientes para cambiar de directorio) y ejecutar el mencionado archivo escribiendo DivInstall.cmd.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-2078313920186406894?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/2078313920186406894/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=2078313920186406894' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/2078313920186406894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/2078313920186406894'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2009/02/publicacion-sitio-web-windows-media.html' title='Publicación Sitio Web Windows Media Center (WMC)'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_sXwGa2aCdwI/SaVdUhp3LuI/AAAAAAAACv8/00-yt6o48hw/s72-c/Mime+Types.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-253226282047109741</id><published>2008-12-18T10:45:00.012-02:00</published><updated>2009-03-05T10:50:02.306-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SilverLight'/><category scheme='http://www.blogger.com/atom/ns#' term='Ciacci'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Mi sitio'/><category scheme='http://www.blogger.com/atom/ns#' term='Miguel'/><title type='text'>www.miguelciacci.com.ar - Inauguración de mi Nuevo Site!</title><content type='html'>Buenos días a todos mis apreciados lectores! escribo este post para notificarles que en el día de ayer he puesto en producción mi nuevo &lt;a href="http://www.miguelciacci.com.ar" Target="_blank"&gt;Site&lt;/a&gt;. Está desarrollado en Silverlight 2.0 y ASP.Net, para ello he utilizado como herramientas Visual Studio 2008 y Expression Blend 2.0. Por ahora cuenta con 4 secciones principales pero con el tiempo se irán incrementando. Las Secciones son:&lt;br /&gt;&lt;br /&gt;a) &lt;u&gt;&lt;strong&gt;My CV&lt;/strong&gt;&lt;/u&gt; = desde donde pueden acceder a mi Curriculum Vitae, donde se detallan mis experiencias tanto académicas como laborales y profesionales.&lt;br /&gt;&lt;br /&gt;b) &lt;u&gt;&lt;strong&gt;My TECH Blog&lt;/strong&gt;&lt;/u&gt; = nos remite a mi &lt;a href="http://mciacci.blogspot.com" Target="_blank"&gt;blog técnico&lt;/a&gt;, en el cual se encuentran leyendo este post.&lt;br /&gt;&lt;br /&gt;c) &lt;u&gt;&lt;strong&gt;My Personal Pics&lt;/strong&gt;&lt;/u&gt; = nos redirecciona a mi &lt;a href="http://picasaweb.google.com/ciaccim" Target="_blank"&gt;album personal de fotos&lt;/a&gt;. Dudo que alguien esté interesado en verlas pero por si acaso... jeje&lt;br /&gt;&lt;br /&gt;d) &lt;u&gt;&lt;strong&gt;Contact me&lt;/strong&gt;&lt;/u&gt; = es una via de contacto de los visitantes hacia con mi persona. A través de un formulario simple pueden enviarme sus inquietudes, consultas, sugerencias, opiniones o lo que se les ocurra.&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_sXwGa2aCdwI/SUpMqu4TJqI/AAAAAAAACuw/VbagUYA1RFI/s1600-h/MiSite.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 190px;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/SUpMqu4TJqI/AAAAAAAACuw/VbagUYA1RFI/s320/MiSite.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5281117810067711650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;Importante:&lt;/strong&gt; para poder visualizar el sitio deben tener instalado en su PC el cliente Silverlight. Dicho cliente puede descargarse desde el sitio oficial de &lt;a href="http://www.microsoft.com/silverlight/" Target="_blank"&gt;Microsoft Silverlight&lt;/a&gt; haciendo click &lt;a href="http://www.microsoft.com/silverlight/resources/install.aspx" Target="_blank"&gt;aquí&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-253226282047109741?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/253226282047109741/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=253226282047109741' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/253226282047109741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/253226282047109741'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/12/wwwmiguelciaccicomar-inauguracin-de-mi.html' title='www.miguelciacci.com.ar - Inauguración de mi Nuevo Site!'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sXwGa2aCdwI/SUpMqu4TJqI/AAAAAAAACuw/VbagUYA1RFI/s72-c/MiSite.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-7138469495892878559</id><published>2008-12-17T12:13:00.007-02:00</published><updated>2008-12-17T12:30:42.359-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Servidor'/><category scheme='http://www.blogger.com/atom/ns#' term='NET'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2005'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Autenticacion'/><category scheme='http://www.blogger.com/atom/ns#' term='Mail'/><title type='text'>.Net - Enviar mail con servidor que requiere autenticación</title><content type='html'>A continuación les pongo el código necesario para poder enviar un mail desde .Net 2.0 o superior utilizando un servidor de correo que requiere &lt;b&gt;Autenticación&lt;/b&gt;. El código es:&lt;br /&gt;&lt;div style="background-color:silver;"&gt;&lt;br /&gt;MailMessage mail = new MailMessage();&lt;br /&gt;SmtpClient smtp = new SmtpClient("mail.midominio.com", 25);&lt;br /&gt;&lt;br /&gt;mail.From = new MailAddress("mail@midominio.com");&lt;br /&gt;mail.To.Add("destinatario@mail.com");&lt;br /&gt;mail.Subject = "Asunto";&lt;br /&gt;mail.Body = "Aquí se debe ingresar el mensaje...";&lt;br /&gt;mail.IsBodyHtml = true;&lt;br /&gt;smtp.EnableSsl = false;&lt;br /&gt;&lt;br /&gt;smtp.Credentials = new NetworkCredential("miUsuario","miClave");&lt;br /&gt;&lt;br /&gt;// Prioridad               &lt;br /&gt;mail.Priority = MailPriority.Normal; &lt;br /&gt;                &lt;br /&gt;//Esto es porque el Servidor requiere Autenticacion&lt;br /&gt;smtp.UseDefaultCredentials = false;                &lt;br /&gt;&lt;br /&gt;smtp.Send(mail);&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Se debe tener en cuenta que hay que incluir los namespaces &lt;strong&gt;System.Net&lt;/strong&gt; y &lt;strong&gt;System.Net.Mail&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Si desean saber más en detalle para que sirve cada linea descripta anteriormente, los invito a que lean el post de un colega (hagan click en el siguiente &lt;a href="http://marcelolauret.blogspot.com/2008/05/enviando-un-email-desde-aspnet.html"&gt;link&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Saludos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-7138469495892878559?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/7138469495892878559/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=7138469495892878559' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/7138469495892878559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/7138469495892878559'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/12/net-enviar-mail-con-servidor-que.html' title='.Net - Enviar mail con servidor que requiere autenticación'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-2560871267061268331</id><published>2008-12-17T11:05:00.005-02:00</published><updated>2008-12-17T11:17:08.652-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Error'/><category scheme='http://www.blogger.com/atom/ns#' term='SilverLight'/><category scheme='http://www.blogger.com/atom/ns#' term='MYME Types'/><category scheme='http://www.blogger.com/atom/ns#' term='Framework 3.5'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2008'/><title type='text'>Silverlight 2.0 - Error Could not download the silverlight application. Check web server settings</title><content type='html'>Es muy común que cuando subimos nuestra aplicación realizada en Silverlight 2.0 nos encontremos con el error &lt;b&gt;"Could not download the silverlight application. Check web server settings"&lt;/b&gt;. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_sXwGa2aCdwI/SUj53MdWKEI/AAAAAAAACuQ/YTBQ3Qq47Zc/s1600-h/Error+Silverlight.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 207px;" src="http://1.bp.blogspot.com/_sXwGa2aCdwI/SUj53MdWKEI/AAAAAAAACuQ/YTBQ3Qq47Zc/s320/Error+Silverlight.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5280745289724340290" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Esto se debe a que en el servidor faltan añadir algunos MYME Types. Debemos añadir los siguientes MYME Types para que nuestra aplicación funcione correctamente:&lt;br /&gt;&lt;br /&gt;.xap - application/x-silverlight-app&lt;br /&gt;.manifest - application/manifest&lt;br /&gt;.xaml - application/xaml+xml&lt;br /&gt;.dll - application/x-msdownload&lt;br /&gt;.application - application/x-ms-application&lt;br /&gt;.xbap - application/x-ms-xbap&lt;br /&gt;.deploy - application/octet-stream&lt;br /&gt;.xps - application/vnd.ms-xpsdocument&lt;br /&gt;&lt;br /&gt;Espero les sea de utilidad este post...&lt;br /&gt;&lt;br /&gt;Saludos&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-2560871267061268331?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/2560871267061268331/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=2560871267061268331' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/2560871267061268331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/2560871267061268331'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/12/silverlight-20-error-could-not-download.html' title='Silverlight 2.0 - Error Could not download the silverlight application. Check web server settings'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_sXwGa2aCdwI/SUj53MdWKEI/AAAAAAAACuQ/YTBQ3Qq47Zc/s72-c/Error+Silverlight.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-1478073393853343374</id><published>2008-12-12T10:25:00.007-02:00</published><updated>2008-12-12T10:37:28.114-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Framework 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Framework 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='UpdateProgress'/><title type='text'>ASP.NET AJAX - Control UpdateProgress</title><content type='html'>Continuando con los controles de AJAX para ASP.NET ahora toca hablarles del UpdateProgress. Este control permite mostrar por pantalla que existe un retraso al traer los datos desde el servidor. Este control crea un &lt;strong&gt;"DIV"&lt;/strong&gt; con todo su contenido dentro, el que permanece invisible hasta que el UpdatePanel hace un PostBack Asíncrono y espera la respuesta del servidor.&lt;br /&gt;&lt;br /&gt;El contenido que se muestra que puede ser un mensaje o cualquier contenido HTML debe colocarse en el tag  &lt;strong&gt;&lt;ProgressTemplate&gt;&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Se puede utilizar un UpdateProgress para toda la página o utilizar un UpdateProgress para cada UpdatePanel, en este caso debemos usar la propiedad &lt;strong&gt;AssociatedUpdatePanelID&lt;/strong&gt; para indicarle con cual UpdatePanel se relaciona.&lt;br /&gt;&lt;br /&gt;La propiedad &lt;strong&gt;DisplayAfter&lt;/strong&gt; permite establecer el tiempo mínimo a esperar antes de que sea mostrado el contenido, para evitar parpadeos en caso de ser muy rápida la respuesta del servidor. Por Default es de 500 ms.&lt;br /&gt;&lt;br /&gt;La propiedad &lt;strong&gt;DynamicLayout&lt;/strong&gt; permite reservar el espacio del UpdateProgress o no según sea True o False. Si es &lt;strong&gt;True&lt;/strong&gt; no reservará el espacio desplazando el resto del contenido de la página cuando se haga visible.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Ejemplo&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_sXwGa2aCdwI/SUJZhqlVwdI/AAAAAAAACuA/vgkLPHCXkQo/s1600-h/UpdateProgress.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 107px;" src="http://4.bp.blogspot.com/_sXwGa2aCdwI/SUJZhqlVwdI/AAAAAAAACuA/vgkLPHCXkQo/s320/UpdateProgress.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5278880148133102034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y en Code-behind tendremos:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_sXwGa2aCdwI/SUJZ4i1n5oI/AAAAAAAACuI/-0eIDY0vcAE/s1600-h/UpdateProgress2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 74px;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/SUJZ4i1n5oI/AAAAAAAACuI/-0eIDY0vcAE/s320/UpdateProgress2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5278880541190907522" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-1478073393853343374?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/1478073393853343374/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=1478073393853343374' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/1478073393853343374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/1478073393853343374'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/12/aspnet-ajax-control-updateprogress.html' title='ASP.NET AJAX - Control UpdateProgress'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_sXwGa2aCdwI/SUJZhqlVwdI/AAAAAAAACuA/vgkLPHCXkQo/s72-c/UpdateProgress.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-2445771370337731548</id><published>2008-12-12T10:09:00.005-02:00</published><updated>2008-12-12T10:22:56.318-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TIMER'/><category scheme='http://www.blogger.com/atom/ns#' term='Framework 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Framework 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>ASP.NET AJAX - Control Timer</title><content type='html'>Este control se utiliza para disparar periódicamente refrescos de página del lado del cliente. Requiere la presencia del &lt;a href="http://mciacci.blogspot.com/2008/11/aspnet-ajax-asynchronous-javascript-and.html" target="_blank"&gt;ScriptManager&lt;/a&gt; en la página que lo contiene.&lt;br /&gt;&lt;br /&gt;La propiedad &lt;strong&gt;Interval&lt;/strong&gt; es la que determina la periodicidad del refresco. Se pueden utilizar varios Timer en la misma página, pero si su interval es el mismo podemos utilizar uno solo añadiéndolo a la colección de &lt;a href="http://mciacci.blogspot.com/2008/11/aspnet-ajax-triggersdisparadores-del.html" target="_blank"&gt;Triggers&lt;/a&gt; de los diferentes UpdatePanel.&lt;br /&gt;&lt;br /&gt;El evento &lt;strong&gt;Tick&lt;/strong&gt; nos permite ejecutar código en el servidor en cada disparo del Timer. También podemos usar el Page_Load de la página que provoca el mismo efecto.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_sXwGa2aCdwI/SUJVvkR95DI/AAAAAAAACtw/-tzdtDEk8TI/s1600-h/Timer1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 73px;" src="http://4.bp.blogspot.com/_sXwGa2aCdwI/SUJVvkR95DI/AAAAAAAACtw/-tzdtDEk8TI/s320/Timer1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5278875988912890930" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En el Code-behind tendremos:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_sXwGa2aCdwI/SUJWXFka39I/AAAAAAAACt4/spF-V1TPwHI/s1600-h/Timer2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 63px;" src="http://3.bp.blogspot.com/_sXwGa2aCdwI/SUJWXFka39I/AAAAAAAACt4/spF-V1TPwHI/s320/Timer2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5278876667863556050" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-2445771370337731548?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/2445771370337731548/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=2445771370337731548' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/2445771370337731548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/2445771370337731548'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/12/aspnet-ajax-control-timer.html' title='ASP.NET AJAX - Control Timer'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_sXwGa2aCdwI/SUJVvkR95DI/AAAAAAAACtw/-tzdtDEk8TI/s72-c/Timer1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-3384476425604015288</id><published>2008-12-05T12:17:00.003-02:00</published><updated>2008-12-05T12:31:45.695-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Error'/><category scheme='http://www.blogger.com/atom/ns#' term='SilverLight'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Expression Blend 2.5'/><title type='text'>Error al crear Nuevo Proyecto en Expression Blend 2.5 June 2008 Preview</title><content type='html'>Buenas días a todos mis lectores, investigando sobre las nuevas tecnologías Microsoft, en este caso &lt;strong&gt;Expression Blend 2.5 June 2008 Preview &lt;/strong&gt;me he topado con un error bastante curioso. Al intentar generar un nuevo proyecto de Silverlight 2.0 surgía la famosa ventana de reporte de error.&lt;br /&gt;&lt;br /&gt;La Solución... investigando un poco por la web y luego de horas de aplicar la teoría de "prueba y error" pude hacer que este error desaparezca. &lt;br /&gt;Los pasos a seguir son:&lt;br /&gt;1. Desinstalar el Silverlight SDK desde Agregar o quitar Programas del Panel de Control.&lt;br /&gt;2. Desintalar Expression Blend 2.5 June 2008 Preview, también desde el Panel de Control.&lt;br /&gt;3. Reinstalar Expression Blend 2.5 June 2008 Preview.&lt;br /&gt;&lt;br /&gt;Luego de estas acciones pude trabajar con normalidad en Expression Blend. Espero que les sea de ayuda este post.&lt;br /&gt;&lt;br /&gt;Saludos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-3384476425604015288?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/3384476425604015288/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=3384476425604015288' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/3384476425604015288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/3384476425604015288'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/12/error-al-crear-nuevo-proyecto-en.html' title='Error al crear Nuevo Proyecto en Expression Blend 2.5 June 2008 Preview'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-5203840771498390808</id><published>2008-12-01T16:32:00.003-02:00</published><updated>2008-12-01T16:42:12.389-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Certificaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='MSF'/><category scheme='http://www.blogger.com/atom/ns#' term='Exam 70-301'/><title type='text'>Acreditando conocimientos... Administración, organización y entrega de proyectos de TI con Microsoft Solutions Framework 3.0</title><content type='html'>Cómo ya les había comentado en un post anterior, mi próxima meta a nivel de certificaciones era el &lt;b&gt;examen de Microsoft 70-301&lt;/b&gt; (Administración, organización y entrega de proyectos de TI con Microsoft Solutions Framework 3.0). Finalmente y luego de muchas horas de dedicación, esfuerzo y por que no... sacrificio, lo he conseguido. Tanto estudio valió la pena, ya cuento con mi 2da certificación de Microsoft (3ra si contamos Solution Selling) y voy por más. Pero eso será el año próximo. Quiero agradecer tanto a Raona como a mis familiares y amigos que supieron comprenderme y brindarme su apoyo en todo momento. A todos aquellos que estén deseosos de rendir este examen, pues adelante, ya verán que es duro pero no es imposible... jeje&lt;br /&gt;&lt;br /&gt;Saludos a todos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-5203840771498390808?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/5203840771498390808/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=5203840771498390808' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/5203840771498390808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/5203840771498390808'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/12/acreditando-conocimientos-administracin.html' title='Acreditando conocimientos... Administración, organización y entrega de proyectos de TI con Microsoft Solutions Framework 3.0'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-5739453287636943509</id><published>2008-11-18T11:55:00.001-02:00</published><updated>2008-11-18T12:01:27.541-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Triggers'/><title type='text'>ASP.NET AJAX - Triggers(Disparadores) del UpdatePanel</title><content type='html'>Por default los controles dentro de un UpdatePanel actúan como disparadores del mismo, mientras que los controles que están sobre la pagina ocasionan un PostBack de toda la pagina de forma síncrona.&lt;br /&gt;Se puede configurar un control externo al UpdatePanel para que ocasione el recargado asíncrono del panel. &lt;br /&gt;Por código:&lt;br /&gt;&lt;br /&gt; &lt;a href="http://2.bp.blogspot.com/_sXwGa2aCdwI/SSLKiflEdrI/AAAAAAAACsw/kV2sdNDTYXc/s1600-h/AJAX+Codigo.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 106px;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/SSLKiflEdrI/AAAAAAAACsw/kV2sdNDTYXc/s320/AJAX+Codigo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5269997207918245554" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Por vista Diseño:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_sXwGa2aCdwI/SSLKpkV9f0I/AAAAAAAACs4/nbYPu0zPMp0/s1600-h/AJAX+Diseno.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 283px; height: 320px;" src="http://4.bp.blogspot.com/_sXwGa2aCdwI/SSLKpkV9f0I/AAAAAAAACs4/nbYPu0zPMp0/s320/AJAX+Diseno.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5269997329456136002" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;Los Tipos de Triggers son:&lt;br /&gt;- PostBackTrigger: el control dentro del UpdatePanel provocará un PostBack completo de la página.&lt;br /&gt;- AsyncPostBackTrigger: se usa para indicar que el control tanto si se encuentra dentro o fuera del UpdatePanel debe ocasionar una recarga asíncrona del mismo.&lt;br /&gt;&lt;br /&gt;Por defecto la propiedad ChildrenAsTriggers es true permite que el control refresque asíncronamente el UpdatePanel. Si le ponemos el valor false deberemos usar el método Update() para provocar la carga asíncrona.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-5739453287636943509?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/5739453287636943509/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=5739453287636943509' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/5739453287636943509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/5739453287636943509'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/11/aspnet-ajax-triggersdisparadores-del.html' title='ASP.NET AJAX - Triggers(Disparadores) del UpdatePanel'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sXwGa2aCdwI/SSLKiflEdrI/AAAAAAAACsw/kV2sdNDTYXc/s72-c/AJAX+Codigo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-8830731884591626887</id><published>2008-11-11T16:10:00.003-02:00</published><updated>2008-11-11T16:18:36.127-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>ASP.NET AJAX (Asynchronous Javascript And Xml)</title><content type='html'>En este post quiero describir brevemente que es AJAX y cuales son su componentes esenciales. El objetivo de AJAX es conseguir que las páginas web respondan lo más rápidamente posible a las peticiones de los usuarios evitando recargar toda la página con información desde el servidor. Sus componentes principales en VS 2008 son:&lt;br /&gt;- &lt;B&gt;&lt;U&gt;ScriptManager:&lt;/B&gt;&lt;/U&gt; registra el script de la librería cliente de AJAX en la pagina permitiendo ejecutar del lado del cliente una serie de funciones y extensiones de Javascript tales como el pintado parcial de las paginas o llamadas a servicios web desde código cliente. &lt;br /&gt;Para gestionar los errores podemos usar:&lt;br /&gt;a) Gestionar el evento AsyncPostBackError del ScriptManager que se dispara al producirse un error durante el PostBack asíncrono.&lt;br /&gt;b) Poner texto en la propiedad AsyncPostBackErrorMessage que es el mensaje que se envía al navegador y se presenta en un alert.&lt;br /&gt;Para gestionar el tiempo de espera usar AsyncPostBackTimeOut en el que indicamos el tiempo tras el cual el ScriptManager mostrara el error de falta de respuesta del servidor.&lt;br /&gt;- &lt;B&gt;&lt;U&gt;UpdatePanel:&lt;/B&gt;&lt;/U&gt; permite que solo se refresquen los controles ubicados dentro suyo, sin necesidad de volver a cargar toda la página. Esto es posible gracias a la clase PageRequestManager que el ScriptManager incluye en el cliente.&lt;br /&gt;La propiedad UpdateMode indica las circunstancias bajo las que se actualiza, puede ser:&lt;br /&gt;UpdatePanelUpdateMode.Always el contenido del UpdatePanel se actualiza en todos los postbacks que ocurran en le pagina.&lt;br /&gt;UpdatePanelUpdateMode.Conditional el contenido del UpdatePanel solo se actualiza cuando se dispara un Trigger de ese panel o a través de un Update() o si cuando el Panel esta anidado dentro de otro y este se actualiza.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-8830731884591626887?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/8830731884591626887/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=8830731884591626887' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/8830731884591626887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/8830731884591626887'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/11/aspnet-ajax-asynchronous-javascript-and.html' title='ASP.NET AJAX (Asynchronous Javascript And Xml)'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-3804938132139211051</id><published>2008-10-28T08:01:00.001-02:00</published><updated>2008-10-28T08:42:45.273-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SilverLight'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2005'/><category scheme='http://www.blogger.com/atom/ns#' term='Framework 2.0'/><title type='text'>SilverLight version 1.0</title><content type='html'>Silverlight es una tecnologia multi-Navegador (IE, Firefox, etc.) y multi-Plataforma(Win, Linux, Mac, etc.) que permite el desarrollo de una nueva generación de interfaces de usuario potenciando el desarrollo de interfaces multimedia RIA (Rich Interactive Applications).&lt;br /&gt;XAML (Extensible Application Markup Lenguaje) es un lenguaje declarativo, derivado de XML cuya finalidad principal es la de permitir definir la interfaz visual.&lt;br /&gt;Silverlight es un complemento de navegador que representa XAML (al igual que el navegador representa xhtml o html) exponiendo su modelo de objeto de documentos (DOM) y su modelo de Eventos con lo cual podemos ejecutar código desde el lado cliente ahorrándonos la ida y procesamiento en el servidor. Se basa en la tecnología plug in por lo que se requiere la instalación de un pequeño componente para poder visualizar el contenido de Silverlight en nuestro navegador.&lt;br /&gt;XAML está basado en texto y así se descarga en el cliente por lo que no da problemas en buscadores, firewalls, muy útil si se desea utilizar SEO (Search Engine Optimization). XAML es fundamentalmente vectorial, por lo que permite desarrollar con muy poco esfuerzo aplicaciones “Pixel free” independientes de la resolución.&lt;br /&gt;&lt;br /&gt;Silverlight tiene herramientas orientadas al programador y al diseñador, estas son:&lt;br /&gt;- Silverlight v1.0: plug in disponible para Win, Linux y Mac.&lt;br /&gt;- VS2008: permite hacer desarrollos en Silverlight.&lt;br /&gt;- Expression Blend 2: permite diseñar espectaculares experiencias interactivas en XAML sin necesidad de escribir ni una línea.&lt;br /&gt;- Expression Encoder: permite codificar y mejorar ficheros de video para poder ser utilizados en silverlight.&lt;br /&gt;- Expression Desing: herramienta de diseño vectorial que permite crear diseños y elementos silverlight.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-3804938132139211051?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/3804938132139211051/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=3804938132139211051' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/3804938132139211051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/3804938132139211051'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/10/silverlight-version-10.html' title='SilverLight version 1.0'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-2540766524088554085</id><published>2008-10-16T09:28:00.006-03:00</published><updated>2008-10-16T09:45:05.475-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WINDOWS WORKFLOW FUNDATION'/><category scheme='http://www.blogger.com/atom/ns#' term='WF'/><title type='text'>WINDOWS WORKFLOW FUNDATION</title><content type='html'>En este post voy a explicar en que consiste y como se conforma Windows WorkFlow Fundation (WF). WF Sirve para desarrollar aplicaciones disponiendo de una forma natural de expresar la lógica del negocio. Permite expresar la lógica de una forma natural sin entrar en las complicaciones de los lenguajes con las que esté construida.&lt;br /&gt;La función principal de WF es facilitar la escritura de los procesos de negocio de forma declarativa, sin concentrándonos en el proceso que queremos implementar sin sacrificar la escalabilidad y robustez que ofrecen las nuevas tecnologías.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Arquitectura de WF&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;Todos los elementos del WF están basados en el principio de extensabilidad. Por este motivo es posible utilizarlo como “marco de trabajo” para incluirlo en otros productos de Microsoft ya existentes.&lt;br /&gt;En la siguiente figura podemos ver las piezas fundamentales de la arquitectura del WF.&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_sXwGa2aCdwI/SPc1hG3Xd7I/AAAAAAAACr0/6sLGhh0L0Mc/s1600-h/Arquitectura+WF.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_sXwGa2aCdwI/SPc1hG3Xd7I/AAAAAAAACr0/6sLGhh0L0Mc/s320/Arquitectura+WF.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5257729932873136050" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;a) &lt;b&gt;Capa Runtime&lt;/b&gt; = es el nucleo del WF y contiene la mayoria de los servicios críticos de WF. Estos servicios son:&lt;br /&gt;Servicio de Ejecución: es el encargado de organizar la ejecución de las actividades y de los comportamientos más comunes de estos últimos (como eventos, manejo de excepciones, tracking, etc.)&lt;br /&gt;Servicio de Scheduler: es uno de los servicios más importantes de WF. Se encarga de cómo se van a ejecutar los flujos de trabajo.&lt;br /&gt;Motor de Reglas: permite crear y administrar las reglas que se evaluaran el ejecutar el programa.&lt;br /&gt;b) &lt;b&gt;Workflow Model&lt;/b&gt; = es donde los desarrolladores utilizaran la mayor parte de su tiempo ya que incluye las principales APIs y modelos del WF. Existen 2 modelos con los que se puede trabajar en WF, estos son:&lt;br /&gt;Workflows Secuenciales: son los más utilizados debido a nuestra naturaleza de dividir las tareas en pasos.&lt;br /&gt;Máquinas de Estado: permite definir diferentes estados y las transiciones que permiten cambiar de un estado a otro los que se asocian a eventos.&lt;br /&gt;c) &lt;b&gt;Hosting&lt;/b&gt; = se encarga de dar soporte de ejecución de WF permitiendo establecer los servicios necesarios, además de facilitar las comunicaciones de los flujos de trabajo con componentes externos tales como librerías u otros procesos.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;&lt;i&gt;Actividades (Workflow Model)&lt;/i&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;Las actividades pueden dividirse en:&lt;br /&gt;- &lt;b&gt;Act. de Proceso&lt;/b&gt; (tareas sencillas – code, delay, secuence, parallel, etc - )&lt;br /&gt;- &lt;b&gt;Act. de Control&lt;/b&gt; (Condicionales – if, while, etc - )&lt;br /&gt;- &lt;b&gt;Control de Excepciones&lt;/b&gt;&lt;br /&gt;- &lt;b&gt;Act. de Modelado&lt;/b&gt; (provee la funcionalidad necesaria para que nuestro flujo de trabajo pueda comunicarse con el proceso que los Aloja – ExternalDataExchangeService -)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;&lt;i&gt;Servicios (Hosting)&lt;/i&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;- &lt;b&gt;Persistence (WorflowPersistenceService):&lt;/b&gt; permite que los flujos de trabajo sean durables en el tiempo a la espera de un determinado evento. WF proporciona una implementación de sqlWorkflowPersistenceService la que permite utilizar SQL Server como almacén de persistencia.&lt;br /&gt;- &lt;b&gt;Scheduler (WorkflowSchedulerService):&lt;/b&gt; permite configurar si deseamos que cada uno de nuestros flujos de trabajo se ejecuten en hilos separados o en el mismo hilo. Por defecto defaultWorkflowSchedulerService crea un nuevo hilo por cada instancia y con Manual WorkflowSchedulerService podemos establecer como lo deseamos.&lt;br /&gt;- &lt;b&gt;Tracking (WorkflowTrackingService):&lt;/b&gt; permite instrumentar un proceso de negocio y brinda un servicio de repositorio (BD) que poder explotar. Se basa en 2 elementos fundamentales: Tracking Profile: define un perfil de eventos que deben ser instrumentalizados (Ej: Act. o Flujos de trabajo) y Tracking Channel: es el repositorio (txt o BD) donde se depositan todas las trazas de información.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-2540766524088554085?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/2540766524088554085/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=2540766524088554085' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/2540766524088554085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/2540766524088554085'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/10/windows-workflow-fundation.html' title='WINDOWS WORKFLOW FUNDATION'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_sXwGa2aCdwI/SPc1hG3Xd7I/AAAAAAAACr0/6sLGhh0L0Mc/s72-c/Arquitectura+WF.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-4498762836653973063</id><published>2008-09-29T12:45:00.002-03:00</published><updated>2008-09-29T12:48:01.931-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSIS'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><title type='text'>SSIS – Asignación dinámica de path (Directory) a un Foreach</title><content type='html'>Buenas, es posible configurar dinámicamente el path (Directory) de un componente For Each. De este modo nuestros procesos pueden recorrer diferentes directorios configurados dinámicamente con solo modificar el fichero de configuración utilizado como “Package Configuration”.&lt;br /&gt;Si ya contamos con un fichero de package configuration debemos editarlo, caso contrario, crearemos uno para poder anexar la funcionalidad que pretendemos (Si tienes dudas de cómo crear y/o editar ficheros de configuración puedes leer mis posts anteriores donde se explica claramente).&lt;br /&gt;Una vez abierto el fichero de configuración en el paso donde debemos seleccionar las propiedades a exportar, debemos buscar el componente Foreach Loop Container dentro del Package y tildar el check “Directory” y dar Next y finalizar en todos los restantes pasos del asistente.&lt;br /&gt;&lt;br /&gt; &lt;a href="http://4.bp.blogspot.com/_sXwGa2aCdwI/SOD4f-9y4rI/AAAAAAAACpo/eNam_tdG-GA/s1600-h/Package+Config2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sXwGa2aCdwI/SOD4f-9y4rI/AAAAAAAACpo/eNam_tdG-GA/s320/Package+Config2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5251470393875817138" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Luego abrimos manualmente el fichero de configuración en el path que se encuentre y allí entre los tags &lt;ConfiguredValue&gt;&lt;/ConfiguredValue&gt; del Directory debemos poner el path donde se encontrarán los ficheros que deseamos que recorra el Foreach&lt;br /&gt;&lt;br /&gt; &lt;a href="http://1.bp.blogspot.com/_sXwGa2aCdwI/SOD4ordAydI/AAAAAAAACpw/Yk0-h130xnA/s1600-h/Package+Config3.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_sXwGa2aCdwI/SOD4ordAydI/AAAAAAAACpw/Yk0-h130xnA/s320/Package+Config3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5251470543256865234" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Espero les hay sido de utilidad este nuevo post, saludos a todos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-4498762836653973063?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/4498762836653973063/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=4498762836653973063' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/4498762836653973063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/4498762836653973063'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/09/ssis-asignacin-dinmica-de-path.html' title='SSIS – Asignación dinámica de path (Directory) a un Foreach'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_sXwGa2aCdwI/SOD4f-9y4rI/AAAAAAAACpo/eNam_tdG-GA/s72-c/Package+Config2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-2145848319909531416</id><published>2008-09-12T11:49:00.003-03:00</published><updated>2009-03-18T09:39:56.763-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSIS'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><title type='text'>SSIS – Asignación dinámica de nombres a ficheros de destino de Excel</title><content type='html'>Buenos días a todos, en este post voy a explicitar las acciones requeridas para asignar dinámicamente los nombres a los ficheros de destino de Excel (ficheros XLS). Este caso es típico cuando se pretende hacer una exportación diaria de información por ejemplo. Los pasos a seguir son:&lt;br /&gt;1. Crear una variable a nivel de Package de tipo String, la cual va a contener el nombre del fichero de destino.&lt;br /&gt;2. Contar con un Script component en el Data Flow, en el que debemos armar el nombre del fichero concatenando fechas u otras cadenas según sea el nombre que deseamos formar, y posteriormente asignarle dicho nombre a la variable que creamos en el punto 1. (Para ver cómo trabajar con variables en un Script haga click aqui)&lt;br /&gt;3. En la Excel Connection de destino debemos dirigirnos a sus propiedades, Expressions y a la propiedad ConnectionString asignarle la variable creada en el punto 1.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Si son tus primeros pasos en SSIS seguramente no comprenderán demasiado como armar todo el package, si eso sucede les recomiendo que lean los primeros posts en donde explico más detalladamente este tema.&lt;br /&gt;Espero les sirva mi post, y como siempre espero sus comentarios… Saludos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-2145848319909531416?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/2145848319909531416/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=2145848319909531416' title='7 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/2145848319909531416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/2145848319909531416'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/09/ssis-asignacin-dinmica-de-nombres.html' title='SSIS – Asignación dinámica de nombres a ficheros de destino de Excel'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-3813620636870020945</id><published>2008-08-25T10:40:00.005-03:00</published><updated>2008-08-25T11:14:45.571-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>SQL Server 2008 - Paquete Esencial</title><content type='html'>Recientemente Microsoft ha elaborado paquete esencial de tan sólo 40Mb de descarga sobre SQL Server 2008.&lt;br /&gt;La descarga está en inglés y está compuesto por videos, postcast, Case Study, white Papers y otras documentaciones sumamente útiles para los profesionales.&lt;br /&gt;Este paquete es muy interesante porque permite tener una primera impresión bastante acabada de la última versión del Motor de Base de Datos de Microsoft, pero de ninguna manera representa un recurso formativo para aquellos que lo descarguen.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_sXwGa2aCdwI/SLK8HUO56HI/AAAAAAAACnk/dioxs9OTtcU/s1600-h/logo_sql2008.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sXwGa2aCdwI/SLK8HUO56HI/AAAAAAAACnk/dioxs9OTtcU/s320/logo_sql2008.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5238456150461638770" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Para descargar el SQL Server 2008 Essential BackPack haga click en el siguiente &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c9b4ce0b-d46a-4143-b1ca-32e190caa463&amp;DisplayLang=en"&gt;LINK&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-3813620636870020945?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/3813620636870020945/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=3813620636870020945' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/3813620636870020945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/3813620636870020945'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/08/sql-server-2008-paquete-esencial.html' title='SQL Server 2008 - Paquete Esencial'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_sXwGa2aCdwI/SLK8HUO56HI/AAAAAAAACnk/dioxs9OTtcU/s72-c/logo_sql2008.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-4030495787075522993</id><published>2008-08-12T05:38:00.007-03:00</published><updated>2008-08-12T07:25:34.648-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Certificaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Framework 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Exam'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Hacia un nivel de excelencia superior - Certificaciones Microsoft</title><content type='html'>Las exigencias a la que nos encontramos sometidos los profesionales en lo que va de este siglo es cada vez mayor, es por ello que no sólo debemos poseer los conocimientos, sino también, cumplir ciertos estándares que el mercado mundial cada vez más globalizado exige. Es por ello que los pasados 17 y 25 de julio de 2008 desde la ciudad de Barcelona, España, he alcanzado mis primeras certificaciones internacionales. Se trata de las certificaciones &lt;strong&gt;Microsoft Solution Selling&lt;/strong&gt; y de &lt;strong&gt;Microsoft® .NET Framework 2.0—Application Development Foundation&lt;/strong&gt;(Exam 70-536). Superar estos examenes no fue nada fácil, pero cuando la empresa en la que trabajas cuenta con una filosofía de mejora continua de sus Ingenieros, donde la calidad profesional y humana es igualmente valorada, y además te brindan todos los medios y su total apoyo se hace mucho más fácil salir adelante. Por ello deseo agradecer a Raona por apoyarme en mi desarrollo profesional y decir que estas certificaciones son sólo el comienzo en mi carrera profesional. La siguiente certificación que intentaré alcanzar será la 70-301 - &lt;strong&gt;Managing, Organizing, and Delivering IT Projects by Using Microsoft Solutions Framework 3.0&lt;/strong&gt;. Pero esa es otra historia... ya tendrán novedades al respecto. Hasta mi próximo post, saludos a todos!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-4030495787075522993?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/4030495787075522993/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=4030495787075522993' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/4030495787075522993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/4030495787075522993'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/08/hacia-un-nivel-de-excelencia-superior.html' title='Hacia un nivel de excelencia superior - Certificaciones Microsoft'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-3196449530963722568</id><published>2008-07-17T09:24:00.001-03:00</published><updated>2008-07-17T09:29:16.585-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSIS'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><title type='text'>SSIS – Usar Data Viewers</title><content type='html'>Hola a todos… he regresado con un post “sumamente interesante”… Voy a mostrarles como usar Data Viewers en los flujos de datos. Seguramente se preguntarán para que nos sirven los Data Viewers…  nos sirven principalmente para poder observar que datos se están pasando de un componente a otro a través de un flujo de datos y de esta manera poder llevar a cabo un seguimiento más preciso de nuestro proceso.&lt;br /&gt;Veamos cómo se agregan y utilizan los Data Viewers…&lt;br /&gt;Utilizando el mismo ejercicio que expliqué con anterioridad (http://mciacci.blogspot.com/2008/04/ssis-uso-de-condicionales-en.html ) o cualquier otro ejercicio que tengo al menos 2 componentes, debemos hacer lo siguiente:&lt;br /&gt;1. Click derecho sobre la flecha verde que une los componentes, y seleccionamos le opción Edit…&lt;br /&gt;&lt;br /&gt;2. Hacemos click en lo opción Data Viewers de la ventana Data Flow Path Editor y posteriormente en el botón Add… de la parte inferior.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_sXwGa2aCdwI/SH86ZCpGWqI/AAAAAAAACDA/PYcWpJMrsUY/s1600-h/Data+Viewers1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_sXwGa2aCdwI/SH86ZCpGWqI/AAAAAAAACDA/PYcWpJMrsUY/s320/Data+Viewers1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5223958294653459106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. En la ventana Configure Data Viewer dejamos seleccionado Grid como está por defecto y damos Ok.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_sXwGa2aCdwI/SH86etE7sQI/AAAAAAAACDI/_SFxdzr83vU/s1600-h/Data+Viewers2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_sXwGa2aCdwI/SH86etE7sQI/AAAAAAAACDI/_SFxdzr83vU/s320/Data+Viewers2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5223958391943835906" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;4. Damos click en  Ok de la ventana Data Flow Path Editor&lt;br /&gt; &lt;br /&gt;&lt;a href="http://bp1.blogger.com/_sXwGa2aCdwI/SH86lLNwyFI/AAAAAAAACDQ/oKC9m1k-q-o/s1600-h/Data+Viewers3.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_sXwGa2aCdwI/SH86lLNwyFI/AAAAAAAACDQ/oKC9m1k-q-o/s320/Data+Viewers3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5223958503113148498" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5. Veremos cómo se agrega un icono de una grilla al costado de la flecha verde, lo que indica que el Data Viewer ha sido agregado.&lt;br /&gt; &lt;br /&gt;&lt;a href="http://bp1.blogger.com/_sXwGa2aCdwI/SH86rZ23-wI/AAAAAAAACDY/8BZ4C_UynDQ/s1600-h/Data+Viewers4.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_sXwGa2aCdwI/SH86rZ23-wI/AAAAAAAACDY/8BZ4C_UynDQ/s320/Data+Viewers4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5223958610122898178" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6. Al ejecutar el proceso veremos que se abre una grilla con los datos que están circulando de un componente a otro. Esto nos servirá para analizar los datos en busca de errores. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_sXwGa2aCdwI/SH86_i8WJPI/AAAAAAAACDg/MY87seNtldI/s1600-h/Data+Viewers5.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_sXwGa2aCdwI/SH86_i8WJPI/AAAAAAAACDg/MY87seNtldI/s320/Data+Viewers5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5223958956159149298" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Espero les haya servido de ayuda y ante cualquier duda escriban sus comentario&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-3196449530963722568?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/3196449530963722568/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=3196449530963722568' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/3196449530963722568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/3196449530963722568'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/07/ssis-usar-data-viewers.html' title='SSIS – Usar Data Viewers'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_sXwGa2aCdwI/SH86ZCpGWqI/AAAAAAAACDA/PYcWpJMrsUY/s72-c/Data+Viewers1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-8530962668028356852</id><published>2008-07-10T08:33:00.004-03:00</published><updated>2008-07-10T08:43:12.517-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSIS'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><title type='text'>SSIS – Unpivot con un Script</title><content type='html'>Muchas veces necesitamos invertir la posición de algunas filas y columnas de entrada para guardarlas en destino. Aclararé un poco más este asunto con un ejemplo, supongamos que tenemos los datos con la siguiente estructura:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_sXwGa2aCdwI/SHX1SlE0_iI/AAAAAAAACCw/vMkhwR05qoI/s1600-h/tabla1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_sXwGa2aCdwI/SHX1SlE0_iI/AAAAAAAACCw/vMkhwR05qoI/s320/tabla1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5221349042544770594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Supongamos que por algún motivo necesitamos que esa estructura cambie y adopte la siguiente:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_sXwGa2aCdwI/SHX1ZIA6zjI/AAAAAAAACC4/7jNBuB1Tf0I/s1600-h/tabla2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_sXwGa2aCdwI/SHX1ZIA6zjI/AAAAAAAACC4/7jNBuB1Tf0I/s320/tabla2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5221349155002830386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lo que hemos hecho en la segunda tabla es crear una fila (Row) por cada columna de la primer tabla (excepto la columna ID), entonces por ejemplo, para la primer fila de la primer tabla tenemos 3 filas en la segunda tabla, una para cada columna. Las columnas de la segunda tabla representan lo siguiente:&lt;br /&gt;ID: Código de Cliente, equivalente a la columna ID de la primera tabla.&lt;br /&gt;Columna: indica el número de columna del dato puesto en la columna “Valor” en la primera tabla.&lt;br /&gt;Valor: indica el valor de una determinada columna en la primera tabla.&lt;br /&gt;&lt;br /&gt;Ahora…. Como podemos hacer esto en una package de SSIS???&lt;br /&gt;Lo que debemos hacer es agregar en el Data Flow un componente Script de tipo Transformación, posteriormente vincularlo con el componente que le proporcione los datos de entrada y crear los Outputs que necesitamos de salida. Para comprender mejor el asunto, voy a aclarar que lo los Inputs que necesitamos son los campos listados en la primera tabla, mientras que los Outputs son los correspondientes a la segunda tabla. Posteriormente colocaremos el siguiente código dentro del Script:&lt;br /&gt;&lt;br /&gt;'Fila para la Columna 1 = Columna Cliente&lt;br /&gt;With Output0Buffer&lt;br /&gt;.AddRow()&lt;br /&gt;'ID es el OUTPUT para el Campo ID y Row.ID es el Input   &lt;br /&gt;.ID = Row.ID&lt;br /&gt;      .COLUMNA = 1&lt;br /&gt;      .VALOR = Row.Cliente            &lt;br /&gt;End With&lt;br /&gt;'Fila para la Columna 2 = Columna Categoria&lt;br /&gt;With Output0Buffer&lt;br /&gt;.AddRow()&lt;br /&gt;'ID es el OUTPUT para el Campo ID y Row.ID es el Input   &lt;br /&gt;.ID = Row.ID&lt;br /&gt;      .COLUMNA = 2&lt;br /&gt;      .VALOR = Row.Categoria            &lt;br /&gt;End With&lt;br /&gt;'Fila para la Columna 3 = Columna Deuda&lt;br /&gt;With Output0Buffer&lt;br /&gt;.AddRow()&lt;br /&gt;'ID es el OUTPUT para el Campo ID y Row.ID es el Input   &lt;br /&gt;.ID = Row.ID&lt;br /&gt;      .COLUMNA = 3&lt;br /&gt;      .VALOR = Row.Deuda            &lt;br /&gt;End With&lt;br /&gt;&lt;br /&gt;Damos Ok en el script y lo unimos al destino que corresponda para que se produzca la importaci[on de los datos al destino deseado.&lt;br /&gt;Eso es todo, es más simple de lo que parece… y ya saben, si tienen dudas solo escriban comentarios. Ciao!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-8530962668028356852?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/8530962668028356852/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=8530962668028356852' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/8530962668028356852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/8530962668028356852'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/07/ssis-unpivot-con-un-script.html' title='SSIS – Unpivot con un Script'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_sXwGa2aCdwI/SHX1SlE0_iI/AAAAAAAACCw/vMkhwR05qoI/s72-c/tabla1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-3909749380690960164</id><published>2008-06-02T11:49:00.002-03:00</published><updated>2008-06-02T11:56:17.494-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSIS'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><title type='text'>SSIS –Deploying Soluciones</title><content type='html'>Una vez concluidos y testeados los procesos y demás componentes de una solución,  seguramente se necesitará redistribuirlos en otros servidores. Para ello podremos realizar el Deploy de la solución a través del Deploy Utility del SQL Server Business Intelligence Development Studio. Los pasos a seguir son los siguientes:&lt;br /&gt;1. Click botón derecho sobre la Solución, escoger Propiedades.&lt;br /&gt;2. Debemos situarnos en Deployment Utility, y setear la propiedad CreateDeploymentUtility en True. También podemos cambiar el destino de ficheros resultantes modificando la propiedad DeploymentOutputPath.&lt;br /&gt; &lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_sXwGa2aCdwI/SEQJet08bOI/AAAAAAAAA8I/XeObu9UzDC4/s1600-h/Properties+windows.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_sXwGa2aCdwI/SEQJet08bOI/AAAAAAAAA8I/XeObu9UzDC4/s320/Properties+windows.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5207297492449520866" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. Damos OK.&lt;br /&gt;4. Hacemos click derecho sobre la Solución nuevamente, y escogemos la opción Build. Se compilará la Solución y en caso de no existir errores se deberán crear los ficheros de Deploy en el path especificado en la propiedad DeploymentOutputPathantes mencionada.&lt;br /&gt; &lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_sXwGa2aCdwI/SEQJnt08bPI/AAAAAAAAA8Q/Y3_gios_vw4/s1600-h/Build.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_sXwGa2aCdwI/SEQJnt08bPI/AAAAAAAAA8Q/Y3_gios_vw4/s320/Build.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5207297647068343538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5. Si el proceso de Deploy fue exitoso deberá existir en el directorio de Output un fichero con extensión SSISDeploymentManifest. Ejecutando ese Fichero nos aparecerá un asistente para la instalación de los diferentes paquetes, ficheros de configuración y demás componentes de la Solución.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-3909749380690960164?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/3909749380690960164/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=3909749380690960164' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/3909749380690960164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/3909749380690960164'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/06/ssis-deploying-soluciones.html' title='SSIS –Deploying Soluciones'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_sXwGa2aCdwI/SEQJet08bOI/AAAAAAAAA8I/XeObu9UzDC4/s72-c/Properties+windows.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-8547740448656276405</id><published>2008-06-02T04:32:00.002-03:00</published><updated>2008-06-02T07:21:45.221-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSIS'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><title type='text'>SSIS – Error en Deploy con Ficheros de Configuración Compartidos</title><content type='html'>Hace unas semanas, cuando intentaba hacer el deploy de mi solución para redistribuirla me surgió un error muy curioso. El mismo se produce al intentar hacer el deploy de una solución en la que 2 o más packages comparten un mismo fichero de configuración.&lt;br /&gt;Si no conocen que es un fichero de configuración, brevemente les puedo decir que son ficheros por lo general en formato XML que sirven para poder insertar o setear las diferentes propiedades de objetos dentro del Package, por ejemplo se puede definir la ConnectionString de una conexión a BD, el valor de una Variable, entre otros.&lt;br /&gt;El mensaje de error es el siguiente:&lt;br /&gt;&lt;br /&gt;&lt;B&gt;&lt;I&gt;System.ApplicationException: Could not copy file "C:\...\xxx.dtsConfig" to the deployment utility output directory "C:\...\xxx\bin\Deployment". ---&gt; System.IO.IOException: The file 'C:\...\...\xxx.dtsConfig' already exists.     at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)     at System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite)     at Microsoft.DataTransformationServices.Project.DataTransformationsProjectBuilder.CopyFiles(ICollection fileNames, String outputPath)     --- End of inner exception stack trace ---     at Microsoft.DataTransformationServices.Project.DataTransformationsProjectBuilder.CopyFiles(ICollection fileNames, String outputPath)     at Microsoft.DataTransformationServices.Project.DataTransformationsProjectBuilder.CreateDeploymentUtility(IOutputWindow outputWindow) &lt;/B&gt;&lt;/I&gt;&lt;br /&gt;&lt;br /&gt;Investigando en diferentes sitios, libros y materiales pude encontrar una solución “manual” (sí, escucharon bien!!). Dicha solución consiste en crear un archivo de texto, renombrarlo con la extensión .SSISDeploymentManifest e insertar código con estructura XML que enumere todos los packages, ficheros de configuración y demás elementos a redistribuir. Por ejemplo:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_sXwGa2aCdwI/SEPI_d08bNI/AAAAAAAAA64/WLUAgXWGRXQ/s1600-h/XMLCode.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sXwGa2aCdwI/SEPI_d08bNI/AAAAAAAAA64/WLUAgXWGRXQ/s320/XMLCode.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5207226586834431186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Al ejecutar éste archivo, aparecerá el asistente de instalación como normalmente debería suceder.&lt;br /&gt;He leído por algunos foros que el SP2 ya soluciona este bug, aún no he podido comprobarlo, pero ni bien lo haga lo agregaré a mi Blog. &lt;br /&gt;Espero haber sido de ayuda, saludos… nos vemos en la próxima publicación.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-8547740448656276405?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/8547740448656276405/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=8547740448656276405' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/8547740448656276405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/8547740448656276405'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/06/ssis-error-en-deploy-con-ficheros-de.html' title='SSIS – Error en Deploy con Ficheros de Configuración Compartidos'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_sXwGa2aCdwI/SEPI_d08bNI/AAAAAAAAA64/WLUAgXWGRXQ/s72-c/XMLCode.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-309975830447772692</id><published>2008-05-12T15:04:00.007-03:00</published><updated>2008-05-12T15:22:51.791-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Framework 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2008'/><title type='text'>Novedades VS 2008 – LINQ</title><content type='html'>El presente post está dedicado a mostrarles una de las novedades más importantes a mi criterio que presenta el nuevo Visual Studio 2008. Estoy hablando de Lenguaje Integrado de Consultas o Consultas integradas en los lenguajes, más conocida como LINQ (Language Integrated Query).&lt;br /&gt;Esta nueva funcionalidad permite mayores facilidades de consulta y procesamiento de a todo tipo de fuentes de datos y no sólo a BD relacionales y XML.&lt;br /&gt;LINQ  permite que las expresiones de consulta se beneficien de los metadatos ricos, verificación de sintaxis en tiempo de compilación, tipado estático y ayuda IntelliSense que antes estaban disponibles solo para el código imperativo.&lt;br /&gt;LINQ en los lenguajes .NET define un conjunto de operadores de consulta estándar de propósito general que hacen posible que las operaciones de recorrido, filtro y proyección sean expresadas de una manera directa pero declarativa en cualquier lenguaje de programación. Los operadores de consulta estándar permiten aplicar las consultas a cualquier fuente de información basada en IEnumerable&lt;T&gt;.&lt;br /&gt;&lt;br /&gt;Para ver algunos ejemplos simples que muestre el potencial de esta nueva funcionalidad se puede mencionar que hasta ahora para buscar algo dentro de un List genérico o un Array List debíamos hacer un IndexOf, sacar en un int el índice y leer esa posición. Ahora haciendo un simple select podemos sacarnos n filas que cumplan n condiciones. Lo propio sucede con datos XML, para sacar algo de un XML debíamos leer todo el documento e ir comparando, pero ya no. Lanzamos contra él una consulta LINQ y listo, ya tenemos lo que queríamos.&lt;br /&gt;&lt;br /&gt;En el siguiente ejemplo veremos cómo utilizar LINQ para obtener determinados datos desde un array en una aplicación de consola.&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Query;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;&lt;br /&gt;class linq_app {&lt;br /&gt;  static void Main() {&lt;br /&gt;    string[] nombres = { "Carlos", "Pedro", "Juan", "María", "Esteban", "Jorge",                       "David" };&lt;br /&gt;  IEnumerable&lt;string&gt; expr = from s in nombres&lt;br /&gt;                               where s.Length == 5&lt;br /&gt;                               orderby s&lt;br /&gt;                               select s.ToUpper();&lt;br /&gt;&lt;br /&gt;    foreach (string item in expr)&lt;br /&gt;      Console.WriteLine(item);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Al ejecutar este código obtendremos el siguiente resultado:&lt;br /&gt;&lt;b&gt;&lt;i&gt;David&lt;br /&gt;Jorge&lt;br /&gt;María&lt;br /&gt;Pedro&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Si ud. está familiarizado con las sentencias SQL, podrá notar la gran similitud entre una consulta en este lenguaje y el código anterior. A continuación explicaré cada una de las partes de la consulta.&lt;br /&gt;&lt;br /&gt;From : variable que accederá a las campos del array en éste caso.&lt;br /&gt;In : lista o array a utilizar como fuente de datos.&lt;br /&gt;Where : filtros o condiciones de la consulta.&lt;br /&gt;Select : campos de la lista o array que deseamos obtener. A diferencia de SQL se ubica al final de la sentencia.&lt;br /&gt;&lt;br /&gt;Espero les haya sido de utilidad esta breve introducción a esta nueva funcionalidad del Framework 3.0 .Net. Espero sus comentarios y acotaciones al respecto. Saludos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-309975830447772692?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/309975830447772692/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=309975830447772692' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/309975830447772692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/309975830447772692'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/05/novedades-vs-2008-linq.html' title='Novedades VS 2008 – LINQ'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-1308151582352723885</id><published>2008-05-05T16:10:00.006-03:00</published><updated>2008-05-05T16:38:25.235-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSIS'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><title type='text'>SSIS – Usar Package Configuration para parametrizar los paquetes</title><content type='html'>SQL Server Integration Services (SSIS) cuenta con una opción sumamente útil a la hora de poner en producción nuestros packages. Dicha funcionalidad es Package Configuration y sirve, básicamente para parametrizar externamente algunos componentes tales como variables, ConnectionStrings para conexiones a Bases de Datos o archivos planos, etc.  Esto se lleva a cabo desde archivos externos, comúnmente en formato XML.&lt;br /&gt;Tal vez uno de los usos más frecuentes sea el parametrizar las ConnectionString de las conexiones a las BD tanto de origen como de destino, para de esta manera permitir que el package pueda trabajar con diferentes BD sin necesidad de que éste tenga que ser modificado. Simplemente modificando la cadena de conexión en el archivo de configuración podemos permitir trabajar con diferentes BD. &lt;br /&gt;Los pasos a seguir para utilizar archivos de configuración de packages son los siguientes:&lt;br /&gt;1. Ir al Menú SSIS, elegir la opción Package Configurations…&lt;br /&gt;2. Se abrirá la Ventana de Package Configurations Organizer, en la cual debemos marcar el check que dice Enabled Package Configurations.&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_sXwGa2aCdwI/SB9cF7bA3jI/AAAAAAAAAL4/CZN6CS26veE/s1600-h/Package+Config1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_sXwGa2aCdwI/SB9cF7bA3jI/AAAAAAAAAL4/CZN6CS26veE/s320/Package+Config1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5196973751928938034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. Hacer clic en el botón Add… tras lo cual se abre una nueva ventana de asistente que nos guiará en el proceso de creación del archivo de configuración. Si hacemos clic en el botón NEXT&gt; ingresamos al primer paso de la creación. Aquí escogeremos el tipo o formato de archivo que deseamos configurar (normalmente lo dejaremos en XML) y luego debemos ingresar el path y el nombre que deseamos que tenga el archivo. Hacemos clic en NEXT&gt; para ir al siguiente paso.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sXwGa2aCdwI/SB9cObbA3kI/AAAAAAAAAMA/aYCRrW5pXUs/s1600-h/Package+Config2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sXwGa2aCdwI/SB9cObbA3kI/AAAAAAAAAMA/aYCRrW5pXUs/s320/Package+Config2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5196973897957826114" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;4. En este paso debemos seleccionar las propiedades que deseamos exportar al archivo de configuración. En nuestro caso, suponiendo que tenemos una conexión a una Base de Datos,  seleccionaremos la propiedad “connectionstring” de dicha conexión. Damos clic en NEXT&gt; para dirigirnos al último paso.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/SB9cZLbA3lI/AAAAAAAAAMI/hUmXGDMC1bo/s1600-h/Package+Config3.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/SB9cZLbA3lI/AAAAAAAAAMI/hUmXGDMC1bo/s320/Package+Config3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5196974082641419858" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;5. En éste último paso debemos colocar el nombre de configuración y damos click en Finish para culminar este proceso. De esta manera el archivo de configuración ya esta creado y podremos acceder a él para editar la cadena de conexión si lo creemos necesario.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/SB9cgLbA3mI/AAAAAAAAAMQ/0obghdw4rQs/s1600-h/Package+Config4.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/SB9cgLbA3mI/AAAAAAAAAMQ/0obghdw4rQs/s320/Package+Config4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5196974202900504162" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;6. Si nos dirigimos al path donde almacenamos el archivo de configuración y lo abrimos podremos ver que se trata de un simple archivo XML. Podemos modificar la connectionString realizando cambios en el lugar adecuado como puede observarse en la siguiente imagen.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_sXwGa2aCdwI/SB9cp7bA3nI/AAAAAAAAAMY/Z_-rw7uQsuU/s1600-h/Package+Config_Contenido.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_sXwGa2aCdwI/SB9cp7bA3nI/AAAAAAAAAMY/Z_-rw7uQsuU/s320/Package+Config_Contenido.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5196974370404228722" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-1308151582352723885?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/1308151582352723885/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=1308151582352723885' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/1308151582352723885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/1308151582352723885'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/05/ssis-usar-package-configuration-para.html' title='SSIS – Usar Package Configuration para parametrizar los paquetes'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_sXwGa2aCdwI/SB9cF7bA3jI/AAAAAAAAAL4/CZN6CS26veE/s72-c/Package+Config1.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-8533805364345415700</id><published>2008-04-22T10:15:00.009-03:00</published><updated>2008-04-22T10:48:18.006-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSIS'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><title type='text'>SSIS – Uso de Condicionales en componentes  Derived Columns</title><content type='html'>Quizás se han preguntado alguna vez si es posible el uso de condicionales dentro de un componente de un Data Flow para de esta manera setear el valor de un campo de destino si se cumple determinada condición en un dato de origen. Por ejemplo, si el campo Sexo es igual a 1 (sexo = 1)  en el destino debe almacenarse el Valor “Mascuilno”, caso contrario, debe almacenarse el valor “Femenino”. La sintaxis sería la siguiente:&lt;br /&gt;&lt;b&gt;([sexo] == ”1”) ?  “Masculino” : “Femenino”&lt;/b&gt;&lt;br /&gt;Esta sintaxis puede aplicarse en un componente Derived Column como se puede ver en el siguiente ejemplo. Lo primero que haremos es crear un fichero como el siguiente:&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/SA3lzrbA3bI/AAAAAAAAAKc/JyhXOhIfgas/s1600-h/Fichero+Origen.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/SA3lzrbA3bI/AAAAAAAAAKc/JyhXOhIfgas/s320/Fichero+Origen.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5192058621420166578" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Luego crearemos un nuevo proyecto de Integration Services en SQL Server Business Intelligence Development Studio con el nombre de “Conditional”. &lt;br /&gt;Crearemos las conexiones de origen y destino respectivas como se ven en las siguientes imágenes.&lt;br /&gt; &lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/SA3mZrbA3eI/AAAAAAAAAK0/i4-4pjj_CcE/s1600-h/Conexiones.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/SA3mZrbA3eI/AAAAAAAAAK0/i4-4pjj_CcE/s320/Conexiones.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5192059274255195618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sXwGa2aCdwI/SA3mC7bA3cI/AAAAAAAAAKk/-KhX1nixj9U/s1600-h/Connction+Origen+1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sXwGa2aCdwI/SA3mC7bA3cI/AAAAAAAAAKk/-KhX1nixj9U/s320/Connction+Origen+1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5192058883413171650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Conexión de Origen – Flat File&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sXwGa2aCdwI/SA3mK7bA3dI/AAAAAAAAAKs/5wGQ2vKOS54/s1600-h/Connction+Destino+1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sXwGa2aCdwI/SA3mK7bA3dI/AAAAAAAAAKs/5wGQ2vKOS54/s320/Connction+Destino+1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5192059020852125138" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Conexión de Destino – Flat File&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Insertamos en el Control Flow un Data Flow Task la que llamaremos “Conditional Data Flow task” y dentro de este último insertaremos un Flat File Source, un Derived Column y en Flat File Destination y los relacionaremos como se muestra en la figura siguiente:&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/SA3oIrbA3fI/AAAAAAAAAK8/_fFp1pRwq6o/s1600-h/Data+Flow.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/SA3oIrbA3fI/AAAAAAAAAK8/_fFp1pRwq6o/s320/Data+Flow.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5192061181220675058" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En el componente Derived Column pondremos el siguiente código que permitirá realizar la determinación del Sexo del Cliente que se está procesando. &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sXwGa2aCdwI/SA3pO7bA3gI/AAAAAAAAALE/dw3xcf3X7lw/s1600-h/Derived+Column.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sXwGa2aCdwI/SA3pO7bA3gI/AAAAAAAAALE/dw3xcf3X7lw/s320/Derived+Column.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5192062388106485250" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;Posteriormente, en el Flat File Destination debemos cambiar el mapeo de campos como se ve en la siguiente figura, para que de esta manera la nueva columna derivada que hemos creado se vincule con la columna “sexo” del fichero de destino.&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sXwGa2aCdwI/SA3pm7bA3hI/AAAAAAAAALM/Wf5h-XZw5Wo/s1600-h/Destino2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sXwGa2aCdwI/SA3pm7bA3hI/AAAAAAAAALM/Wf5h-XZw5Wo/s320/Destino2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5192062800423345682" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;El resultado del proceso será el siguiente un archivo llamado Cliente_Destino.txt con el siguiente contenido:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/SA3p0rbA3iI/AAAAAAAAALU/TrGxgDTU7Cg/s1600-h/Fichero+Destino.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/SA3p0rbA3iI/AAAAAAAAALU/TrGxgDTU7Cg/s320/Fichero+Destino.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5192063036646546978" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-8533805364345415700?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/8533805364345415700/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=8533805364345415700' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/8533805364345415700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/8533805364345415700'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/04/ssis-uso-de-condicionales-en.html' title='SSIS – Uso de Condicionales en componentes  Derived Columns'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sXwGa2aCdwI/SA3lzrbA3bI/AAAAAAAAAKc/JyhXOhIfgas/s72-c/Fichero+Origen.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-5437352845166976303</id><published>2008-04-10T11:55:00.012-03:00</published><updated>2008-04-18T15:35:42.686-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSIS'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><title type='text'>SSIS - Uso de Precedence Constraint para direccionar el Flujo de datos</title><content type='html'>En éste, mi 3er Post sobre Integration Services voy a mostrarles un ejemplo de cómo desviar el flujo de datos que queremos importar según se cumplan ciertas condiciones. El ejemplo que veremos a continuación, si bien es muy simple, nos servirá para ilustrar una forma de razonamiento muy útil para diversas situaciones.&lt;br /&gt;Supongamos que tenemos una empresa en la que los clientes pueden ser Nacionales e Internacionales. El proceso que debemos realizar debe tomar los datos desde 2 ficheros “.txt” los cuales poseen nombres que los diferencian si se tratan de clientes Nacionales o Extranjeros. El formato del nombre de los ficheros para clientes nacionales es ddmmaaaaNac.txt y para los Internacionales es ddmmaaaaInt.txt y estructuralmente la diferencia es que éstos últimos poseen una columna más denominada “Pais” y por éste motivo deben procesarse por separado, de lo contrario se produciría un error.&lt;br /&gt;&lt;br /&gt;Los pasos a seguir en la construcción del ejemplo serán:&lt;br /&gt;&lt;br /&gt;1. Creación de Ficheros Origen  y Tabla de destino de Datos&lt;br /&gt;2. Creación del Proceso SSIS&lt;br /&gt;3. Ejecución del proceso y análisis de resultados&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Creación de Ficheros Origen  y Tabla de destino de Datos&lt;/b&gt;&lt;br /&gt;Para comenzar nuestro ejemplo, debemos crear 4 ficheros “.txt” (ver imagen) en los cuales el separador de columnas es el “tab” y el de filas el “Enter” ({CR}{LF})&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_sXwGa2aCdwI/R_4rOrnuIzI/AAAAAAAAAHM/j1xpISvhUsU/s1600-h/ContenidoFicheros.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_sXwGa2aCdwI/R_4rOrnuIzI/AAAAAAAAAHM/j1xpISvhUsU/s320/ContenidoFicheros.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5187631352004879154" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Una vez creados estos 4 ficheros con sus respectivos nombres, estructuras y contenidos pasemos a la creación de la tabla destino en SQL Server.&lt;br /&gt;El nombre de la tabla será TablaClientes en la BD Examples y su estructura será la siguiente:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sXwGa2aCdwI/R_4raLnuI0I/AAAAAAAAAHU/1eWz6BQU3os/s1600-h/tablaClientes.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sXwGa2aCdwI/R_4raLnuI0I/AAAAAAAAAHU/1eWz6BQU3os/s320/tablaClientes.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5187631549573374786" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Creación del Proceso SSIS&lt;/b&gt;&lt;br /&gt;Abriremos el SQL Server Business Intelligence Development Studio donde de crearemos un nuevo proyecto de Integration Services, como nombre le pondremos “Condicional”.&lt;br /&gt;Una vez situados en el Control Flow del Package crearemos 2 variables, la primera se llamará varFileName que contendrá el nombre del fichero que se está procesando en un momento determinado y la variable varFilenationality, la cual albergará los valores “Nac” o “Int” según sea la terminación del archivo procesado. Ambas variables serán de tipo String.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_sXwGa2aCdwI/R_4rjbnuI1I/AAAAAAAAAHc/72OtI6M3QW8/s1600-h/variables.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sXwGa2aCdwI/R_4rjbnuI1I/AAAAAAAAAHc/72OtI6M3QW8/s320/variables.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5187631708487164754" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Posteriormente agregaremos las conexiones con los ficheros de Origen y la BD de destino de Datos. Tendremos 2 Flat File Connection, una para los Clientes nacionales y otra para los clientes internacionales, y una OLE DB Connection que se conectará  a la BD Examples.&lt;br /&gt;Para las  Flat Connections deberemos seleccionar el primer fichero “txt” que creamos con anterioridad según se trate de clientes Nacionales o internacionales, es decir, para la conexión “Clientes Nacionales – Origen” debemos seleccionar como File Name 15102007Nac.txt y para “Clientes Internacionales – Origen” debemos seleccionar como File Name 15102007Int.txt&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R_4rt7nuI2I/AAAAAAAAAHk/iY1FMVJk1io/s1600-h/Conexiones.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R_4rt7nuI2I/AAAAAAAAAHk/iY1FMVJk1io/s320/Conexiones.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5187631888875791202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Además, para estas Flat Connections debemos modificar su propiedad Expressions y colocar como connectionString la variable varFileName. Esto permite que a medida que el foreach recorre los ficheros del directorio, los orígenes de datos obtengan sus datos de los ficheros correspondientes.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R_4sJ7nuI3I/AAAAAAAAAHs/VbsnFGRtqF0/s1600-h/ConnectionString.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R_4sJ7nuI3I/AAAAAAAAAHs/VbsnFGRtqF0/s320/ConnectionString.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5187632369912128370" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Luego, sobre la superficie del Control Flow agregaremos un componente Foreach en el cual definiremos el path que contiene los ficheros y el tipo de ficheros a importar, en nuestro caso “*.txt”&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_sXwGa2aCdwI/R_4snbnuI5I/AAAAAAAAAH8/r4kqD9eg8lc/s1600-h/Foreach2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sXwGa2aCdwI/R_4snbnuI5I/AAAAAAAAAH8/r4kqD9eg8lc/s320/Foreach2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5187632876718269330" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En la opción Variable Mappings del Foreach asignaremos la variable varFileName.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_sXwGa2aCdwI/R_4sjbnuI4I/AAAAAAAAAH0/N5TyyiTubZc/s1600-h/Foreach1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sXwGa2aCdwI/R_4sjbnuI4I/AAAAAAAAAH0/N5TyyiTubZc/s320/Foreach1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5187632807998792578" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A continuación agregaremos dentro del Foreach un Script Task con el cual podremos determinar si el fichero procesado por el foreach se trata de clientes Nacionales o Internacionales. Renombraremos el script task como “Obtener Ambito Cliente” y lo editaremos. En la opción Script, haremos click en el botón Design Script donde agregaremos el siguiente código:&lt;br /&gt;&lt;br /&gt;Imports System&lt;br /&gt;Imports System.Data&lt;br /&gt;Imports System.Math&lt;br /&gt;Imports Microsoft.SqlServer.Dts.Runtime&lt;br /&gt;&lt;br /&gt;Public Class ScriptMain &lt;br /&gt;&lt;br /&gt;   Public Sub Main()&lt;br /&gt;        &lt;br /&gt;        Dim vars As Variables&lt;br /&gt;        Dim FileNationality As String&lt;br /&gt;        Dim varsNationality As Variables&lt;br /&gt;&lt;br /&gt;        'asignamos a la variable local "vars" el contenido de la variable varFileName&lt;br /&gt;        'que obtiene el nombre del fichero en el Foreach&lt;br /&gt;        Dts.VariableDispenser.LockOneForRead("User::varFileName", vars)&lt;br /&gt;&lt;br /&gt;        'Procesamos la variable varFileName para obtener el ámbito del fichero txt&lt;br /&gt;        FileNationality = vars("varFileName").Value.ToString.Substring(vars("varFileName").Value.ToString.Length - 7, 3)&lt;br /&gt;&lt;br /&gt;        'instanciamos y asignamos a la variable varFileNationality el ámbito obtenido&lt;br /&gt;        Dts.VariableDispenser.LockOneForWrite("varFileNationality", varsNationality)&lt;br /&gt;        varsNationality("varFileNationality").Value = FileNationality&lt;br /&gt;&lt;br /&gt;  Dts.TaskResult = Dts.Results.Success&lt;br /&gt; End Sub&lt;br /&gt;&lt;br /&gt;End Class&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Resumiendo el código, vemos que obtenemos el nombre del fichero que estamos procesando en este momento procesando la variable varFileName, de la cual extraemos el ámbito (Nac o Int) y lo asignamos a la variable varFileNationality. Ésta variable será la que utilizaremos para desviar el flujo de datos hacia un Data Flow u otro más adelante.&lt;br /&gt;&lt;br /&gt;El siguiente paso consiste en crear 2 Data Flow, uno llamado “Clientes Nacionales Data Flow Task” y el otro “Clientes Internacionales Data Flow Task”, donde el primero se encargará de importar en la tabla TablaClientes de la BD Examples los datos relativos a los clientes Nacionales y el segundo, los datos de los clientes Internacionales.&lt;br /&gt;&lt;br /&gt;Arrastramos sendas flechas desde el Script hasta los Data Flow recientemente creados y el siguiente paso será editar los Precedence Constraint haciendo doble click sobre las mencionadas flechas que unen el Script con los Data Flow.&lt;br /&gt;&lt;br /&gt;Editemos el Precedence Constraint que une el Script con el Clientes Nacionales Data Flow Task. Allí debemos cambiar la Evaluation operation a Expression y dentro del campo homónimo escribir:&lt;br /&gt;@[User::varFileNationality] == "Nac"&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R_4tP7nuI6I/AAAAAAAAAIE/G4Ldk4rUOhU/s1600-h/Condicional1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R_4tP7nuI6I/AAAAAAAAAIE/G4Ldk4rUOhU/s320/Condicional1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5187633572502971298" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Damos OK y repetimos la operación para el Precedence Constraint que une el script con el el Clientes Internacionales Data Flow Task, imitamos la configuración anterior pero reemplazando la Expression por la siguiente:&lt;br /&gt;@[User::varFileNationality] == "Int"&lt;br /&gt;&lt;br /&gt;El Control Flow quedará de la siguiente manera:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sXwGa2aCdwI/R_4uSLnuI7I/AAAAAAAAAIM/0VBB-1rDNCY/s1600-h/Package1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sXwGa2aCdwI/R_4uSLnuI7I/AAAAAAAAAIM/0VBB-1rDNCY/s320/Package1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5187634710669304754" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Con esto hemos finalizado el Control Flow, por lo que debemos realizar la funcionalidad de los Data Flow Clientes Nacionales Data Flow Task y Clientes Internacionales Data Flow Task. En ambos debemos agregar un Flat File Source en donde utilizarán las conexiones “Clientes Nacionales – Origen” y “Clientes Internacionales – Origen” respectivamente. Posteriormente debemos agregar un OLE DB Destination que utilizará la conexión ““localhost.Examples” antes creada.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_sXwGa2aCdwI/R_4ugrnuI8I/AAAAAAAAAIU/m6KgZ0mQMcc/s1600-h/Package2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_sXwGa2aCdwI/R_4ugrnuI8I/AAAAAAAAAIU/m6KgZ0mQMcc/s320/Package2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5187634959777407938" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Luego de unir ambos componentes arrastrando la flecha verde del Flat File Source al OLE DB Destination, debemos realizar el mapeo de los campos en éste último.&lt;br /&gt;&lt;br /&gt;Cómo podemos ver ambos Data Flow son muy similares, excepto que en el de los clientes Nacionales no disponemos de la columna “Pais” y por lo tanto no podemos mapearla a la Tabla de la BD.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_sXwGa2aCdwI/R_4wtrnuI-I/AAAAAAAAAIk/qV_KAAkaVjE/s1600-h/ClientesDestination.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_sXwGa2aCdwI/R_4wtrnuI-I/AAAAAAAAAIk/qV_KAAkaVjE/s320/ClientesDestination.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5187637382138962914" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Ejecución del proceso y análisis de resultados&lt;/b&gt;&lt;br /&gt;El siguiente y último paso será ejecutar el proceso. Si nos paramos sobre el Control Flow de modo tal de ver el Foreach y todo su contenido y ejecutamos el proceso (Presionando F5) veremos cómo según sea el fichero que se está procesando correspondiente a clientes Nacionales o Internacionales, la ejecución se destinará a uno u otro Data Flow de acuerdo a que condición cumpla la variable varFilenationality obtenida.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sXwGa2aCdwI/R_4uqLnuI9I/AAAAAAAAAIc/jQ7cwa1edxg/s1600-h/tablaClientesResultado.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sXwGa2aCdwI/R_4uqLnuI9I/AAAAAAAAAIc/jQ7cwa1edxg/s320/tablaClientesResultado.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5187635122986165202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Si analizamos los datos de la tabla TablaClientes podemos ver que se han importado correctamente los datos y la diferencia entre los clientes Nacionales e Internacionales es que estos últimos poseen un País, mientras que los nacionales tienen el valor NULL en ese campo.&lt;br /&gt;&lt;br /&gt;Espero les haya sido de utilidad mi ejemplo y no duden en escribir comentarios ante cualquier duda o inquietud.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-5437352845166976303?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/5437352845166976303/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=5437352845166976303' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/5437352845166976303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/5437352845166976303'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/04/uso-de-precedence-constraint-para.html' title='SSIS - Uso de Precedence Constraint para direccionar el Flujo de datos'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_sXwGa2aCdwI/R_4rOrnuIzI/AAAAAAAAAHM/j1xpISvhUsU/s72-c/ContenidoFicheros.JPG' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-4557253524243862790</id><published>2008-04-04T10:06:00.011-03:00</published><updated>2008-04-04T12:12:06.392-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2005'/><category scheme='http://www.blogger.com/atom/ns#' term='Framework 2.0'/><title type='text'>Abrir archivos con programa por default (.Net 2.0)</title><content type='html'>He retornado, pero esta vez no para escribir sobre SSIS sino sobre una funcionalidad muy sencilla pero no menos interesante del Framework .Net 2.0. Se trata del método Process.Start(), útil para abrir los archivos de cualquier tipo con la aplicación que le corresponde según su extensión. Por ejemplo, si tenemos un archivo con extensión “.doc” o “.docx”, el  método se encargará de abrir el archivo con Microsoft Word en la versión que tengamos instalada en nuestra PC. Aquí les pongo un ejemplo tanto para VB como para C#.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_sXwGa2aCdwI/R_YoscKXpcI/AAAAAAAAAGw/dwuLZIIhi3M/s1600-h/codigo.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_sXwGa2aCdwI/R_YoscKXpcI/AAAAAAAAAGw/dwuLZIIhi3M/s320/codigo.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5185376764902745538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cómo podemos deducir de éste simple código, declaramos que utilizaremos los componentes de System.Diagnostics, luego creamos una proceso llamado “pr”, le asignamos el archivo que deseamos abrir y luego le decimos que comience el proceso. El resultado de este código es que se abrirá el archivo seleccionado con Microsoft Word inmediatamente después de ejecutarse la sentencia pr.Start().&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-4557253524243862790?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/4557253524243862790/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=4557253524243862790' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/4557253524243862790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/4557253524243862790'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/04/abrir-archivos-con-programa-por-default.html' title='Abrir archivos con programa por default (.Net 2.0)'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_sXwGa2aCdwI/R_YoscKXpcI/AAAAAAAAAGw/dwuLZIIhi3M/s72-c/codigo.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-5584283795353205042</id><published>2008-03-20T11:18:00.014-03:00</published><updated>2008-04-10T09:41:05.397-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSIS'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><category scheme='http://www.blogger.com/atom/ns#' term='Project REAL'/><title type='text'>Project REAL</title><content type='html'>Buenas a todos los miles de lectores de mi Blog (hay que ser optimista en la vida… jeje). Para todos aquellos que estén dando sus primeros pasos en el mundo de BI (Business Intelligence) les recomiendo que den un vistazo a Project Real. Project Real, como se deduce de su nombre, es el resultado de un esfuerzo conjunto entre Microsoft y numerosos e importantes partners (tales como Unisys y Scalability Experts entre otros) cuyo fin es el proporcionar a las empresas una serie de ejemplos cuasi-reales orientados a instruir sobre la utilización de “Best Practices” para la creación de este tipo de proyectos con MS SQL SERVER 2005.&lt;br /&gt; &lt;div align="center"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R-JyPsKXpbI/AAAAAAAAAGo/DcvP_sgiPuY/s1600-h/lgo_project_real.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R-JyPsKXpbI/AAAAAAAAAGo/DcvP_sgiPuY/s320/lgo_project_real.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5179828135307748786" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Si te especializas en ETL o Reporting Services puedes encontrar conceptos y ejemplos muy interesantes al respecto. A continuación les dejo una serie de Links que pueden ser de ayuda.&lt;br /&gt;&lt;br /&gt;• &lt;a target="_blank" href="http://www.microsoft.com/sql/solutions/bi/projectreal.mspx"&gt;Project REAL - Home Page&lt;/a&gt;&lt;br /&gt;• &lt;a target="_blank" href="http://www.sqlmag.com/articles/index.cfm?articleid=47748"&gt;Project REAL - Best practices&lt;/a&gt;&lt;br /&gt;• &lt;a target="_blank" href="http://www.microsoft.com/technet/prodtechnol/sql/2005/realastd.mspx"&gt;Project REAL - Analysis Services Technical Drilldown&lt;/a&gt;&lt;br /&gt;• &lt;a target="_blank" href="http://www.microsoft.com/technet/prodtechnol/sql/2005/realetldp.mspx"&gt;Project REAL - Business Intelligence ETL Design Practices&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Espero les sean de utilidad estos links. Hasta el próximo post!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-5584283795353205042?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/5584283795353205042/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=5584283795353205042' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/5584283795353205042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/5584283795353205042'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/03/project-real.html' title='Project REAL'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sXwGa2aCdwI/R-JyPsKXpbI/AAAAAAAAAGo/DcvP_sgiPuY/s72-c/lgo_project_real.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-4651507537361189439</id><published>2008-03-14T17:18:00.015-02:00</published><updated>2008-04-08T11:59:06.406-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSIS'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><title type='text'>SSIS – Atributos Históricos tomando fecha desde nombre del Archivo</title><content type='html'>He regresado con mi 2º post sobre SSIS, espero el anterior les haya sido de utilidad. Este ejemplo es una continuación del anterior, por ello es importante que hayan respetado la nomenclatura y demás características del mismo. Aquí explicaré como a través de un SCD (Slowly Changing Dimension) podemos llevar un registro histórico de los datos de alumnos ingresados en el post anterior, tomando las fechas que poseen los nombres de los ficheros XLS. Para decirlo más claro, la TablaAlumnos va a contener un registro histórico de los cursos en los que han estado los alumnos, con su fecha de alta y baja respectiva para cada alumno y curso. En caso de que un alumno repita de curso, como los registros de los 2 ficheros XLS serán iguales, el SCD lo detectará y sólo se ingresará una vez.&lt;br /&gt;Al igual que el post anterior, procederé a dividirlo en partes para simplificar su comprensión. Estas son:&lt;br /&gt;&lt;br /&gt;1. Modificar los datos en último fichero XLS&lt;br /&gt;2. Agregar componente Script Task para obtener la fecha desde el nombre del fichero&lt;br /&gt;3. Agregar componente SCD&lt;br /&gt;4. Ejecutar el proceso y analizar los resultados&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1.  Modificar los datos en último fichero XLS&lt;/span&gt;&lt;br /&gt;Para que nuestro ejemplo funcione, debemos tomar el último fichero XLS (Alumnos 28022008.xls) y realizarle algunas modificaciones. En realidad debemos hacer sólo 2 modificaciones, a los alumnos con legajo 100 (Perez Mieguel Angel) y 102 (Juarez Martin Alejandro)  y reemplazar en la columna “Curso” el valor 3 por el 2. Ello significa que esos alumnos repitieron de curso y las filas para esos 2 alumnos serán exactamente iguales en los archivos Alumnos 28022007.xls  y Alumnos 28022008.xls&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9rQsfa81sI/AAAAAAAAAFY/e1RXQIhnRW0/s1600-h/Excel2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9rQsfa81sI/AAAAAAAAAFY/e1RXQIhnRW0/s320/Excel2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5177680184383166146" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Agregar componente Script Task &lt;/span&gt;&lt;br /&gt;El siguiente paso consiste en dirigirnos nuevamente al Package y en el Control Flow dentro del Foreach agregar un componente Script Task desde la ToolBox. Luego de agregado el componente, debemos unir su flecha verde con el Data Flow Task como muestra la siguiente figura.&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9rQ8fa81tI/AAAAAAAAAFg/uLTGkAGPxxY/s1600-h/package1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9rQ8fa81tI/AAAAAAAAAFg/uLTGkAGPxxY/s320/package1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5177680459261073106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Dentro de este Script, mediante código VB.Net obtendremos la fecha que figura en el nombre del fichero XLS que esté procesando en ese momento el Foreach.&lt;br /&gt;Antes de mostrarles  cómo configurar el Script, vamos a crear una variable llamada “varDate” de tipo DateTime, desde la solapa Variables del IDE.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sXwGa2aCdwI/R9rRNva81uI/AAAAAAAAAFo/2Jkra0cW1V8/s1600-h/Script1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sXwGa2aCdwI/R9rRNva81uI/AAAAAAAAAFo/2Jkra0cW1V8/s320/Script1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5177680755613816546" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;Una vez creada la variable, hacemos click derecho sobre el Script Task para Editarlo. En la ventana de edición, seleccionamos la opción Script y y cliqueamos el botón Design Script…Esto abrirá una nueva ventana del VS en la cual sede quedar el código siguiente.&lt;br /&gt;&lt;table border=0 width="100%"&gt;&lt;tr&gt;&lt;td style="font-size:2;"&gt;&lt;br /&gt;' Microsoft SQL Server Integration Services Script Task&lt;br /&gt;' Write scripts using Microsoft Visual Basic&lt;br /&gt;' The ScriptMain class is the entry point of the Script Task.&lt;br /&gt;&lt;br /&gt;Imports System&lt;br /&gt;Imports System.Data&lt;br /&gt;Imports System.Math&lt;br /&gt;Imports Microsoft.SqlServer.Dts.Runtime&lt;br /&gt;&lt;br /&gt;Public Class ScriptMain&lt;br /&gt;&lt;br /&gt; Public Sub Main()&lt;br /&gt;        ' Declaramos las variables que utilizaremos  &lt;br /&gt;        Dim vars As Variables&lt;br /&gt;        Dim FileDate As String&lt;br /&gt;        Dim varsDate As Variables&lt;br /&gt;&lt;br /&gt;        'asignamos a la variable local "vars" el contenido de la variable varFileName &lt;br /&gt;        'que obtiene el nombre del fichero XLS en el Foreach&lt;br /&gt;        Dts.VariableDispenser.LockOneForRead("User::varFileName", vars)&lt;br /&gt;&lt;br /&gt;        'Procesamos la variable varFileName para obtener la fecha del nombre del fichero XLS&lt;br /&gt;        'con el formato dd/mm/aaaa&lt;br /&gt;        FileDate = vars("varFileName").Value.ToString.Substring(vars("varFileName").Value.ToString.Length - 12, 2) + "/" + _&lt;br /&gt;        vars("varFileName").Value.ToString.Substring(vars("varFileName").Value.ToString.Length - 10, 2) + "/" + _&lt;br /&gt;        vars("varFileName").Value.ToString.Substring(vars("varFileName").Value.ToString.Length - 8, 4)&lt;br /&gt;&lt;br /&gt;        'instanciamos y asignamos a la variable varDate la fecha obtenida&lt;br /&gt;        Dts.VariableDispenser.LockOneForWrite("varDate", varsDate)&lt;br /&gt;        varsDate("varDate").Value = CDate(FileDate)&lt;br /&gt;&lt;br /&gt;  Dts.TaskResult = Dts.Results.Success&lt;br /&gt; End Sub&lt;br /&gt;&lt;br /&gt;End Class&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt; &lt;br /&gt;Nótese que el lenguaje utilizado es solamente VB.Net y se puede hacer Debug como cualquier aplicación en VS 2005.&lt;br /&gt;Cerramos la ventana una vez que ingresamos el código, y damos Ok en la ventana de edición de Script Task. Con esto logramos que por cada vez que se recorra un fichero XLS del directorio correspondiente, la variable varDate tome el valor que figura en el nombre del archivo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. Agregar componente SCD&lt;/span&gt;&lt;br /&gt;Llegó la hora de agregar el SCD (Slowly Changing Dimensión) que nos permitirá agregar los datos en la tabla TablaAlumnos conservando datos históricos. Para ello nos dirigiremos al Data Flow.&lt;br /&gt;Antes de insertar el SCD será conveniente eliminar el OLE DB Destination existente, ya que el nuevo componente se encargará de agregar todos los componentes necesarios al finalizar de configurarlo.&lt;br /&gt;Una vez eliminado el OLE DB Destination procederemos a insertar el SCD desde el ToolBox. Luego uniremos la flecha verde del componente Derived Column con el SCD. Haciendo click derecho, elegiremos la opción Edit…Allí nos aparecerá un asistente que nos permitirá configurar el SCD fácilmente.&lt;br /&gt;En el primer paso daremos click en Next&gt;, mientras que los demás pasos se detallan a continuación: &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Paso Select a Dimension Table and keys&lt;span style="font-style:italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;En este paso seleccionaremos la tabla, los campos a ser tenidos en cuenta para los cambios y la Key Business que en este caso será el campo Legajo. Damos Next &gt; para ir al siguiente.&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sXwGa2aCdwI/R9rRqva81vI/AAAAAAAAAFw/P5uZNThXcyY/s1600-h/SCD1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sXwGa2aCdwI/R9rRqva81vI/AAAAAAAAAFw/P5uZNThXcyY/s320/SCD1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5177681253830022898" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Paso Slowly Changing Dimensión Columns&lt;span style="font-style:italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Aquí es donde debemos especificar que columnas y qué tipo de cambios vamos a necesitar. Para nuestro ejemplo seleccionaremos todas las columnas disponibles y su Change Type como Historical Attribute. Damos Next &gt; para ir al siguiente.&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_sXwGa2aCdwI/R9rR2_a81wI/AAAAAAAAAF4/AIicjX6u8rU/s1600-h/SCD2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sXwGa2aCdwI/R9rR2_a81wI/AAAAAAAAAF4/AIicjX6u8rU/s320/SCD2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5177681464283420418" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Paso Historical Attribute Options&lt;span style="font-style:italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Usaremos “Start and End Dates” para identificar los registros vigentes y expirados. Alli utilizaremos la variable varDate para setear los valores de los campos Registro_valido_desde y Registro_valido_hasta. Damos Next &gt; para ir al siguiente.&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sXwGa2aCdwI/R9rSEva81xI/AAAAAAAAAGA/V7NefsDTLLQ/s1600-h/SCD3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sXwGa2aCdwI/R9rSEva81xI/AAAAAAAAAGA/V7NefsDTLLQ/s320/SCD3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5177681700506621714" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Paso Infered Dimension Members&lt;span style="font-style:italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;En este paso desmarcaremos el check box “Enable infered member support” y daremos click en Finish &gt; para ir culminar con la configuración del SCD.&lt;br /&gt;Para más información sobre SCD visite &lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms141662.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms141662.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Una vez finalizado el asistente, se generarán una serie de componentes automáticamente, los que llevarán a cabo la tarea que nos propusimos al comienzo. El Package se verá de la siguiente manera.&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sXwGa2aCdwI/R9rSRva81yI/AAAAAAAAAGI/PBu-gTsQpus/s1600-h/package2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sXwGa2aCdwI/R9rSRva81yI/AAAAAAAAAGI/PBu-gTsQpus/s320/package2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5177681923844921122" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4. Ejecutar el proceso y analizar los resultados&lt;/span&gt;&lt;br /&gt;Ya estamos en condiciones de probar el Package, para ello les recomiendo borrar el contenido de la tabla TablaAlumnos para ver más claramente los resultados.&lt;br /&gt;Ejecutemos el proceso presionando F5 y vayamos a ver el contenido de la tabla a la BD. El resultado debería ser el siguiente:&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9rSlfa81zI/AAAAAAAAAGQ/aH6hkzFo4DY/s1600-h/TablaAlumnos1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9rSlfa81zI/AAAAAAAAAGQ/aH6hkzFo4DY/s320/TablaAlumnos1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5177682263147337522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Analizando los datos de la tabla TablaAlumnos, podremos ver que contamos con 2 tipos de alumnos:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;a)&lt;/span&gt; Los que pasaron todos sus cursos sin problemas año a año. Por ejemplo Legajo 101 Baresi Mateo, si analizamos sus datos veremos que en el año 2006 cursó 1º año, en el 2007 2º año y en el 2008 se encuentra cursando 3º año ya que el campo Registro_valido_hasta se encuentra vacío.&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9rS5fa810I/AAAAAAAAAGY/bIa1AYxe2e8/s1600-h/TablaAlumnos_Select1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9rS5fa810I/AAAAAAAAAGY/bIa1AYxe2e8/s320/TablaAlumnos_Select1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5177682606744721218" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;b)&lt;/span&gt; Los que repitieron el 2º año. Por ejemplo Legajo 100 Perez Miguel angel y analizando sus datos veremos que sólo tiene 2 registros y no tres como los que no repitieron de año. Veamos por qué. En el año 2006 cursó 1º y en el año 2007 cursó 2º año, el que todavía no ha concluido debido a que ha repetido el mismo.  &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_sXwGa2aCdwI/R9rTF_a811I/AAAAAAAAAGg/lUbFGxDDbyY/s1600-h/TablaAlumnos_Select2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sXwGa2aCdwI/R9rTF_a811I/AAAAAAAAAGg/lUbFGxDDbyY/s320/TablaAlumnos_Select2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5177682821493086034" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;Analizándolo desde el punto de vista técnico, podemos decir que el SCD detecta en este caso que existen registros exactamente iguales en los archivos Alumnos 28022007.xls  y Alumnos 28022008.xls, y por ello no ingresa en la tabla el registro duplicado.&lt;br /&gt;Aquí finaliza mi 2º post, espero les sea de utilidad y por cualquier duda o inquietud solo tienen que agregar comentarios. Saludos a todos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-4651507537361189439?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/4651507537361189439/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=4651507537361189439' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/4651507537361189439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/4651507537361189439'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/03/ssis-atributos-histricos-tomando-fecha.html' title='SSIS – Atributos Históricos tomando fecha desde nombre del Archivo'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sXwGa2aCdwI/R9rQsfa81sI/AAAAAAAAAFY/e1RXQIhnRW0/s72-c/Excel2.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-1817086342858945220</id><published>2008-03-11T11:53:00.014-02:00</published><updated>2008-03-20T10:50:28.787-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSIS'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><title type='text'>SSIS – Ejemplo de Package con origen de datos Excel dinámicos</title><content type='html'>Estimados amigos lectores, en éste, mi primer post sobre SSIS, quiero presentarles un ejemplo que seguramente les será muy útil  si están dando sus primeros pasos con esta herramienta de Microsoft. Intentaré explicar con un ejemplo sencillo como crear un Package de SSIS (SQL Server Integration Services) para importar los datos de todos los documentos XLS (MS Excel) que se encuentran en un directorio particular, procesarlos y luego enviar los datos obtenidos y procesados a una tabla de una Base de datos de SQL Server. En post posteriores iré ampliando este Package, agregando más transformaciones para complejizarlo y ajustarlo más a la realidad de la vida cotidiana, pero para empezar, creo que este ejemplo estará más que bien. Bueno, arranquemos…&lt;br /&gt;El ejemplo constará de 3 partes con la finalidad de simplificar su comprensión. Estas son:&lt;br /&gt;&lt;br /&gt;1. Crear Orígenes y destino de Datos&lt;br /&gt;2. Creación del Package sin iteración&lt;br /&gt;3. Creación de iteración para el Package&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. Crear Orígenes y destino de Datos&lt;/span&gt;&lt;br /&gt;Lo primero que debemos hacer es contar con 3 archivos XLS (Excel) en una carpeta de nuestra PC. Les sugiero que utilicen los mismos nombres y path que yo para evitar problemas. Si miran la imagen de abajo, verán el path y los nombres de archivos. Por ejemplo:&lt;br /&gt;C:\SSIS\Alumnos\Alumnos ddmmaaaa.xls&lt;br /&gt;Respetar el formato del nombre será importante para futuros post de ampliación del ejemplo. Fíjense que lo único que difiere en ese nombre es el año.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aPbfa81WI/AAAAAAAAAC0/6ovqp6Ut97k/s1600-h/ArchivosExcel.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aPbfa81WI/AAAAAAAAAC0/6ovqp6Ut97k/s320/ArchivosExcel.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5176482524162741602" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;La estructura (columnas) del los 3 archivos debe ser igual, no así los datos de los alumnos, los que sólo deben ser diferentes los valores de la columna Curso en cada uno de los archivos. Por ejemplo, el Alumno Baresi Mateo en el archivo Alumnos 28022006.xls tendrá en la Columna “Curso” el valor 1, en el archivo Alumnos 28022007.xls el valor 2, y en el archivo Alumnos 28022008.xls el valor 3. La estructura del XLS debe ser la siguiente:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_sXwGa2aCdwI/R9aPy_a81XI/AAAAAAAAAC8/lkmVznhuLwU/s1600-h/Excel1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sXwGa2aCdwI/R9aPy_a81XI/AAAAAAAAAC8/lkmVznhuLwU/s320/Excel1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5176482927889667442" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;La tabla donde se almacenarán los datos obtenidos y transformados para este ejemplo se encuentra en la base de datos Examples y se llama TablaAlumnos (Tener presente que tanto la BD como la tabla han sido creadas para este ejemplo). La estructura de la tabla sería la siguiente:&lt;br /&gt;&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sXwGa2aCdwI/R9aQLva81YI/AAAAAAAAADE/psM3rzjoOb0/s1600-h/TablaAlumnos.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sXwGa2aCdwI/R9aQLva81YI/AAAAAAAAADE/psM3rzjoOb0/s320/TablaAlumnos.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5176483353091429762" /&gt;&lt;/a&gt;&lt;br /&gt;Donde RowID será la clave principal y autoincremetal.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Creación del Package sin iteración&lt;/span&gt;&lt;br /&gt;Una vez que ya contamos con los archivos de “origen” de datos y la tabla de “destino” creada procedemos a abrir el SQL Server Business Intelligence Development Studio para comenzar a crear el proceso. Creamos un nuevo Proyecto de Integration Services, le ponemos de nombre IMPORT_XLS y lo guardamos dentro de la carpeta SSIS que creamos con anterioridad.&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aQZfa81ZI/AAAAAAAAADM/Uhwq3ZSKrys/s1600-h/SSIS-NewProject.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aQZfa81ZI/AAAAAAAAADM/Uhwq3ZSKrys/s320/SSIS-NewProject.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5176483589314631058" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Luego de creado el proyecto, se nos abre en el IDE del VS el paquete por defecto, cuyo nombre es Package.dtsx. Allí es donde debemos apelar a nuestra creatividad y comenzar a “dibujar” nuestro proceso!!!&lt;br /&gt;Lo primero que vamos a hacer es crear las conexiones de origen y destino para los datos. Para crear el origen de datos de archivos Excel nos situamos en el Administrador de Conexiones, allí hacemos lo siguiente:&lt;br /&gt;- click derecho en la superficie, seleccionamos la opción New Connection…&lt;br /&gt;- Seleccionamos la opción EXCEL, y hacemos clic en Add….&lt;br /&gt;- Luego hacemos click en el botón Browse y seleccionamos el archivo deseado, en nuestro caso seleccionaremos el archivo Alumnos 28022006.xls ubicado en C:\SSIS\Alumnos&lt;br /&gt;- Dejamos chequeada la casilla First row has column name, ya que nuestras columnas tienen encabezado.&lt;br /&gt;- Hacemos click en el botón OK y ya habremos creado el “Origen” de datos. Se llamará Excel connection Manager.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aSDfa81bI/AAAAAAAAADc/yX89mBxt74M/s1600-h/ExcelConnection+Name.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aSDfa81bI/AAAAAAAAADc/yX89mBxt74M/s320/ExcelConnection+Name.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5176485410380764594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Para crear el “Destino” de datos haremos lo siguiente:&lt;br /&gt;- click derecho en la superficie, seleccionamos la opción New OLE DB Connection…&lt;br /&gt;- en la ventana de configuración hacemos click en la opción New… para crear una nueva conexión a la BD.&lt;br /&gt;- En la nueva ventana de Connection Manager debemos especificar los datos de nuestra conexión. Para nuestro ejemplo, los datos pueden observarse en la figura siguiente.&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aQxfa81aI/AAAAAAAAADU/GZB4FyeRExg/s1600-h/OLEDB+Conn.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aQxfa81aI/AAAAAAAAADU/GZB4FyeRExg/s320/OLEDB+Conn.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5176484001631491490" /&gt;&lt;/a&gt;&lt;br /&gt;- Damos Ok en las dos ventanas y ya tendremos creada también la conexión de destino hacia la base de datos llamada localhost.Examples.&lt;br /&gt;&lt;br /&gt;Ahora procederemos a la creación del Package propiamente. Lo primero que haremos es insertar en el Control Flow (Flujo de Control) un nuevo Data Flow task (Tarea de Flujo de Datos), arrastrando dicho objeto hacia la superficie que aún se encuentra vacía.&lt;br /&gt;Posteriormente, hacemos doble click sobre el Data Flow task para poder agregarle la funcionalidad adecuada. Una vez dentro del Data Flow, agregamos una Excel Source, ubicada en la sección Data Flow Sources de la Toolbox arrastrándola a la superficie. Hacemos click derecho sobre el elemento agregado, elegimos la opción Edit… Allí nos aseguramos que la conexión seleccionada sea la que creamos con anterioridad y luego sólo seleccionamos la hoja del fichero XLS que contiene la información (en nuestro caso seleccionamos Hoja1$)&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_sXwGa2aCdwI/R9aS7Pa81cI/AAAAAAAAADk/Mc16hq8GY_8/s1600-h/ExcelSource.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_sXwGa2aCdwI/R9aS7Pa81cI/AAAAAAAAADk/Mc16hq8GY_8/s320/ExcelSource.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5176486368158471618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lo siguiente que haremos es agregar el destino de datos, para ello arrastraremos el componente OLE DB Destination desde la Sección Data Flow destination. Una vez insertado en el Package, nos situamos sobre el Excel Source y arrastramos la flecha verde hasta el OLE DB Destination que acabamos de insertar.&lt;br /&gt; &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aTRfa81dI/AAAAAAAAADs/CLi9U6ZovpY/s1600-h/Package1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aTRfa81dI/AAAAAAAAADs/CLi9U6ZovpY/s320/Package1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5176486750410560978" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lo siguiente que debemos hacer es Editar el OLE DB Destination y donde debemos en la opción Connection Manager nos aseguramos que la conexión sea la que creamos con anterioridad (localhost.Examples) y seleccionamos la TablaAlumnos. Luego debemos ir a la opción Mappings para relacionar cada una de las columnas de Excel con sus respectivos campos en TablaAlumnos.&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_sXwGa2aCdwI/R9aTwPa81eI/AAAAAAAAAD0/ib9flbL5AhY/s1600-h/OLEDB+Destination2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_sXwGa2aCdwI/R9aTwPa81eI/AAAAAAAAAD0/ib9flbL5AhY/s320/OLEDB+Destination2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5176487278691538402" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Es muy posible que les surjan errores de compilación debido a que no se pueden mapear campos con diferentes tipos de datos. En nuestro caso, los errores surgen en algunos campos. Lo que debemos hacer es fijarnos en el OLEDB Destination los tipos de datos que corresponden a cada campo (posicionando el cursor unos segundos encima del mismo) y luego agregar un nuevo componente para realizar el cambio en el tipo de datos. &lt;br /&gt;&lt;br /&gt;El componente a agregar es Derived Column, con el cual podremos crear columnas derivadas con el nuevo tipo de dato. El Data Flow debe quedar como se muestra en la figura siguiente.&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sXwGa2aCdwI/R9aUTva81hI/AAAAAAAAAEE/vqmKDShUu5U/s1600-h/Package2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sXwGa2aCdwI/R9aUTva81hI/AAAAAAAAAEE/vqmKDShUu5U/s320/Package2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5176487888576894482" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Luego debemos Editar el componente Derived Column insertado, agregando  columnas derivadas para cada uno de los campos que requieren transformación, para ello vea la siguiente figura y observe que la propiedad Length de de la columna derivada “DerivedDivision” es 1. Eso es porque puede ir solo un carácter en este caso.&lt;br /&gt;&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aU6fa81kI/AAAAAAAAAEY/2Br9efEIOVs/s1600-h/DerivedColumn1_1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aU6fa81kI/AAAAAAAAAEY/2Br9efEIOVs/s320/DerivedColumn1_1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5176488554296825410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Una vez ingresadas estas las columnas, damos click en OK para confirmar estos cambios. Lo que resta en esta primera parte es volver a mapear los campos del destino con problemas de tipo de datos con las nuevas columnas derivadas que acabamos de crear. Para ello debemos editar el componente OLEDB Destination, ir hasta la opción Mappings y allí vincular las nuevas columnas con sus respectivos campos en el destino.&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_sXwGa2aCdwI/R9aVW_a81lI/AAAAAAAAAEg/lty1GcbsNx4/s1600-h/OLEDB+Destination4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sXwGa2aCdwI/R9aVW_a81lI/AAAAAAAAAEg/lty1GcbsNx4/s320/OLEDB+Destination4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5176489043923097170" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Si damos OK en la ventana, ya habremos concluido esta parte del ejercicio y podremos llevar a cabo la primera prueba. Presionamos F5 para que ejecutar el Package y una vez concluida la ejecución, si nos dirigimos a la tabla TablaAlumnos de la Base de Datos podremos ver los datos importados. Deberíamos tener los siguientes datos:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aVtfa81mI/AAAAAAAAAEo/mIYqiSTqdig/s1600-h/TablaAlumnos2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aVtfa81mI/AAAAAAAAAEo/mIYqiSTqdig/s320/TablaAlumnos2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5176489430470153826" /&gt;&lt;/a&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. Creación de iteración para el Package&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Vamos por buen camino, ya falta menos!!! Hasta ahora el proceso funciona correctamente pero con sólo un fichero XLS. Lo que haremos ahora es agregar las iteraciones para que recorra todo el directorio C:\SSIS\Alumnos, cargando de esa forma los datos de todos los ficheros en la tabla TablaAlumnos.&lt;br /&gt;&lt;br /&gt;Debemos situarnos en el Control Flow donde agregaremos un Foreach Loop Container sobre la superficie donde ya se encuentra el Data Flow Task. Luego arrastramos éste último dentro del componente Foreach Loop Container.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aV5fa81nI/AAAAAAAAAEw/LET4jsyPh_g/s1600-h/ForEach1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aV5fa81nI/AAAAAAAAAEw/LET4jsyPh_g/s320/ForEach1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5176489636628584050" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Ahora debemos configurar el Foreach, para ello hacemos click derecho sobre el mismo, y elegimos Edit. En la ventana del editor nos situamos en la opción collections en donde debemos poner el path y el tipo de archivo que vamos a recorrer. Donde debemos poner “C:\SSIS\Alumnos” y “*.XLS” respectivamente.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aWIfa81oI/AAAAAAAAAE4/W0MuXCVjask/s1600-h/ForEach2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aWIfa81oI/AAAAAAAAAE4/W0MuXCVjask/s320/ForEach2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5176489894326621826" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;En la opción Variable Mappings debemos agregar una nueva variable que se llamará varFileName, será de tipo String y su valor será el primero de los ficheros XLS que tenemos en el directorio “c:\SSIS\Alumnos\Alumnos 28022006.xls”&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sXwGa2aCdwI/R9aWVva81pI/AAAAAAAAAFA/38DCSa_fr8Q/s1600-h/ForEach3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_sXwGa2aCdwI/R9aWVva81pI/AAAAAAAAAFA/38DCSa_fr8Q/s320/ForEach3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5176490121959888530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lo último que resta es configurar la conexión para el origen de datos Excel Connection Manager que creamos con anterioridad. Para ello hacemos click derecho sobre él, Propiedades, y en Expressions asignamos la variable varFileName a las propiedades ExcelFilePath y ServerName. &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aWmfa81qI/AAAAAAAAAFI/3U3Q5w9HGNU/s1600-h/ExcelConnection_Expressions.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aWmfa81qI/AAAAAAAAAFI/3U3Q5w9HGNU/s320/ExcelConnection_Expressions.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5176490409722697378" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Damos OK y listo! El proceso ya está concluido.&lt;br /&gt;&lt;br /&gt;Si ejecutamos nuevamente el proceso (es conveniente eliminar el contenido de la tabla TablaAlumnos antes de cada importación para evitar duplicación de datos) veremos cómo han sido cargados los datos de los 3 ficheros XLS de la carpeta C:\SSIS\Alumnos.&lt;br /&gt;&lt;br /&gt;Espero les haya sido útil este ejemplo y en sucesivos posts iré ampliando este ejemplo con más funcionalidades. Saludos a todos los lectores!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-1817086342858945220?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/1817086342858945220/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=1817086342858945220' title='17 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/1817086342858945220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/1817086342858945220'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/03/ssis-ejemplo-de-package-con-origen-de.html' title='SSIS – Ejemplo de Package con origen de datos Excel dinámicos'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sXwGa2aCdwI/R9aPbfa81WI/AAAAAAAAAC0/6ovqp6Ut97k/s72-c/ArchivosExcel.JPG' height='72' width='72'/><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-1440167449660397720</id><published>2008-02-27T11:41:00.008-02:00</published><updated>2008-03-11T12:50:35.164-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><title type='text'>SEO - Search Engine Optimization </title><content type='html'>&lt;span style="" lang="EN-US"&gt;Bueno, más rápido de lo que pensaba voy a publicar mi primer Post. Se trata de SEO(Search optimization Engine) y quiero aclarar que al mismo lo he redactado a través de mi experiencia y también obteniendo información en la web, la cual he plasmado en este artículo y espero que les sirva. Obviam&lt;/span&gt;&lt;span style="" lang="EN-US"&gt;ente en sus comentarios pueden hacer aportes y observaciones si así lo consideran. Ahí va...&lt;br /&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: justify; text-indent: 9pt;"&gt;&lt;span style="" lang="EN-US"&gt;SEO significa Search Engine Optimization en inglés. &lt;/span&gt;&lt;span style="" lang="ES"&gt;Su traducción al español es Optimización para Motores de Búsqueda. Es el proceso de modificación y análisis de las páginas Web para conseguir posicionar dicha página en los puestos más altos dentro de los mayores buscadores. El análisis es amplio, ya que incluye títulos etiquetas o tags, códigos y diseño de &lt;st1:personname productid="la Web. En" st="on"&gt;la Web. En&lt;/st1:personname&gt; español las siglas SEO han llegado a referir a las personas que realizan este tipo de trabajo.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; text-indent: 9pt;"&gt;&lt;span style="" lang="ES"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;u&gt;&lt;span style="" lang="ES"&gt;Algunas pautas para SEO en orden de Importancia:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-left: 9pt; text-align: justify;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES"&gt;&lt;span style=""&gt;1.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES"&gt;Diseño del Site/Problemas de setup: &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style="" lang="ES"&gt;evitar el uso de Frames, Flash, Javascript, Image Maps, o URLs Dinámicas. Para el caso de los FRAMES se puede hacer lo siguiente:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-left: 18pt; text-indent: -9pt;"&gt;&lt;span style="" lang="ES"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_sXwGa2aCdwI/R8Vr5VlzBdI/AAAAAAAAAAg/RkGsTzM5rGY/s1600-h/Frames.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_sXwGa2aCdwI/R8Vr5VlzBdI/AAAAAAAAAAg/RkGsTzM5rGY/s320/Frames.JPG" alt="" id="BLOGGER_PHOTO_ID_5171658379897275858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;title&gt;Example Framed Site&lt;/title&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="" lang="EN-US"&gt;&lt;br /&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;noframes&gt;&lt;br /&gt;&lt;span style=""&gt;    &lt;/span&gt;Optimized page content goes here for best results.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-indent: -9pt;"&gt;&lt;b&gt;&lt;span style=" Tahoma&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: rgb(204, 0, 0);font-family:&amp;quot;font-size:9pt;" lang="EN-US"&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=" Tahoma&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: rgb(204, 0, 0);font-family:&amp;quot;font-size:9pt;" lang="ES"&gt;&lt;span style=""&gt;    &lt;/span&gt;Escribir acá los Tags &lt;span style=""&gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;/noframes&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="" lang="ES"&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-indent: -9pt;"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal" style="margin-left: 9pt; text-align: justify; text-indent: -9pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES"&gt;&lt;span style=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left: 9pt; text-align: justify; text-indent: -9pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES"&gt;&lt;span style=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left: 9pt; text-align: justify; text-indent: -9pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES"&gt;&lt;span style=""&gt;2.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES"&gt;Usar “palabras clave” adecuadas: &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="" lang="ES"&gt;Las palabras clave son las palabras que utilizan los clientes para buscar su sitio cuando emplean un motor de búsqueda. &lt;/span&gt;&lt;span style="" lang="EN-US"&gt;La idea es optimizar su página para estas palabras o expresiones. &lt;/span&gt;&lt;span style="" lang="ES"&gt;Debe elegir palabras clave que reflejen su empresa con exactitude. Es preferable utilizar “frases” más que “palabras”, por ejemplo:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="" lang="ES"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div align="center"&gt;  &lt;table class="MsoNormalTable" style="width: 75%; margin-left: 36pt;" border="1" cellpadding="0" cellspacing="0" width="75%"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="padding: 3pt; background: rgb(238, 238, 238) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="50%"&gt;   &lt;p class="MsoNormal" style="line-height: 135%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span style="line-height: 135%;" lang="ES"&gt;Demasiado General&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="line-height: 135%;" lang="ES"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 3pt; background: rgb(238, 238, 238) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="50%"&gt;   &lt;p class="MsoNormal" style="line-height: 135%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span style="line-height: 135%;" lang="ES"&gt;Mucho Mejor!&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="line-height: 135%;" lang="ES"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 3pt; width: 50%;" valign="top" width="50%"&gt;   &lt;p class="smbody" style="margin-left: 36pt; text-align: justify; text-indent: -18pt;"&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;&lt;span style=""&gt;1.&lt;span style=""&gt;     &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;shoes &lt;/span&gt;&lt;/p&gt;   &lt;p class="smbody" style="margin-left: 36pt; text-align: justify; text-indent: -18pt;"&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;&lt;span style=""&gt;2.&lt;span style=""&gt;     &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;men's shoes &lt;/span&gt;&lt;/p&gt;   &lt;p class="smbody" style="margin-left: 36pt; text-align: justify; text-indent: -18pt;"&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;&lt;span style=""&gt;3.&lt;span style=""&gt;     &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;women's shoes &lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 3pt; width: 50%;" valign="top" width="50%"&gt;   &lt;p class="smbody" style="margin-left: 8.7pt; text-align: justify; text-indent: -9pt;"&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;&lt;span style=""&gt;4.&lt;span style=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;imported italian shoes &lt;/span&gt;&lt;/p&gt;   &lt;p class="smbody" style="margin-left: 8.7pt; text-align: justify; text-indent: -9pt;"&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;&lt;span style=""&gt;5.&lt;span style=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;men's leather penny loafers &lt;/span&gt;&lt;/p&gt;   &lt;p class="smbody" style="margin-left: 8.7pt; text-align: justify; text-indent: -9pt;"&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;&lt;span style=""&gt;6.&lt;span style=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;women's aerobic sneakers &lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;/div&gt;  &lt;p class="MsoNormal" style="margin-left: 9pt; text-align: justify; text-indent: 9pt;"&gt;&lt;span style="" lang="ES"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 9pt; text-align: justify; text-indent: 9pt;"&gt;&lt;span style="" lang="ES"&gt;También es conveniente ver el &lt;b style=""&gt;&lt;i style=""&gt;código fuente&lt;/i&gt;&lt;/b&gt; de otras páginas de la competencia mejor rankeadas y fijarse que Tags utilizan.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 9pt; text-align: justify; text-indent: 9pt;"&gt;&lt;span style="" lang="ES"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 9pt; text-align: justify; text-indent: -9pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES"&gt;&lt;span style=""&gt;3.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES"&gt;Optimizar los Tag del Title:&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="" lang="ES"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;u&gt;&lt;span style="" lang="EN-US"&gt;Title&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;: (entre 50-80 characters)&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0cm 0cm 0.0001pt;"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0cm 0cm 0.0001pt;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R8Vsy1lzBeI/AAAAAAAAAAo/5RLaGFgKisw/s1600-h/Title.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R8Vsy1lzBeI/AAAAAAAAAAo/5RLaGFgKisw/s320/Title.JPG" alt="" id="BLOGGER_PHOTO_ID_5171659367739753954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0.0001pt;"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;title&gt;Your Title Tag - learn to optimize your title tag&lt;/title&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: -18pt;"&gt;&lt;span style="" lang="ES"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="" lang="ES"&gt;Incluir 1 o 2 de las palabras más importantes en el título, además del nombre de &lt;st1:personname productid="la Empresa." st="on"&gt;la Empresa.&lt;/st1:personname&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: -18pt;"&gt;&lt;span style="" lang="ES"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="" lang="ES"&gt;Cada página del sitio debe tener el Title.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="" lang="ES"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 9pt; text-align: justify; text-indent: -9pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES"&gt;&lt;span style=""&gt;4.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES"&gt;Optimizar los Meta Tags: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0.0001pt;"&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;Colocar entre el &lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_sXwGa2aCdwI/R8Vt0VlzBfI/AAAAAAAAAAw/oMO3m8IhH-I/s1600-h/Head.JPG"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_sXwGa2aCdwI/R8Vt0VlzBfI/AAAAAAAAAAw/oMO3m8IhH-I/s320/Head.JPG" alt="" id="BLOGGER_PHOTO_ID_5171660493021185522" border="0" /&gt;&lt;/a&gt;&lt;span lang="ES"  style="font-size:85%;"&gt; lo siguiente:&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;u&gt;&lt;span lang="ES"&gt;&lt;o:p&gt;&lt;span style="text-decoration: none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;u&gt;&lt;span style="" lang="EN-US"&gt;Description &lt;st1:place st="on"&gt;Meta&lt;/st1:place&gt;&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;: (no debe superar los 250 characters)&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0.0001pt 36pt; text-indent: -18pt;"&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;Incluir las 3 o 4 palabras más importantes, las incluidas en el Title por ejemplo.&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0.0001pt 36pt; text-indent: -18pt;"&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;Debe describir el contenido de &lt;st1:personname productid="la P￡gina." st="on"&gt;la Página.&lt;/st1:personname&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0cm 0cm 0.0001pt 36pt; text-indent: -18pt;"&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;&lt;st1:personname productid="la P￡gina." st="on"&gt;&lt;br /&gt;&lt;/st1:personname&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0cm 0cm 0.0001pt 36pt; text-indent: -18pt;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_sXwGa2aCdwI/R8Vt_VlzBgI/AAAAAAAAAA4/pGicE5pLQKk/s1600-h/Meta+Name.JPG"&gt;&lt;img style="cursor: pointer; width: 435px; height: 28px;" src="http://4.bp.blogspot.com/_sXwGa2aCdwI/R8Vt_VlzBgI/AAAAAAAAAA4/pGicE5pLQKk/s320/Meta+Name.JPG" alt="" id="BLOGGER_PHOTO_ID_5171660681999746562" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0.0001pt;"&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;meta name="description" content="This would be your description of what is on your page. Your most important keyword phrases should appear in this description."&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0.0001pt;"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0.0001pt;"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;u&gt;&lt;span style="" lang="EN-US"&gt;Keywords &lt;st1:place st="on"&gt;Meta&lt;/st1:place&gt;&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;: (no debe superar los 1024 characters)&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0.0001pt 36pt; text-indent: -18pt;"&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;Colocar las frases utilizadas en el Title, Meta description y demás Tags.&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: 0cm;"&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;Colocar las frases tanto en plural como en singular.&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: 0cm;"&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;No repetir la misma palabra más de 5 veces.&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: 0cm;"&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;Si la localización geográfica de &lt;st1:personname productid="la Empresa" st="on"&gt;la Empresa&lt;/st1:personname&gt; es un factor importante, incluir &lt;st1:personname productid="la Cuidad" st="on"&gt;la Cuidad&lt;/st1:personname&gt;, País, etc aquí.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: 0cm;"&gt;&lt;span lang="ES"  style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0.0001pt;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R8VuT1lzBhI/AAAAAAAAABA/0pSyJqftZJ4/s1600-h/Meta+Description.JPG"&gt;&lt;img style="cursor: pointer; width: 342px; height: 14px;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R8VuT1lzBhI/AAAAAAAAABA/0pSyJqftZJ4/s320/Meta+Description.JPG" alt="" id="BLOGGER_PHOTO_ID_5171661034187064850" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 9pt; text-align: justify; text-indent: -9pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES"&gt;&lt;span style=""&gt;5.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES"&gt;Optimizar el Atriburo “alt” de las imágenes: &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="" lang="ES"&gt;Si bien no funciona en todos los navegadores, nunca está de más ponerlos. &lt;b style=""&gt;&lt;i style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: -18pt;"&gt;&lt;span style="" lang="ES"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="" lang="ES"&gt;Usar sólo frases cortas, que incluyan frases o palabras de los anteriores enunciados.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: -18pt;"&gt;&lt;span style="" lang="ES"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="" lang="ES"&gt;Es un buen lugar para colocar los plurales de las frases si no se pusieron antes.&lt;b style=""&gt;&lt;i style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXwGa2aCdwI/R8Vue1lzBiI/AAAAAAAAABI/VIUimXnzkY4/s1600-h/IMG.JPG"&gt;&lt;img style="cursor: pointer; width: 353px; height: 19px;" src="http://2.bp.blogspot.com/_sXwGa2aCdwI/R8Vue1lzBiI/AAAAAAAAABI/VIUimXnzkY4/s320/IMG.JPG" alt="" id="BLOGGER_PHOTO_ID_5171661223165625890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 9pt; text-align: justify; text-indent: -9pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES"&gt;&lt;span style=""&gt;6.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES"&gt;Que NO hacer…(para no parecer Spam para los buscadores): &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="" lang="ES"&gt;No hacer cosas que provoquen ser ingresados a una “Lista Negra”. Por ejemplo:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: -18pt;"&gt;&lt;span style="" lang="ES"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="" lang="ES"&gt;Cualquier acción para mejorar el ranking del sitio fuera de lo permitido, puede provocar una penalización de los motores de búsqueda.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: -18pt;"&gt;&lt;span style="" lang="ES"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="" lang="ES"&gt;No usar el mismo color en las Fuentes que en el fondo de la página. Puede ser considerado Spam.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: -18pt;"&gt;&lt;span style="" lang="ES"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="" lang="ES"&gt;&lt;title&gt;.&lt;/title&gt;No repetir múltiples instancias de Tags. Por ejemplo, no poner varias veces &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: -18pt;"&gt;&lt;span style="" lang="ES"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="" lang="ES"&gt;No tener 2 páginas iguales, en todo caso renombrar una de ellas.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: -18pt;"&gt;&lt;span style="" lang="ES"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="" lang="ES"&gt;No reportar 1 página en un motor más de 1 vez por día.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: -18pt;"&gt;&lt;span style="" lang="ES"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="" lang="ES"&gt;No usar palabras o frases en el Meta Keyboard que no se relacionen con el contenido de la página.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-align: justify;"&gt;&lt;span style="" lang="ES"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 9pt; text-align: justify; text-indent: -9pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES"&gt;&lt;span style=""&gt;7.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES"&gt;¿Cuanto tiempo toma para conseguir lo mencionado?: &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="" lang="ES"&gt;el tiempo que demora un sitio en aparecer listado en los mejores buscadores es:&lt;b style=""&gt;&lt;i style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div align="center"&gt;  &lt;table class="MsoNormalTable" style="" border="0" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="padding: 3pt; background: rgb(238, 238, 238) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;&lt;a href="http://search.msn.com/"&gt;MSN&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 3pt; background: rgb(238, 238, 238) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;Up   to 2 months&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 3pt;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;&lt;a href="http://www.google.com/"&gt;Google&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 3pt;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;Up   to 4 weeks&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 3pt; background: rgb(238, 238, 238) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;&lt;a href="http://www.altavista.com/"&gt;AltaVista&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 3pt; background: rgb(238, 238, 238) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;Up   to 1 week&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 3pt;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;&lt;a href="http://www.alltheweb.com/"&gt;Fast&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 3pt;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;Up   to 2 weeks&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 3pt; background: rgb(238, 238, 238) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;&lt;a href="http://www.excite.com/"&gt;Excite&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 3pt; background: rgb(238, 238, 238) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;Up   to 6 weeks&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 3pt;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;&lt;a href="http://www.northernlight.com/"&gt;Northern Light&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 3pt;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;Up   to 4 weeks&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 3pt; background: rgb(238, 238, 238) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;&lt;a href="http://www.aol.com/"&gt;AOL&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 3pt; background: rgb(238, 238, 238) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;Up   to 2 months&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 3pt;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;&lt;a href="http://www.hotbot.com/"&gt;HotBot&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 3pt;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;Up   to 2 months&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 3pt; background: rgb(238, 238, 238) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;&lt;a href="http://www.iwon.com/"&gt;iWon&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 3pt; background: rgb(238, 238, 238) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;Up   to 2 months&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;/div&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-1440167449660397720?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/1440167449660397720/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=1440167449660397720' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/1440167449660397720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/1440167449660397720'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/02/seo-search-engine-optimization.html' title='SEO - Search Engine Optimization '/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_sXwGa2aCdwI/R8Vr5VlzBdI/AAAAAAAAAAg/RkGsTzM5rGY/s72-c/Frames.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8881625176226146931.post-1148655901190039695</id><published>2008-02-27T09:55:00.004-02:00</published><updated>2008-03-20T10:50:44.799-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSIS'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2005'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2008'/><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><title type='text'>Bienvenidos a mi Blog!</title><content type='html'>&lt;span style="font-size:100%;"&gt;Buenos días a todos los queridos lectores de mi Blog. Antes que nada quiero presentarme y contarles a que me dedico y cual es el motivo que me llevó a crear este &lt;span style="font-weight: bold; font-style: italic;"&gt;espacio&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;. Mi nombre completo es Miguel Angel Ciacci, oriundo de una pequeña localidad, ahora convertida en ciudad, del interior de la provincia de Córdoba, Argentina llamada Salsipuedes. Tengo 22 años... de estudiante jaja, en realidad tengo 27 años, soy Analista de Sistemas y me encuentro en la fase final de mi Tesis para recibirme de Ingeniero de Sistemas. El tema que escogimos para la Tesis junto a mi compañera Laura (no escribiré su apellido hasta tener su autorización ya que no deseo que me demande judicialmente) es un Sistema Experto para la selección de Telemanipuladores para Centrales Nucleares, y estamos en la dura tarea de terminar este proyecto que, pese al trabajo de ambos, con viajes por el país y el exterior incluidos llevamos por la buena senda.&lt;br /&gt;Bueno, ya no quiero aburrirlos más con mis  historias, vamos al grano... el motivo por el que he creado este Blog  es para plasmar en él algunos de los conocimientos que he adquirido a lo largo de mi vida tanto universitaria como laboral, enfocándome principalemente en temas que no se encuentran difundidos en gran manera por la web en nuestro idioma, y de esta manera ayudar a todos aquellos que como yo utilizamos Internet para enriquecer nuestros conocimientos y capacidades. Temas tales como  SSIS (SQL Server Integration Services),  C#.Net , VB.net,  ASP.Net, entre otros serán los abordados en este espacio.&lt;br /&gt;&lt;br /&gt;Este es mi  artículo de presentación,  en  estos días (cuando mi trabajo y estudios lo permitan jeje) comenzaré a subir articulos técnicos de los cuales espero sus comentarios y aportes.&lt;br /&gt;&lt;br /&gt;Que tengan un buena jornada, arrivederci a tutti!!!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8881625176226146931-1148655901190039695?l=mciacci.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mciacci.blogspot.com/feeds/1148655901190039695/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8881625176226146931&amp;postID=1148655901190039695' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/1148655901190039695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8881625176226146931/posts/default/1148655901190039695'/><link rel='alternate' type='text/html' href='http://mciacci.blogspot.com/2008/02/bienvenidos-mi-blog.html' title='Bienvenidos a mi Blog!'/><author><name>Miguel A. Ciacci</name><uri>http://www.blogger.com/profile/01670520381636062875</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp0.blogger.com/_sXwGa2aCdwI/R9aABPa81UI/AAAAAAAAACg/5T6oDa_Hdn8/S220/MiFoto.bmp'/></author><thr:total>0</thr:total></entry></feed>
