<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2spanishfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>SergioTarrillo - RichWeblog</title><link>http://geeks.ms/blogs/sergiotarrillo/default.aspx</link><description>Atención: Aquí no hacemos software, aquí cambiamos la vida de las personas que usan sistemas de información</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/sergiotarrillo" /><feedburner:info uri="sergiotarrillo" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly>Feeds del blog de SergioTarrillo's</feedburner:browserFriendly><item><title>[Enlace] Remover RID Lookup de tus planes de ejecución</title><link>http://feedproxy.google.com/~r/sergiotarrillo/~3/enwc3ICuxPw/enlace-remover-rid-lookup-de-tus-planes-de-ejecuci-243-n.aspx</link><pubDate>Fri, 23 Nov 2012 05:42:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:207510</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=207510</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2012/11/23/enlace-remover-rid-lookup-de-tus-planes-de-ejecuci-243-n.aspx#comments</comments><description>&lt;p&gt;Despues de varios a&amp;ntilde;os &lt;span style="text-decoration:line-through;"&gt;varios cabezazos contra la mesa&lt;/span&gt;&amp;nbsp;vamos aprendiendo un poco los &amp;iacute;ndices y planes de ejecuci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;En esa oportunidad solo quiero mencionar a la operaci&amp;oacute;n RID Lookup, esta operaci&amp;oacute;n es muy costosa y afecta el rendimiento de la consulta, por eso debemos tratar de removerlo de nuestro plan de ejecuci&amp;oacute;n. El siguiente caso se hace un update a una tabla:&lt;/p&gt;
&lt;p&gt;UPDATE dbo.Producto_Bulk SET Valido=0, ErrorMensaje=&amp;#39;Codigo Invalido&amp;#39; WHERE ProveedorID = @pID AND ArchivoCargaID=@logID AND Valido=1 AND Codigo = &amp;#39;&amp;#39;&lt;/p&gt;
&lt;p&gt;Exist&amp;iacute;a un &amp;iacute;ndice non-clustered para ProveedorID y para ArchivoCargaID, pero el campo Valido y el campo Codigo no estaban dentro del indice, se estaba generando la operaci&amp;oacute;n RID Lookup. Es una aplicaci&amp;oacute;n de carga masiva de productos que se ven&amp;iacute;a abajo debido al &lt;span style="text-decoration:line-through;"&gt;maldito&lt;/span&gt; RID Lookup, se carga entre 30,000 productos a 200,000 por archivo, y adem&amp;aacute;s de la validaci&amp;oacute;n de vac&amp;iacute;os tambi&amp;eacute;n hay validaci&amp;oacute;n de repetidos, en el update de repetidos hay hasta dos RID Lookup, y este punto es donde la consulta no daba mas &lt;span style="text-decoration:line-through;"&gt;si quieres actualizalo tu, que yo no lo voy hacer&lt;/span&gt;, y se generaba el querid&amp;iacute;simo timeout.&lt;/p&gt;
&lt;p&gt;Despu&amp;eacute;s de seguir las recomendaciones de mi amigo &lt;a title="SQL Authority - Pinal Dave" href="http://blog.sqlauthority.com/"&gt;Pinal Dave&lt;/a&gt;, pueden remover las operaciones RID Lookup del plan de ejecuci&amp;oacute;n, y salvar sus aplicaciones... bueno por el momento... &lt;span style="text-decoration:line-through;"&gt;hombre, que el mantenimiento de base de datos no tiene fin&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Fuente:&amp;nbsp;&lt;a target="_blank" title="SQL SERVER &amp;ndash; Query Optimization &amp;ndash; Remove Bookmark Lookup &amp;ndash; Remove RID Lookup &amp;ndash; Remove Key Lookup" href="http://blog.sqlauthority.com/2009/10/07/sql-server-query-optimization-remove-bookmark-lookup-remove-rid-lookup-remove-key-lookup/"&gt;SQL SERVER &amp;ndash; Query Optimization &amp;ndash; Remove Bookmark Lookup &amp;ndash; Remove RID Lookup &amp;ndash; Remove Key Lookup&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=207510" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/SQL+Server/default.aspx">SQL Server</category><feedburner:origLink>http://geeks.ms/blogs/sergiotarrillo/archive/2012/11/23/enlace-remover-rid-lookup-de-tus-planes-de-ejecuci-243-n.aspx</feedburner:origLink></item><item><title>[CodeSnipeet] Usar el atributo Obsolete (.NET: ObsoleteAttribute Class)</title><link>http://feedproxy.google.com/~r/sergiotarrillo/~3/Ir6f2nzdLTI/codesnipeet-usar-el-atributo-obsolete-net-obsoleteattribute-class.aspx</link><pubDate>Thu, 08 Dec 2011 00:36:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:202038</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=202038</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2011/12/07/codesnipeet-usar-el-atributo-obsolete-net-obsoleteattribute-class.aspx#comments</comments><description>&lt;p&gt;Entre cada versi&amp;oacute;n de un producto, siempre puede ocurrir la mejora de alguna clase o m&amp;eacute;todo creando una versi&amp;oacute;n con un nuevo nombre, pero tambi&amp;eacute;n existe el tema de afectar lo menos posible a aplicaciones que usen la versi&amp;oacute;n antigua. Es como usar la clase &lt;b&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.configuration.configurationsettings.appsettings.aspx" title="ConfigurationSettings.AppSettings Property"&gt;ConfigurationSettings.AppSettings&lt;/a&gt;&lt;/b&gt; en .Net 2.0, cuando podemos usar &lt;b&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings.aspx" title="ConfigurationManager.AppSettings Property"&gt;ConfigurationManager.AppSettings&lt;/a&gt;&lt;/b&gt;, siempre encontramos esos c&amp;oacute;digos &lt;span style="text-decoration:line-through;"&gt;que dices despu&amp;eacute;s lo cambio&lt;/span&gt; que por temas de tiempo todav&amp;iacute;a no se han podido actualizar.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2011/12Dic/ConfigurationSettings_Obsolete.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;El uso del atributo &lt;b&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.obsoleteattribute.aspx" title="ObsoleteAttribute Class"&gt;Obsolete&lt;/a&gt;&lt;/b&gt;, adem&amp;aacute;s de ser &amp;uacute;til cuando distribuimos librer&amp;iacute;as a terceros, tambi&amp;eacute;n podemos usarla en nuestros equipos internos. Siempre debemos tratar de que el c&amp;oacute;digo sea mantenible independiente del desarrollador actual, &amp;iquest;c&amp;oacute;mo le decimos al siguiente desarrollador?: &amp;ldquo;T&amp;iacute;o no uses este m&amp;eacute;todo, usa este nuevo m&amp;eacute;todo, no borre al anterior porque tengo miedo que no funcione la aplicaci&amp;oacute;n, si quieres tu lo puedes borrar&amp;rdquo;. Usando el atributo &lt;b&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.obsoleteattribute.aspx" title="ObsoleteAttribute Class"&gt;Obsolete&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;&amp;iquest;C&amp;oacute;mo podemos usar el atributo &lt;b&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.obsoleteattribute.aspx" title="ObsoleteAttribute Class"&gt;Obsolete&lt;/a&gt;&lt;/b&gt;?&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div id="codeSnippet" style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; [Obsolete]&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt; [Obsolete(&lt;span style="color:#006080;"&gt;&amp;quot;BuildPostList was disabled in BEv2.5&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum3" style="color:#606060;"&gt;   3:&lt;/span&gt; [Obsolete(&lt;span style="color:#006080;"&gt;&amp;quot;BuildPostList was disabled in BEv2.5&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum4" style="color:#606060;"&gt;   4:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; BuildPostList()&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum5" style="color:#606060;"&gt;   5:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum6" style="color:#606060;"&gt;   6:&lt;/span&gt;     var number = Math.Min(BlogSettings.Instance.NumberOfRecentPosts, Post.Posts.Count);&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum7" style="color:#606060;"&gt;   7:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum8" style="color:#606060;"&gt;   8:&lt;/span&gt;     Posts.Clear();&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum9" style="color:#606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var post &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; Post.Posts.Where(post =&amp;gt; post.IsVisibleToPublic).Take(number))&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum10" style="color:#606060;"&gt;  10:&lt;/span&gt;     {&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum11" style="color:#606060;"&gt;  11:&lt;/span&gt;         Posts.Add(post);&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum12" style="color:#606060;"&gt;  12:&lt;/span&gt;     }    &lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum13" style="color:#606060;"&gt;  13:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Podemos usarlo en tres versiones, la primera s&amp;oacute;lo indica que el m&amp;eacute;todo esta obsoleto, la segunda adem&amp;aacute;s de mostrar un mensaje de obsoleto muestra un mensaje personalizado, y la tercera adem&amp;aacute;s del mensaje muestra un error en tiempo de compilaci&amp;oacute;n:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2011/12Dic/Obsolete_Net.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Ver: &lt;a target="_blank" title="Developer Ranger - [CodeSnipeet] Usar el atributo Obsolete (.NET: ObsoleteAttribute Class)" href="http://sergiot2.com/blogs/devranger/post/2011/12/07/CodeSnipeet-Usar-el-atributo-Obsolete-%28NET-ObsoleteAttribute-Class%29.aspx"&gt;Entrada original&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=202038" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/.NET/default.aspx">.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Code+Snippets/default.aspx">Code Snippets</category><feedburner:origLink>http://geeks.ms/blogs/sergiotarrillo/archive/2011/12/07/codesnipeet-usar-el-atributo-obsolete-net-obsoleteattribute-class.aspx</feedburner:origLink></item><item><title>Geeks.ms en la Tienda de Nokia (Ovi Store)</title><link>http://feedproxy.google.com/~r/sergiotarrillo/~3/PpoPO6NuzXc/geeks-ms-en-la-tienda-de-nokia-ovi-store.aspx</link><pubDate>Thu, 03 Nov 2011 22:59:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:201522</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=201522</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2011/11/03/geeks-ms-en-la-tienda-de-nokia-ovi-store.aspx#comments</comments><description>&lt;p&gt;&lt;a title="Geeks.ms en OviStore" target="_blank" href="http://store.ovi.com/content/217172"&gt;&lt;img border="0" alt="Geeks.ms en OviStore" src="http://sergiot2.com/blogimages/2011/11Nov/Geeks.ms_nokia_-192x192.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Nokia, cuenta con una aplicaci&amp;oacute;n llamada &lt;a href="http://nokiaappwizard.com" title="Nokia App Wizard" target="_blank"&gt;Nokia App Wizard&lt;/a&gt;, la cual permite crear aplicaciones, de una manera sencilla, y que funcionan en los siguientes dispositivos: S40, Symbiam, y MeeGo (eso dice en la portada).&lt;/p&gt;
&lt;p&gt;El asistente al inicio solicita la fuente de informaci&amp;oacute;n, y la m&amp;aacute;s sencilla es una fuente de RSS, los siguientes pasos son de personalizaci&amp;oacute;n y opciones de la aplicaci&amp;oacute;n, como el costo de la misma. El proceso de validaci&amp;oacute;n y aprobaci&amp;oacute;n demora unos d&amp;iacute;as, tened paciencia. Y nada, Geeks.ms ya est&amp;aacute; disponible en la tienda de Nokia, Ovi Store: &lt;a href="http://store.ovi.com/content/217172" title="Geeks.ms in OviStore" target="_blank"&gt;Geeks.ms en OviStore&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Nokia App Wizard" src="http://sergiot2.com/blogimages/2011/11Nov/2011-11-03_Nokia_WizardApp.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Saludos,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=201522" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Mobile/default.aspx">Mobile</category><feedburner:origLink>http://geeks.ms/blogs/sergiotarrillo/archive/2011/11/03/geeks-ms-en-la-tienda-de-nokia-ovi-store.aspx</feedburner:origLink></item><item><title>Proveedores de Alojamiento (Hosting): WinHost, ASP.NET Hosting</title><link>http://feedproxy.google.com/~r/sergiotarrillo/~3/O5_se9DbZl4/proveedores-de-alojamiento-hosting-winhost-asp-net-hosting.aspx</link><pubDate>Fri, 23 Sep 2011 21:42:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:200699</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=200699</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2011/09/23/proveedores-de-alojamiento-hosting-winhost-asp-net-hosting.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.winhost.com/a/guxwjk_b_66"&gt;&lt;img src="http://www.winhost.com/c/b_66" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Desde hace unos meses que vengo usando WinHost para mi sitio Web personal, y hasta ahora todo va muy bien. Antes ten&amp;iacute;a otro proveedor que me hac&amp;iacute;a dos facturaciones una por el alojamiento del sitio web y otra por el alojamiento de la base de datos. Pero como lo que tengo es un sitio personal, de vez en cuando subo algunos prototipos, buscaba una opci&amp;oacute;n m&amp;aacute;s econ&amp;oacute;mica y que el uso de base de datos este incluida dentro del mismo plan, y &lt;a target="_blank" title="WinHost" href="http://www.winhost.com/c/b_66"&gt;WinHost&lt;/a&gt; cumpl&amp;iacute;a con eso.&lt;/p&gt;
&lt;p&gt;Algunas de sus caracter&amp;iacute;sticas, a mi parecer b&amp;aacute;sicas para tomar una decisi&amp;oacute;n, son las siguientes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IIS 7 Web Hosting&lt;/li&gt;
&lt;li&gt;Acceso remoto a trav&amp;eacute;s de IIS 7 Manager&lt;/li&gt;
&lt;li&gt;Incluye una base datos SQL Server y MySql&lt;/li&gt;
&lt;li&gt;Acceso remoto a la base de datos desde SQL Management Studio&lt;/li&gt;
&lt;li&gt;ASP.NET en todas sus versiones, y sus add-ins ASP.NET MVC, Silverlight, etc.&lt;/li&gt;
&lt;li&gt;Y para el correo el uso de SmarterMail&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tiene un &lt;a target="_blank" title="WinHost Demo Panel del Control" href="https://demo.winhost.com/"&gt;panel de control simple y pr&amp;aacute;ctico&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt="WinHost Demo Control Panel" src="http://sergiot2.com/blogimages/2011/09Sep/23_WinHost_DemoControlPanel.png" /&gt;&lt;/p&gt;
&lt;p&gt;Saludos,&lt;/p&gt;
&lt;ul&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=200699" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET+AJAX/default.aspx">ASP.NET AJAX</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Windows+Server/default.aspx">Windows Server</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Web/default.aspx">Web</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Hosting/default.aspx">Hosting</category><feedburner:origLink>http://geeks.ms/blogs/sergiotarrillo/archive/2011/09/23/proveedores-de-alojamiento-hosting-winhost-asp-net-hosting.aspx</feedburner:origLink></item><item><title>Descargas: Plantillas de diseño para ASP.NET (ASP.NET 2.0 Design Templates)</title><link>http://feedproxy.google.com/~r/sergiotarrillo/~3/50rDWGkNYcI/descargas-plantillas-de-dise-241-o-para-asp-net-asp-net-2-0-design-templates.aspx</link><pubDate>Wed, 29 Jun 2011 15:18:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:196851</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=196851</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2011/06/29/descargas-plantillas-de-dise-241-o-para-asp-net-asp-net-2-0-design-templates.aspx#comments</comments><description>&lt;p&gt;Hace algunos a&amp;ntilde;os, exist&amp;iacute;a un excelente recurso en MSDN para ASP.NET llamado: ASP.NET 2.0 Design Templates, bajo la siguiente url: &lt;a target="_blank" href="http://msdn.microsoft.com/asp.net/reference/design/templates/default.aspx" title="ASP.NET 2.0 Design Templates"&gt;http://msdn.microsoft.com/asp.net/reference/design/templates/default.aspx&lt;/a&gt;. No pude encontrar este recurso en otro lado, si alguien tiene el dato, por favor lo deja en los comentarios.&lt;/p&gt;
&lt;p&gt;Aunque la p&amp;aacute;gina web mencionada no esta disponible, las plantillas como descargas si lo est&amp;aacute;n. Gracias a mi amigo: &lt;a target="_blank" href="http://hi.csdn.net/flysun0311" title="flysun0311"&gt;flysun0311&lt;/a&gt;, por guardar los enlaces en esta entrada: &lt;a target="_blank" href="http://blog.csdn.net/flysun0311/archive/2008/11/25/3373528.aspx" title="符合Web标准的ASP .NET 2.0 Starter Kit模板下载"&gt;符合Web标准的ASP .NET 2.0 Starter Kit模板下载&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Todas estas descargas son compatibles para cualquier versi&amp;oacute;n de ASP.NET, es m&amp;aacute;s se pueden usar con cualquier otro lenguaje Php, Jsp, etc, el dise&amp;ntilde;o es uno solo para todos Html y CSS.&lt;/p&gt;
&lt;p&gt;P.D.: Si alg&amp;uacute;n enlace no esta disponible, me avisan por los comentarios tengo un bakcup de todos estos archivos en la nube.&lt;/p&gt;
&lt;p&gt;Html - Div y Table - &amp;quot;Basic Design Template&amp;quot; &amp;ndash; &lt;a target="_blank" href="http://download.microsoft.com/download/0/b/1/0b155bb5-6890-4af0-94a7-7b5b87c16796/basic06.msi" title="Basic Design Template"&gt;Descarga&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sergiot2.com/blogimages/2011/09Sep/13_ST2_BasicWebTemplate.jpg" title="ST2 - Basic Web Template" target="_blank"&gt;&lt;img src="http://sergiot2.com/blogimages/2011/09Sep/13_ST2_BasicWebTemplate.jpg" alt="ST2 Basic Web Template" width="500" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Html - Div y Table &amp;ndash; &amp;ldquo;Fun Design Template&amp;rdquo; &amp;ndash; &lt;a target="_blank" href="http://download.microsoft.com/download/d/8/2/d8291134-ac4d-45cc-b7eb-446564bb095e/fun06.msi" title="Fun Design Template"&gt;Descarga&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Html &amp;ndash; Div y Table &amp;ndash; &amp;ldquo;Grid Design Tamplte&amp;quot; &amp;ndash; &lt;a target="_blank" href="http://download.microsoft.com/download/1/f/d/1fd59802-643c-49d2-9586-26216d6840e8/grid06.msi" title="Grid Design Template"&gt;Descarga&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Html &amp;ndash; Div y Table &amp;ndash; &amp;ldquo;Rounded Design Template&amp;rdquo; &amp;ndash; &lt;a target="_blank" href="http://download.microsoft.com/download/c/7/a/c7a07f0e-4778-4d73-a163-f873a06b18ed/rounded06.msi" title="Rounded Design Template"&gt;Descarga&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Html &amp;ndash; Div y Table &amp;ndash; &amp;ldquo;Simple Design Template&amp;rdquo; &amp;ndash; &lt;a target="_blank" href="http://download.microsoft.com/download/f/d/e/fdea6532-984c-43ec-b41f-ea6b92d33edb/simple06.msi" title="Simple Design Template"&gt;Descarga&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ASP.NET - Web Commerce Design &amp;ndash; &lt;a target="_blank" href="http://download.microsoft.com/download/3/1/3/3134bdea-cae1-4795-a685-d48140264a08/templatecommercecs0106.vsi" title="ASP.NET Web Commerce Design C#"&gt;C#&lt;/a&gt; y &lt;a target="_blank" href="http://download.microsoft.com/download/0/e/2/0e201d64-1aee-4ffb-abfc-1fa24cecf757/templatecommerceVB0106.vsi" title="ASP.NET Web Commerce Design VB"&gt;VB&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ASP.NET &amp;ndash; Web Corporate Design &amp;ndash; &lt;a target="_blank" href="http://download.microsoft.com/download/9/8/0/980dc514-5e91-4608-b40c-c3aea45b00cb/templatecorporatecs0106.vsi" title="ASP.NET Web Corporate Design C#"&gt;C#&lt;/a&gt; y &lt;a target="_blank" href="http://download.microsoft.com/download/e/f/2/ef2f6d60-4cc0-4e9d-a22d-5930999db677/templatecorporateVB0106.vsi" title="ASP.NET Web Corporate Design VB"&gt;VB&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ASP.NET - Web Personal Design &amp;ndash; &lt;a target="_blank" href="http://download.microsoft.com/download/2/3/2/2328890d-8ca1-4b7f-a138-08fca8a244bd/templatepersonalcs0106.vsi" title="ASP.NET Web Personal Design C#"&gt;C#&lt;/a&gt; y &lt;a target="_blank" href="http://download.microsoft.com/download/9/3/3/933adec5-f5d4-4501-b552-0e825a0cf0bf/templatepersonalVB0106.vsi" title="ASP.NET Web Personal Design VB"&gt;VB&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ASP.NET - Web Small Business Design &amp;ndash; &lt;a target="_blank" href="http://download.microsoft.com/download/7/0/6/7061c0be-477a-44a3-ac02-a75ffd172f2d/templatesmallbusinesscs0106.vsi" title="ASP.NET Web Small Business Design C#"&gt;C#&lt;/a&gt; y &lt;a target="_blank" href="http://download.microsoft.com/download/e/3/6/e36ac37c-92fd-462b-b55e-7d5bcfdaf69f/templatesmallbusinessVB0106.vsi" title="ASP.NET Web Small Business Design VB"&gt;VB&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=196851" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Web/default.aspx">Web</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Samples+WebSite/default.aspx">Samples WebSite</category><enclosure url="http://download.microsoft.com/download/0/b/1/0b155bb5-6890-4af0-94a7-7b5b87c16796/basic06.msi" length="637952" type="application/octet-stream" /><feedburner:origLink>http://geeks.ms/blogs/sergiotarrillo/archive/2011/06/29/descargas-plantillas-de-dise-241-o-para-asp-net-asp-net-2-0-design-templates.aspx</feedburner:origLink></item><item><title>[CodeSnipeet] C# Detección personaliza de un navegador móvil</title><link>http://feedproxy.google.com/~r/sergiotarrillo/~3/3vR9bSK03d4/codesnipeet-c-detenci-243-n-personaliza-de-un-navegador-m-243-vil.aspx</link><pubDate>Thu, 23 Jun 2011 05:17:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:196505</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=196505</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2011/06/23/codesnipeet-c-detenci-243-n-personaliza-de-un-navegador-m-243-vil.aspx#comments</comments><description>&lt;p&gt;F&amp;aacute;cilmente&amp;nbsp; podr&amp;iacute;amos detectarlo usando la siguiente propiedad: &lt;strong&gt;Request.Browser.IsMobileDevice&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Pero esta propiedad no satisface algunos casos, por ejemplo con Opera Mini en un equipo Nokia. Si queremos crear nuestro propio m&amp;eacute;todo, podemos usar el siguiente c&amp;oacute;digo, extra&amp;iacute;do del art&amp;iacute;culo: &lt;a target="_blank" href="http://www.codeproject.com/KB/aspnet/mobiledetect.aspx" title="Detecting a mobile browser in ASP.NET"&gt;Detecting a mobile browser in ASP.NET&lt;/a&gt;:&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; Boolean IsCustomMobileBrowser()&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="rem"&gt;//GETS THE CURRENT USER CONTEXT&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    HttpContext context = HttpContext.Current;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="rem"&gt;//FIRST TRY BUILT IN ASP.NT CHECK&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (context.Request.Browser.IsMobileDevice)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="rem"&gt;//THEN TRY CHECKING FOR THE HTTP_X_WAP_PROFILE HEADER&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (context.Request.ServerVariables[&lt;span class="str"&gt;&amp;quot;HTTP_X_WAP_PROFILE&amp;quot;&lt;/span&gt;] != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    &lt;span class="rem"&gt;//THEN TRY CHECKING THAT HTTP_ACCEPT EXISTS AND CONTAINS WAP&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (context.Request.ServerVariables[&lt;span class="str"&gt;&amp;quot;HTTP_ACCEPT&amp;quot;&lt;/span&gt;] != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        context.Request.ServerVariables[&lt;span class="str"&gt;&amp;quot;HTTP_ACCEPT&amp;quot;&lt;/span&gt;].ToLower().Contains(&lt;span class="str"&gt;&amp;quot;wap&amp;quot;&lt;/span&gt;))&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;    &lt;span class="rem"&gt;//AND FINALLY CHECK THE HTTP_USER_AGENT &lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;    &lt;span class="rem"&gt;//HEADER VARIABLE FOR ANY ONE OF THE FOLLOWING&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (context.Request.ServerVariables[&lt;span class="str"&gt;&amp;quot;HTTP_USER_AGENT&amp;quot;&lt;/span&gt;] != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        &lt;span class="rem"&gt;//Create a list of all mobile types&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;        String[] mobiles =&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;            &lt;span class="kwrd"&gt;new&lt;/span&gt; String[]&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;            {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;midp&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;j2me&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;avant&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;docomo&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;novarra&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;palmos&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;palmsource&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;240x320&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;opwv&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;chtml&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;pda&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;windows ce&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;mmp/&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;blackberry&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;mib/&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;symbian&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;wireless&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;nokia&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;hand&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;mobi&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;phone&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;cdm&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;up.b&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;audio&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;SIE-&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;SEC-&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;samsung&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;HTC&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;mot-&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;mitsu&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;sagem&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;sony&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;                , &lt;span class="str"&gt;&amp;quot;alcatel&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;lg&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;eric&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;vx&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;NEC&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;philips&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;mmm&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;xx&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;panasonic&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;sharp&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;wap&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;sch&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;rover&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;pocket&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;benq&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;java&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;pt&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;pg&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;vox&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;amoi&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;bird&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;compal&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;kg&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;voda&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;sany&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;kdd&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;dbt&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;sendo&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;sgh&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;gradi&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;jb&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;dddi&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;moto&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;iphone&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;            };&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;        &lt;span class="rem"&gt;//Loop through each item in the list created above &lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;        &lt;span class="rem"&gt;//and check if the header contains that text&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; s &lt;span class="kwrd"&gt;in&lt;/span&gt; mobiles)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;        {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (context.Request.ServerVariables[&lt;span class="str"&gt;&amp;quot;HTTP_USER_AGENT&amp;quot;&lt;/span&gt;].&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;                            ToLower().Contains(s.ToLower()))&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;            {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;            }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;

&lt;/p&gt;
&lt;p&gt;P.D.: Si tienen alg&amp;uacute;n dispositivo que no funciona en este c&amp;oacute;digo, nos dejan un comentario para actualizar el c&amp;oacute;digo.&lt;/p&gt;
&lt;p&gt;Los detalles de la aplicaci&amp;oacute;n de este c&amp;oacute;digo, lo podemos ver en la siguiente p&amp;aacute;gina: &lt;a target="_blank" href="http://sergiot2.com/browserInformation.aspx" title="sergiot2.com - Browser Information"&gt;http://sergiot2.com/browserInformation.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img height="598" width="664" src="http://sergiot2.com/blogimages/2011/06Jun/22_Browsers.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Vamos a usar un navegador Wap para Windows, &lt;a target="_blank" href="http://www.winwap.com/" title="WinWap for Windows"&gt;WinWap&lt;/a&gt;, para mostrar algunas p&amp;aacute;ginas en su versi&amp;oacute;n para m&amp;oacute;vil:&lt;/p&gt;
&lt;p&gt;Si ingresamos a la p&amp;aacute;gina desarrollada:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2011/06Jun/21_Browse_Wap_st2.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Si ingresamos a Facebook vemos la redirecci&amp;oacute;n:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2011/06Jun/21_Browse_Wap_fb.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;En Google presentan contenido de acuerdo al dispositivo:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2011/06Jun/21_Browse_Wap_go.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Microsoft al parecer ya no tiene pensado soportar Wap:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2011/06Jun/21_Browse_Wap_ms.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Ingresando directamente a la direcci&amp;oacute;n m&amp;oacute;vil:&lt;/p&gt;
&lt;p&gt;&lt;img height="678" width="516" src="http://sergiot2.com/blogimages/2011/06Jun/21_Browse_Wap_mms.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Otros enlaces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target="_blank" href="http://www.ytechie.com/2008/10/detecting-mobile-device-user-agents-in-aspnet.html" title="Detecting mobile device user agents in ASP.NET"&gt;Detecting mobile device user agents in ASP.NET&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://www.logiclabz.com/asp-net/detect-request-url-from-mobile-device-pda.aspx" title="Detect Request URL from Mobile Device (PDA)"&gt;Detect Request URL from Mobile Device (PDA)&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=196505" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Mobile/default.aspx">Mobile</category><feedburner:origLink>http://geeks.ms/blogs/sergiotarrillo/archive/2011/06/23/codesnipeet-c-detenci-243-n-personaliza-de-un-navegador-m-243-vil.aspx</feedburner:origLink></item><item><title>[CodeSnippet] C# Obtener los programas instalados en Windows (Plus: Export to CSV)</title><link>http://feedproxy.google.com/~r/sergiotarrillo/~3/AzAX4PhcMVo/codesnippet-c-obtener-los-programas-instalados-en-windows-plus-export-to-csv.aspx</link><pubDate>Fri, 18 Mar 2011 17:20:19 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:190647</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=190647</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2011/03/18/codesnippet-c-obtener-los-programas-instalados-en-windows-plus-export-to-csv.aspx#comments</comments><description>&lt;p&gt;Existen dos formas, una es a través del registro y la otra usando WMI. En esta oportunidad mostrare el código usando WMI, porque el registro también devuelve las actualizaciones instaladas.&lt;/p&gt;  &lt;p&gt;Enlaces:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://stackoverflow.com/questions/908850/get-installed-applications-in-a-system" target="_blank"&gt;Get installed applications in a system&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.thereforesystems.com/get-a-list-of-installed-applications-using-linq-and-c/" target="_blank"&gt;Get A List Of Installed Applications Using LINQ And C#&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa394378%28v=vs.85%29.aspx" target="_blank"&gt;Win32_Product Class&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Notas del código:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Si quieren saber que otros campos pueden visualizar de este objeto puede revisar el siguiente enlace: &lt;a href="http://msdn.microsoft.com/en-us/library/aa394378%28v=vs.85%29.aspx" target="_blank"&gt;Win32_Product Class&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;Usamos el CodePage 1252, para no tener problemas con caracteres especiales (ñ) al escribir en el archivo.&lt;/li&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;/ul&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    DisplayInstalledApplications2();&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    ExporToCSV();&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    Console.WriteLine(&lt;span class="str"&gt;&amp;quot;... ENTER FOR EXIT&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    Console.ReadLine();&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DisplayInstalledApplications2()&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;{&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    ManagementObjectSearcher mos = &lt;span class="kwrd"&gt;new&lt;/span&gt; ManagementObjectSearcher(&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;SELECT * FROM Win32_Product&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (ManagementObject mo &lt;span class="kwrd"&gt;in&lt;/span&gt; mos.Get())&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        Console.WriteLine(mo[&lt;span class="str"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;]);&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    }           &lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ExporToCSV()&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;{&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;    ManagementObjectSearcher mos = &lt;span class="kwrd"&gt;new&lt;/span&gt; ManagementObjectSearcher(&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;SELECT * FROM Win32_Product&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;    String fileName = &lt;span class="str"&gt;&amp;quot;InstalledSoftware_&amp;quot;&lt;/span&gt; + DateTime.Now.ToString(&lt;span class="str"&gt;&amp;quot;yyyy-MM-dd&amp;quot;&lt;/span&gt;) + &lt;span class="str"&gt;&amp;quot;.csv&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; ( File.Exists(fileName) ) File.Delete(fileName);&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;    StringBuilder sbText = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder();&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;    sbText.AppendLine(&lt;span class="str"&gt;&amp;quot;Name,InstallDate&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (ManagementObject mo &lt;span class="kwrd"&gt;in&lt;/span&gt; mos.Get())&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;    {               &lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;        sbText.AppendFormat(&lt;span class="str"&gt;@&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="str"&gt;&amp;quot;{0}&amp;quot;&lt;/span&gt;&lt;span class="str"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;&lt;span class="str"&gt;&amp;quot;{1}&amp;quot;&lt;/span&gt;&lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, mo[&lt;span class="str"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;], mo[&lt;span class="str"&gt;&amp;quot;InstallDate&amp;quot;&lt;/span&gt;]);&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;        sbText.AppendLine(&lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);                &lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (StreamWriter wr = &lt;span class="kwrd"&gt;new&lt;/span&gt; StreamWriter(fileName, &lt;span class="kwrd"&gt;true&lt;/span&gt;, Encoding.GetEncoding(1252)))&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;        wr.WriteLine(sbText.ToString());&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=190647" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/.NET/default.aspx">.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Code+Snippets/default.aspx">Code Snippets</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/APIs/default.aspx">APIs</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Windows+7/default.aspx">Windows 7</category><feedburner:origLink>http://geeks.ms/blogs/sergiotarrillo/archive/2011/03/18/codesnippet-c-obtener-los-programas-instalados-en-windows-plus-export-to-csv.aspx</feedburner:origLink></item><item><title>Proveedores de Alojamiento (Hosting): myLittleAdmin, una herramienta para SQL Server via Web</title><link>http://feedproxy.google.com/~r/sergiotarrillo/~3/ms9qmM0JQ-c/proveedores-de-alojamiento-hosting-mylittleadmin-una-herramienta-para-sql-server-via-web.aspx</link><pubDate>Tue, 28 Sep 2010 22:14:26 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:182571</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=182571</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/09/28/proveedores-de-alojamiento-hosting-mylittleadmin-una-herramienta-para-sql-server-via-web.aspx#comments</comments><description>&lt;p&gt;Uno de los clientes, tiene alojada su Web en un proveedor de Hosting, el proveedor te da la opción de conectarte directamente desde un SQL Management Studio a la base de datos remotamente. &lt;/p&gt;  &lt;p&gt;Pero que pasa si, por alguna razón:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;No tenemos instalado SQL Management Studio &lt;/li&gt;    &lt;li&gt;Estamos en la partición Linux y hay un problema que resolver &lt;/li&gt;    &lt;li&gt;Estamos en algún cliente y sólo tenemos acceso a internet &lt;/li&gt;    &lt;li&gt;Da mucha lata levantar la virtual con las herramientas “Developer Ranger” &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Pero por suerte, si nuestro proveedor soporta &lt;a title="myLittleAdmin - A Real SQL Server Management Tool" href="http://www.mylittleadmin.com" target="_blank"&gt;myLittleAdmin&lt;/a&gt; estamos salvado. Antes de todo, &lt;strike&gt;unos screenshots&lt;/strike&gt; unas pantallas: &lt;/p&gt;  &lt;p&gt;1. Modelo de Objetos&lt;/p&gt;  &lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/09Sep/28_ObjectExplorer.JPG" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;2. Crear una tabla &lt;/p&gt;  &lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/09Sep/28_NewTable.JPG" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;3. Crear un Registro &lt;/p&gt;  &lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/09Sep/28_NewRow.JPG" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;4. Hacer un “Abrir Tabla” (Open Table) &lt;/p&gt;  &lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/09Sep/28_OpenTable.JPG" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a title="myLittleAdmin - A Real SQL Server Management Tool" href="http://www.mylittleadmin.com" target="_blank"&gt;myLittleAdmin&lt;/a&gt;, es una herramienta como SQL Management Studio pero vía Web, es como el &lt;a title="phpMyAdmin - MySql" href="http://www.phpmyadmin.net" target="_blank"&gt;phpMyAdmin&lt;/a&gt; de &lt;a title="MySql" href="http://mysql.com/" target="_blank"&gt;MySql&lt;/a&gt;. Debido al costo de licencia su mayor ventaja se da en los proveedores de hosting. Si hay dos proveedores de hosting de ASP.NET y sólo uno de ellos soporta myLittleAdmin, es altamente recomendable que seleccionen el que soporta myLittleAdmin. &lt;/p&gt;  &lt;p&gt;Enlaces &lt;a title="myLittleAdmin - A Real SQL Server Management Tool" href="http://www.mylittleadmin.com" target="_blank"&gt;myLittleAdmin&lt;/a&gt;:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="Live Demo myLittleAdmin" href="http://livedemo.mylittleadmin.com/livedemo/" target="_blank"&gt;Live Demo&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a title="Installation Guide" href="http://livedemo.mylittleadmin.com/livedemo/installation%20guide.pdf" target="_blank"&gt;Installation Guide&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a title="Quick Start Guide" href="http://livedemo.mylittleadmin.com/livedemo/quick%20start%20guide.pdf" target="_blank"&gt;Quick Start Guide&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;P.D.: No hay beneficio por recomendar esta herramienta, &lt;strike&gt;lo cual si sucediera no me enojaría&lt;/strike&gt;, es sólo que me gusto y a veces prefiero usar esta en lugar del SQL Management Studio.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=182571" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Web/default.aspx">Web</category><enclosure url="http://livedemo.mylittleadmin.com/livedemo/installation%20guide.pdf" length="155855" type="application/pdf" /><feedburner:origLink>http://geeks.ms/blogs/sergiotarrillo/archive/2010/09/28/proveedores-de-alojamiento-hosting-mylittleadmin-una-herramienta-para-sql-server-via-web.aspx</feedburner:origLink></item><item><title>Reciente vulnerabilidad de ASP.NET y BlogEngine.Net</title><link>http://feedproxy.google.com/~r/sergiotarrillo/~3/-kqQjgwfdro/reciente-vulnerabilidad-de-asp-net-y-blogengine-net.aspx</link><pubDate>Tue, 21 Sep 2010 18:26:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:182279</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=182279</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/09/21/reciente-vulnerabilidad-de-asp-net-y-blogengine-net.aspx#comments</comments><description>&lt;p&gt;Vamos a listar las noticias en orden cronol&amp;oacute;gico, para intentar entender la vulnerabilidad:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Miercoles 15-Sep, &lt;a title="Juliano Rizzo" href="http://www.ekoparty.org/juliano-rizzo-2010.php" target="_blank"&gt;Juliano Rizzo&lt;/a&gt; anunciaba a Clar&amp;iacute;n se iba a presentar una vulnerabilidad de ASP.NET durante la conferencia de seguridad &lt;a title="Ekoparty" href="http://www.ekoparty.org/" target="_blank"&gt;Ekoparty&lt;/a&gt;. Nota: &lt;a title="Uno de cada cuatro sitios web est&amp;aacute; expuesto a ciberataques" href="http://www.clarin.com/internet/cuatros-sitios-web-expuesto-ciberataques_0_335966623.html" target="_blank"&gt;Uno de cada cuatro sitios web est&amp;aacute; expuesto a ciberataques&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Jueves 16-Sep, El equipo de investigaci&amp;oacute;n, &lt;a title="Thai Duong" href="http://www.ekoparty.org/thai-duong-2010.php" target="_blank"&gt;Thai Duong&lt;/a&gt; and &lt;a title="Juliano Rizzo" href="http://www.ekoparty.org/juliano-rizzo-2010.php" target="_blank"&gt;Juliano Rizzo&lt;/a&gt;, de la vulnerabilidad p&amp;uacute;blica un video en youtube de como atacar y tomar el control total de un famoso CSM: DotNetNuke. Video: &lt;a title="POET vs ASP.NET: DotNetNuke" href="http://www.youtube.com/watch?v=yghiC_U2RaM" target="_blank"&gt;POET vs ASP.NET: DotNetNuke&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Viernes 17-Sep, El equipo presenta su investigaci&amp;oacute;n: &lt;a title="Padding Oracles Everywhere" href="http://www.ekoparty.org/cronograma.php" target="_blank"&gt;Padding Oracles Everywhere&lt;/a&gt;, en la conferencia de seguridad &lt;a title="Ekoparty" href="http://www.ekoparty.org/" target="_blank"&gt;Ekoparty&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Viernes 17-Sep, Microsoft lanza un bolet&amp;iacute;n de seguridad anunciando la vulnerabilidad de ASP.NET. Nota: &lt;a title="Microsoft Security Advisory (2416728)" href="http://www.microsoft.com/technet/security/advisory/2416728.mspx" target="_blank"&gt;Microsoft Security Advisory (2416728)&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Viernes 17-Sep, El blog oficial de Microsoft sobre Seguridad, explica los detalles sobre la vulnerabilidad. Nota: &lt;a title="Understanding the ASP.NET Vulnerability" href="http://blogs.technet.com/b/srd/archive/2010/09/17/understanding-the-asp-net-vulnerability.aspx" target="_blank"&gt;Understanding the ASP.NET Vulnerability&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Viernes 17-Sep, El blog Microsoft Security Response Center (MSRC), da la cara y dice que est&amp;aacute;n trabajando arduamente para parchar el problema. Nota: &lt;a title="Security Advisory 2416728 Released" href="http://blogs.technet.com/b/msrc/archive/2010/09/17/security-advisory-2416728-released.aspx" target="_blank"&gt;Security Advisory 2416728 Released&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;S&amp;aacute;bado 18-Sep, &lt;span style="text-decoration:line-through;"&gt;mientras tu est&amp;aacute;bas de parranda o recuperandote de la resaca del viernes&lt;/span&gt;, el gran ScottGu&amp;rsquo;s da una respuesta clara de como podemos evitar de alguna forma ser atacados explotando esta vulnerabilidad. Nota: &lt;a title="Important: ASP.NET Security Vulnerability" href="http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx" target="_blank"&gt;Important: ASP.NET Security Vulnerability&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;S&amp;aacute;bado 18-Sep, empezaron los rebotes de esta vulnerabilidad en &lt;a title="http://geeks.ms/blogs/" href="http://geeks.ms/blogs/" target="_blank"&gt;Geeks.ms&lt;/a&gt;: &lt;a title="[ASP.NET] Vulnerabilidad de Seguridad (Todas las versiones)" href="http://geeks.ms/blogs/fernandezja/archive/2010/09/18/asp-net-vulnerabilidad-de-seguridad-todas-las-versiones.aspx" target="_blank"&gt;[ASP.NET] Vulnerabilidad de Seguridad (Todas las versiones)&lt;/a&gt; y Importante!: &lt;a title="Vulnerabilidad de Seguridad detectada en ASP.NET" href="http://geeks.ms/blogs/gperez/archive/2010/09/18/importante-vulnerabilidad-de-seguridad-detectada-en-asp-net.aspx" target="_blank"&gt;Vulnerabilidad de Seguridad detectada en ASP.NET&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Domingo 19-Sep, el maestro &lt;a title="David Salgado" href="http://geeks.ms/blogs/dsalgado/default.aspx" target="_blank"&gt;David Salgado&lt;/a&gt; intenta describir y enteder la vulnerabilidad para la lengua hispana: &lt;a title="El 0 day de asp.net&amp;hellip; modo de evitarlo? y referencias" href="http://geeks.ms/blogs/dsalgado/archive/2010/09/19/el-0-day-de-asp-net-modo-de-evitarlo-y-referencias.aspx" target="_blank"&gt;El 0 day de asp.net&amp;hellip; modo de evitarlo? y referencias&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Lunes 20-Sep, ScottGu crea una FAQ sobre esta vulnerabilidad: &lt;a title="Frequently Asked Questions about the ASP.NET Security Vulnerability" href="http://weblogs.asp.net/scottgu/archive/2010/09/20/frequently-asked-questions-about-the-asp-net-security-vulnerability.aspx" target="_blank"&gt;Frequently Asked Questions about the ASP.NET Security Vulnerability&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Lunes 20-Sep, Wait&amp;hellip; SharePoint est&amp;aacute; construido sobre ASP.NET, Alberto Diaz con una entrada al respecto: &lt;a title="SharePoint 2010. Vulnerabilidad 0 days de ASP.NET" href="http://geeks.ms/blogs/adiazmartin/archive/2010/09/20/sharepoint-2010-vulnerabilidad-0-days-de-asp-net.aspx" target="_blank"&gt;SharePoint 2010. Vulnerabilidad 0 days de ASP.NET&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Lunes 20-Sep, El blog oficial de SharePoint responde a est&amp;aacute; vulnerabilidad: &lt;a title="Security Advisory 2416728 (Vulnerability in ASP.NET) and SharePoint" href="http://blogs.msdn.com/b/sharepoint/archive/2010/09/21/security-advisory-2416728-vulnerability-in-asp-net-and-sharepoint.aspx" target="_blank"&gt;Security Advisory 2416728 (Vulnerability in ASP.NET) and SharePoint&lt;/a&gt;. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Y as&amp;iacute; estamos&amp;hellip;&lt;/p&gt;
&lt;p&gt;Si no quieren leer todos los enlaces, el resumen de David Salgado sobre la vulnerabilidad:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;En resumen&lt;/b&gt;&amp;hellip; explota una vulnerabilidad relacionada con el algoritmo de cifrado que se utiliza en la autenticaci&amp;oacute;n por Forms. Va probando diferentes entradas y detectando la diferencia de respuesta de la aplicaci&amp;oacute;n para aprender y finalmente dar con una clave que da acceso.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Y si no queda claro a&amp;uacute;n, puede ver &lt;a href="http://www.youtube.com/watch?v=yghiC_U2RaM" target="_blank"&gt;el video con la demo completa&lt;/a&gt;. Y la soluci&amp;oacute;n que se tiene ahora, pasa por evitar &amp;ldquo;responder&amp;rdquo; a los intentos de usar esta vulnerabilidad. &amp;iquest;C&amp;oacute;mo?. Evitar que los atacantes obtengan informaci&amp;oacute;n usando los errores personalizados de ASP.NET (customErrors element, web.config).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;La vulnerabilidad y &lt;a title="BlogEngine" href="http://www.dotnetblogengine.net/" target="_blank"&gt;BlogEngine&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;No hay una respuesta oficial de BlogEngine, pero podemos hacer lo siguiente (para dormir tranquilos) hasta tener alguna respuesta oficial. Referencia: &lt;a title="http://jonalb.com/post/2010/09/20/AspNet-Vulnerability-and-BlogEngineNet.aspx" href="http://jonalb.com/post/2010/09/20/AspNet-Vulnerability-and-BlogEngineNet.aspx" target="_blank"&gt;The Asp.Net Vulnerability and DotNetBlogEngine.Net&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;1. Cambiar el elemento customErrors en el archivo web.config:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;customErrors&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;mode&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;RemoteOnly&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;defaultRedirect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;~/error404.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;error&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;statusCode&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;404&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;redirect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;error404.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;customErrors&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Por el siguiente:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;customErrors&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;mode&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;On&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;redirectMode&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ResponseRewrite&amp;quot;&lt;/span&gt; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;defaultRedirect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;~/fail.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2. Crear la siguiente p&amp;aacute;gina ASPX, y subirla a la carpeta root de BlogEngine:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%@ Page Language=&amp;quot;C#&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%@ Import Namespace=&amp;quot;System.Security.Cryptography&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%@ Import Namespace=&amp;quot;System.Threading&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;script&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;    void Page_Load() {&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;       byte[] delay = new byte[1];&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;       RandomNumberGenerator prng = new RNGCryptoServiceProvider();&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;       prng.GetBytes(delay);&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;       Thread.Sleep((int)delay[0]);&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;         &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;       IDisposable disposable = prng as IDisposable;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt;       if (disposable != null) { disposable.Dispose(); }&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt;     }&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt; /script&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;html&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum18"&gt;  18:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;head&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum19"&gt;  19:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;title&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;Error&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;title&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum20"&gt;  20:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;head&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum21"&gt;  21:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;body&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum22"&gt;  22:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum23"&gt;  23:&lt;/span&gt;         An error occurred while processing your request.&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum24"&gt;  24:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum25"&gt;  25:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;body&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum26"&gt;  26:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;html&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;A estar pendientes en estos d&amp;iacute;as, para ver que pasa con esta vulnerabilidad.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=182279" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Seguridad/default.aspx">Seguridad</category><feedburner:origLink>http://geeks.ms/blogs/sergiotarrillo/archive/2010/09/21/reciente-vulnerabilidad-de-asp-net-y-blogengine-net.aspx</feedburner:origLink></item><item><title>[Ejemplo] Usando la API Apache Log4Net</title><link>http://feedproxy.google.com/~r/sergiotarrillo/~3/RRzVg9Q5LjQ/ejemplo-usando-la-api-apache-log4net.aspx</link><pubDate>Thu, 16 Sep 2010 21:09:48 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:182056</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=182056</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/09/16/ejemplo-usando-la-api-apache-log4net.aspx#comments</comments><description>&lt;p&gt;Estaba dando mantenimiento a un proyecto que fue desarrollado con Java (Struts), y en el&amp;#160; código vi el uso de la API &lt;a title="Apache Logging Services" href="http://logging.apache.org/" target="_blank"&gt;Apache Logging Services&lt;/a&gt;, puntualmente &lt;a title="Apache log4j" href="http://logging.apache.org/log4j/index.html" target="_blank"&gt;log4j&lt;/a&gt;, para registrar información de rastreo en un archivo. &lt;/p&gt;  &lt;p&gt;Pero también hay una versión .Net de esta API: &lt;a title="Apache Log4net" href="http://logging.apache.org/log4net/index.html" target="_blank"&gt;Log4net&lt;/a&gt;. Existen muchos otras APIs similares, hay para todos los gustos y colores. En esta entada mostraremos como usar la mencionada API: &lt;/p&gt;  &lt;p&gt;Después de descargar &lt;a title="Apache Log4net" href="http://logging.apache.org/log4net/index.html" target="_blank"&gt;Log4Net&lt;/a&gt;, y extraer el contenido hacemos lo siguiente:&lt;/p&gt;  &lt;p&gt;1. Agregamos la referencia a nuestro proyecto (VS2005, VS2008, VS2010):&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img src="http://sergiot2.com/blogimages/2010/09Sep/16_Log4Net_Apache_API.JPG" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;2. Configuramos que tipo de proveedor vamos a usar para guardar la información, puede ser un archivo de texto, SQL Server, Oracle, enviar emails, entre otros. Son dos partes principales: la declaración de la sección, y la definición de la sección misma. Si queremos agregar proveedores usamos el elemento appender:&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#800000;"&gt;xml&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;version&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt;?&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;configuration&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;configSections&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;section&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;log4net&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;              &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;log4net.Config.Log4NetConfigurationSectionHandler,log4net&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;    &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;configSections&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;log4net&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;  &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;root&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;level&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ALL&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;appender-ref&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ref&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;AdoNetAppender&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;root&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;appender&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;FileAppender&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;log4net.appender.FileAppender&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;...&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;appender&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;appender&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;AdoNetAppender&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt;         &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;log4net.Appender.AdoNetAppender&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;...&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;appender&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;    &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;log4net&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;  &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;configuration&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;3. Escribimos el código para guardar los mensajes:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Program&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt;   {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; ConfigureLog()&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;       &lt;span style="color:#008000;"&gt;//Configurar Log, de acuerdo a la archivo app.config&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;       log4net.Config.XmlConfigurator.Configure();          &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;     }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Main(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] args)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;     {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;       &lt;span style="color:#008000;"&gt;//SET UP, Configure Log&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;       ConfigureLog();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt;       log4net.ILog logger = log4net.LogManager.GetLogger(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(Program));&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt;       logger.Debug(&lt;span style="color:#006080;"&gt;&amp;quot;Here is a debug log.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum18"&gt;  18:&lt;/span&gt;       logger.Info(&lt;span style="color:#006080;"&gt;&amp;quot;... and an Info log.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum19"&gt;  19:&lt;/span&gt;       logger.Warn(&lt;span style="color:#006080;"&gt;&amp;quot;... and a warning.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum20"&gt;  20:&lt;/span&gt;       logger.Error(&lt;span style="color:#006080;"&gt;&amp;quot;... and an error.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum21"&gt;  21:&lt;/span&gt;       logger.Fatal(&lt;span style="color:#006080;"&gt;&amp;quot;... and a fatal error.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum22"&gt;  22:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum23"&gt;  23:&lt;/span&gt;       Console.WriteLine(&lt;span style="color:#006080;"&gt;&amp;quot;END --- PRESS ENTER&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum24"&gt;  24:&lt;/span&gt;       Console.ReadLine();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum25"&gt;  25:&lt;/span&gt;     }    &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum26"&gt;  26:&lt;/span&gt;   }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;4. Log en archivo de texto: , Log en Base de datos:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/09Sep/16_Log4Net_FileAppender.JPG" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;img src="http://sergiot2.com/blogimages/2010/09Sep/16_Log4Net_AdoNetAppender.JPG" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;Nota: Para el tipo FileAppender, podemos establecer el patrón de como se guardará la información: &lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;appender&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;FileAppender&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;log4net.appender.FileAppender&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;param&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;File&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C:\temp\miPrimerLog4Net.txt&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;param&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;AppendToFile&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;layout&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;log4net.Layout.PatternLayout&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;param&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ConversionPattern&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;%d [%t] %-2p %c [%x] - %m%n&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;layout&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;appender&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;¿Ustedes qué usan para el Logging, alguna API pública o tienen sus propias clases?&lt;/p&gt;

&lt;p&gt;Enlaces relacionados:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a title="Using log4net" href="http://ondotnet.com/pub/a/dotnet/2003/06/16/log4net.html?page=1" target="_blank"&gt;Using log4net&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a title="Log4Net with ASP.NET 3.5 – File Appender" href="http://www.codeproject.com/KB/trace/Log4Net_with_ASP_NET.aspx" target="_blank"&gt;Log4Net with ASP.NET 3.5 – File Appender&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a title="A Brief Introduction to the log4net logging library, using C#" href="http://www.codeproject.com/KB/trace/log4net_intro.aspx" target="_blank"&gt;A Brief Introduction to the log4net logging library, using C#&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a title="Quick and Dirty Guide to Configuring Log4Net For Web Applications" href="http://haacked.com/archive/2005/03/07/ConfiguringLog4NetForWebApplications.aspx" target="_blank"&gt;Quick and Dirty Guide to Configuring Log4Net For Web Applications&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a title="4 Tips for using Log4NET&amp;#39;s ADONetAppender in ASP.NET" href="http://weblogs.asp.net/drnetjes/archive/2005/02/16/374780.aspx" target="_blank"&gt;4 Tips for using Log4NET&amp;#39;s ADONetAppender in ASP.NET&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a title="Using the log4net AdoNetAppender to log to a bit(boolean) column" href="http://haan.tweakblogs.net/blog/4385/using-the-log4net-adonetappender-to-log-to-a-bit%28boolean%29-column.html" target="_blank"&gt;Using the log4net AdoNetAppender to log to a bit(boolean) column&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a title="Can you pull the connectionString for a log4net AdoNetAppender from elsewhere in a web.config file?" href="http://stackoverflow.com/questions/2441359/can-you-pull-the-connectionstring-for-a-log4net-adonetappender-from-elsewhere-in" target="_blank"&gt;Can you pull the connectionString for a log4net AdoNetAppender from elsewhere in a web.config file?&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=182056" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/.NET/default.aspx">.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/APIs/default.aspx">APIs</category><feedburner:origLink>http://geeks.ms/blogs/sergiotarrillo/archive/2010/09/16/ejemplo-usando-la-api-apache-log4net.aspx</feedburner:origLink></item><item><title>ScrumPeak (y una chiquita sobre ASP.NET MVC en IIS)</title><link>http://feedproxy.google.com/~r/sergiotarrillo/~3/IE2tqa9YWP0/scrumpeak-y-una-chiquita-sobre-asp-net-mvc-en-iis.aspx</link><pubDate>Tue, 07 Sep 2010 21:56:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:181604</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=181604</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/09/07/scrumpeak-y-una-chiquita-sobre-asp-net-mvc-en-iis.aspx#comments</comments><description>&lt;p&gt;Como no andamos con mucho tiempo, vamos a hacer breves: &lt;/p&gt;
&lt;p&gt;&lt;a title="ScrumPeak" href="http://scrumpeak.codeplex.com/" target="_blank"&gt;ScrumPeak&lt;/a&gt;, es una Aplicaci&amp;oacute;n Web para el seguimiento de proyectos con la caracter&amp;iacute;stica que soporta &lt;a title="Scrum on Geeks.ms" href="http://geeks.ms/search/SearchResults.aspx?q=Scrum" target="_blank"&gt;Scrum&lt;/a&gt;. Para que tengan una idea de lo que se puede hacer con la web, dejo la siguiente pantalla: &lt;/p&gt;
&lt;p&gt;&lt;img alt="http://sergiot2.com/blogimages/2010/09Sep/07_ScrumPeak.JPG" src="http://sergiot2.com/blogimages/2010/09Sep/07_ScrumPeak.JPG" /&gt;&lt;/p&gt;
&lt;p&gt;Por otro lado, la aplicaci&amp;oacute;n Web fue desarrollada con ASP.NET MVC, y si est&amp;aacute;n en una versi&amp;oacute;n de Windows que no tiene IIS 7 en modo Integrado, deben seguir algunos pasos adicionales para permitir la ejecuci&amp;oacute;n de la Web. &lt;/p&gt;
&lt;p&gt;En este caso de &lt;a title="ScrumPeak" href="http://scrumpeak.codeplex.com/" target="_blank"&gt;ScrumPeak&lt;/a&gt;, como no disponemos del c&amp;oacute;digo fuente, la mejor opci&amp;oacute;n ser&amp;iacute;a habilitar que el mapeo todas las solicitudes del usuario sean hecho por asp.net, para lo cual, hacemos lo siguiente: &lt;/p&gt;
&lt;p&gt;&lt;img alt="http://sergiot2.com/blogimages/2010/09Sep/07_ASP.NET_MVC_IIS_XP.JPG" src="http://sergiot2.com/blogimages/2010/09Sep/07_ASP.NET_MVC_IIS_XP.JPG" /&gt;&lt;/p&gt;
&lt;p&gt;Esta opci&amp;oacute;n de habilitar el mapeo en el IIS no es recomendable porque afecta el rendmiento de la aplicaci&amp;oacute;n. Asumiendo que el portal ser&amp;aacute; para uso interno, de equipos peque&amp;ntilde;os y estar&amp;aacute; en el servidor de desarrollo, no debemos notar esto. En una Aplicaci&amp;oacute;n Web para toda la internet, esta decisi&amp;oacute;n no debe ser la primera. &lt;/p&gt;
&lt;p&gt;Algunos enlaces relacionados:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="Explicando Scrum a mi abuela" href="http://geeks.ms/blogs/jorge/archive/2007/05/09/explicando-scrum-a-mi-abuela.aspx" target="_blank"&gt;Explicando Scrum a mi abuela&lt;/a&gt; by &lt;a title="Jorge Serrano - MVP Visual Developer - Visual Basic" href="http://geeks.ms/blogs/jorge/default.aspx" target="_blank"&gt;Jorge Serrano&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.proyectalis.com/2008/02/26/scrum-y-xp-desde-las-trincheras/"&gt;Scrum y XP desde las trincheras&lt;/a&gt; (&lt;a title="Scrum y XP desde las trincheras" href="http://www.proyectalis.com/wp-content/uploads/2008/02/scrum-y-xp-desde-las-trincheras.pdf" target="_blank"&gt;PDF file&lt;/a&gt;) - &lt;a title="proyectalis" href="http://www.proyectalis.com" target="_blank"&gt;proyectalis&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Scrum on Geeks.ms" href="http://geeks.ms/search/SearchResults.aspx?q=Scrum" target="_blank"&gt;Scrum on Geeks.ms&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Using ASP.NET MVC with Different Versions of IIS" href="http://www.asp.net/mvc/tutorials/using-asp-net-mvc-with-different-versions-of-iis-cs" target="_blank"&gt;Using ASP.NET MVC with Different Versions of IIS&lt;/a&gt; - &lt;a title="ASP.NET MVC Team" href="http://www.asp.net/mvc" target="_blank"&gt;ASP.NET MVC Team&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Deploying ASP.NET MVC to IIS 6" href="http://blog.stevensanderson.com/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/" target="_blank"&gt;Deploying ASP.NET MVC to IIS 6&lt;/a&gt; by &lt;a href="http://blog.stevensanderson.com/"&gt;Steve Sanderson&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://itscommonsensestupid.blogspot.com/2008/11/deploy-aspnet-mvc-app-on-windows-xp-iis.html"&gt;Deploy ASP.NET MVC App on Windows XP (IIS 5.1)&lt;/a&gt; by &lt;a title="Ngu Soon ***" href="http://itscommonsensestupid.blogspot.com/" target="_blank"&gt;Ngu Soon ***&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=181604" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/IIS/default.aspx">IIS</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Samples+WebSite/default.aspx">Samples WebSite</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/MVC/default.aspx">MVC</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Scrum/default.aspx">Scrum</category><enclosure url="http://www.proyectalis.com/wp-content/uploads/2008/02/scrum-y-xp-desde-las-trincheras.pdf" length="4141291" type="application/pdf" /><feedburner:origLink>http://geeks.ms/blogs/sergiotarrillo/archive/2010/09/07/scrumpeak-y-una-chiquita-sobre-asp-net-mvc-en-iis.aspx</feedburner:origLink></item><item><title>[WebForms] Todavía no usas el ObjectDataSource?</title><link>http://feedproxy.google.com/~r/sergiotarrillo/~3/7DLAmdTxjCk/webforms-todav-237-a-no-usas-el-objectdatasource.aspx</link><pubDate>Fri, 16 Jul 2010 18:12:01 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:179457</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>7</slash:comments><wfw:commentRss>http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=179457</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/07/16/webforms-todav-237-a-no-usas-el-objectdatasource.aspx#comments</comments><description>&lt;p&gt;Este es el intento N, de enviar un post de introducción al &lt;strong&gt;ObjectDataSource&lt;/strong&gt;. Muchos post extensos se han quedado en el draft, veremos si este ve la luz. &lt;/p&gt;  &lt;p&gt;ASP.NET disponible de varios controles para mostrar datos: GridView, ListView, DataList, Repeater, el mismo FormView. En cuanto controles para el artículo vamos a usar el GridView y el FormView. Veamos algunos ejemplos y al final intentamos definir al ObjectDataSource.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Mostrando datos&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;La forma tradicional, es el clásico: &lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//enlazar gridView&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; grdCategories.DataSource = blCatManager.GetAll();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; grdCategories.DataBind(); &lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Con el ObjectDataSource no hago nada y todo es declarativo: &lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:GridView&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;grdCategories&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt;        &lt;span style="color:#ff0000;"&gt;AutoGenerateColumns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;DataKeyNames&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CategoryID&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;DataSourceID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;odsCategorias&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Columns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#008000;"&gt;&amp;lt;!-- Aqui Columnas --&amp;gt;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Columns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:GridView&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:ObjectDataSource&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;odsCategorias&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;OldValuesParameterFormatString&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;original_{0}&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;SelectMethod&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;getAll&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;TypeName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CategoryManager&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:ObjectDataSource&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Este código no hay que aprenderlo de memoria, lo puede generar el asistente. Para grandes cantidades de información debemos usar paginación personalizada, el control GridView + ObjectDataSource, soportan esto de manera transparente, sólo hay que agregar un método count y mapearlo. Revisar más detalles en el siguiente artículo: &lt;a title="Paginando Eficientemente en ASP.NET" href="http://geeks.ms/blogs/gperez/archive/2009/03/02/paginando-eficientemente-en-asp-net.aspx"&gt;Paginando Eficientemente en ASP.NET&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ingreso de datos&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Creo que este es el fuerte de los ObjectDataSource y una de las cosas por la cual lo uso en todos los proyectos de ASP.NET en que participo. Cuando he tenido la oportunidad de integrar nuevos equipos de desarrollo o visitar a algunos, muchos todavía siguen con el clásico recuperar/asignar el contenido de las cajas de texto de uno a uno, muchas veces por el desconocimiento de la existencia del control ObjectDataSource. Después de unas demos con el ObjectDataSource, también terminan adoptándolo, salvo algunos casos en que resisten al cambio, y trabajar con mas orden o porque tienen el famoso código: “mírame y no me toques”. &lt;strike&gt;si ese código donde si cambias un C= A + B, a C = B + A, la aplicación completa deja de funcionar&lt;/strike&gt;.&lt;/p&gt;

&lt;p&gt;Si quiere cargar el detalle de un registro en un formulario que tengo que hacer: &lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//asignar información de objetos a las cajas de texto&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; CategoryNameTextBox.Text = objItem.CategoryName; &lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Y por el contrario si quiero recuperar el objeto para guardarlo en la base de datos, lo primero que debo hacer es recuperarlo de la caja de texto: &lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//recuperar la información de las cajas de texto, para guardarlas en un objeto&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; objItem.CategoryName = CategoryNameTextBox.Text; &lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Un control FormView + ObjectDataSource, hace esto por ti, y todo de manera declarativa: &lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:FormView&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;frvDetCategoria&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;DataKeyNames&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CategoryID&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;DataSourceID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;odsCatDetails&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;EditItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;        CategoryID:&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:Label&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CategoryIDLabel1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;#39;&amp;lt;%# Eval(&amp;quot;CategoryID&amp;quot;) %&amp;gt;&amp;#39;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;br&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;        CategoryName:&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:TextBox&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CategoryNameTextBox&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;#39;&amp;lt;%# Bind(&amp;quot;CategoryName&amp;quot;) %&amp;gt;&amp;#39;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;br&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;        CategoryDescription:&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:TextBox&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CategoryDescriptionTextBox&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;#39;&amp;lt;%# Bind(&amp;quot;CategoryDescription&amp;quot;) %&amp;gt;&amp;#39;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;br&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:LinkButton&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;UpdateButton&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum18"&gt;  18:&lt;/span&gt;           &lt;span style="color:#ff0000;"&gt;CausesValidation&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum19"&gt;  19:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;CommandName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Update&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Actualizar&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum20"&gt;  20:&lt;/span&gt;        &lt;span style="color:#ff0000;"&gt;&amp;amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:LinkButton&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;UpdateCancelButton&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum21"&gt;  21:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;CausesValidation&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum22"&gt;  22:&lt;/span&gt;           &lt;span style="color:#ff0000;"&gt;CommandName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Cancel&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Cancelar&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum23"&gt;  23:&lt;/span&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;EditItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum24"&gt;  24:&lt;/span&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;InsertItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;&lt;span style="color:#800000;"&gt;--&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;El&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;formulario&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;insert&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;puede&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum25"&gt;  25:&lt;/span&gt;             &lt;span style="color:#ff0000;"&gt;ser&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;distinto&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;por&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ya&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;no&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;se&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum26"&gt;  26:&lt;/span&gt;              &lt;span style="color:#ff0000;"&gt;actualiza&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;los&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;campos&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;claves&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;--&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;InsertItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum27"&gt;  27:&lt;/span&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;&lt;span style="color:#800000;"&gt;--&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Informacion&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;solo&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;lectura&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;--&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum28"&gt;  28:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:FormView&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum29"&gt;  29:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:ObjectDataSource&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;odsCatDetails&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum30"&gt;  30:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;DataObjectTypeName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Category&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;DeleteMethod&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Delete&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum31"&gt;  31:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;InsertMethod&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Insert&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum32"&gt;  32:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;OldValuesParameterFormatString&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;original_{0}&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum33"&gt;  33:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;SelectMethod&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;getOneByID&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum34"&gt;  34:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;TypeName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CategoryManager&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;UpdateMethod&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Update&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum35"&gt;  35:&lt;/span&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;SelectParameters&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum36"&gt;  36:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:ControlParameter&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ControlID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;grdCategories&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum37"&gt;  37:&lt;/span&gt;           &lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;categoryID&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum38"&gt;  38:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;PropertyName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;SelectedValue&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Int32&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum39"&gt;  39:&lt;/span&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;SelectParameters&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum40"&gt;  40:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:ObjectDataSource&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Con el control FormView se puede hacer prácticamente todo tipo de mantenimiento, se puede poner combos dentro de el y además que esté enlazados a base de datos a través de otro control ObjectDataSource. Podemos decir que el &lt;strong&gt;ObjectDataSource&lt;/strong&gt; es un motorcito que permite mapear automáticamente controles de datos (tanto para mostrar como para recuperar) con clases y objetos. Imaginen un formulario de 20 campos y tener que asignar/recuperar uno por uno. Con el ObjectDataSource no es nada.&lt;/p&gt;

&lt;p&gt;Para terminar, si están desarrollando en ASP.NET con WebForms, los animo a intentar usar el FormView + ObjectDataSource en los escenarios de mantenimiento que tengan, y si tienen alguna duda, puede dejar sus comentarios y vemos como los ayudamos. En base a las preguntas que tengan, podemos hacer ejemplos más elaborados y más puntuales.&lt;/p&gt;

&lt;p&gt;Pueden descargar la aplicación ejemplo aquí: &lt;a title="CRUD usando ObjectDataSource" href="http://geeks.ms/media/p/179456.aspx" target="_blank"&gt;CRUD usando ObjectDataSource&lt;/a&gt;. (completar los acceso a datos del Insert, Update, Delete).&lt;/p&gt;

&lt;p&gt;Página en el navegador:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/07Jul/16_ObjectDataSource_FormView.JPG" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;El código que tiene la página aspx es:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//pagina ASPX&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; wfCategories : System.Web.UI.Page&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt; {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;     {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;     }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;La clase que use para el &lt;strong&gt;ObjectDataSource&lt;/strong&gt; es la siguiente:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//CategoryManager&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.ComponentModel;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt; [DataObject]&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; CategoryManager&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt; {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;   &lt;span style="color:#cc6633;"&gt;#region&lt;/span&gt; GetAll, getOne&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;   [DataObjectMethod(DataObjectMethodType.Select, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; List&amp;lt;Category&amp;gt; getAll()&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt;   {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt;     CategoryRepository catRep = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; CategoryRepository();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; catRep.getAll();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum18"&gt;  18:&lt;/span&gt;   }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum19"&gt;  19:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum20"&gt;  20:&lt;/span&gt;   [DataObjectMethod(DataObjectMethodType.Select, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;)]&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum21"&gt;  21:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Category getOneByID(Int32 categoryID)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum22"&gt;  22:&lt;/span&gt;   {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum23"&gt;  23:&lt;/span&gt;     CategoryRepository catRep = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; CategoryRepository();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum24"&gt;  24:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; catRep.getOneByID(categoryID);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum25"&gt;  25:&lt;/span&gt;   }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum26"&gt;  26:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum27"&gt;  27:&lt;/span&gt;   &lt;span style="color:#cc6633;"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum28"&gt;  28:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum29"&gt;  29:&lt;/span&gt;   &lt;span style="color:#cc6633;"&gt;#region&lt;/span&gt; Insert, Update, Delete&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum30"&gt;  30:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum31"&gt;  31:&lt;/span&gt;   [DataObjectMethod(DataObjectMethodType.Insert,&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum32"&gt;  32:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Insert(Category objItem)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum33"&gt;  33:&lt;/span&gt;   {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum34"&gt;  34:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//pendiente de implementacion&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum35"&gt;  35:&lt;/span&gt;   }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum36"&gt;  36:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum37"&gt;  37:&lt;/span&gt;   [DataObjectMethod(DataObjectMethodType.Update, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum38"&gt;  38:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Update(Category objItem)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum39"&gt;  39:&lt;/span&gt;   {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum40"&gt;  40:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//pendiente de implementacion&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum41"&gt;  41:&lt;/span&gt;   }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum42"&gt;  42:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum43"&gt;  43:&lt;/span&gt;   [DataObjectMethod(DataObjectMethodType.Delete, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum44"&gt;  44:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Delete(Category objItem)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum45"&gt;  45:&lt;/span&gt;   {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum46"&gt;  46:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//pendiente de implementacion&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum47"&gt;  47:&lt;/span&gt;   }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum48"&gt;  48:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum49"&gt;  49:&lt;/span&gt;   &lt;span style="color:#cc6633;"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum50"&gt;  50:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum51"&gt;  51:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=179457" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ObjectDataSource/default.aspx">ObjectDataSource</category><feedburner:origLink>http://geeks.ms/blogs/sergiotarrillo/archive/2010/07/16/webforms-todav-237-a-no-usas-el-objectdatasource.aspx</feedburner:origLink></item><item><title>RAD con Oracle Application Express 4.0</title><link>http://feedproxy.google.com/~r/sergiotarrillo/~3/njymZ8OQqio/rad-con-oracle-application-express-4-0.aspx</link><pubDate>Mon, 12 Jul 2010 15:44:56 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:179269</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=179269</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/07/12/rad-con-oracle-application-express-4-0.aspx#comments</comments><description>&lt;p&gt;Si han tenido la oportunidad de descargar &lt;a title="Oracle Express Edition" href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CBQQFjAA&amp;amp;url=http%3A%2F%2Fwww.oracle.com%2Ftechnology%2Fxe&amp;amp;ei=dC87TKfIO8OBlAfvjeHSBw&amp;amp;usg=AFQjCNEpOIBPtV38qn4PFBagQdNE1QVPLQ&amp;amp;sig2=yTPDhMHewAoXV9SzGdz8gg"&gt;Oracle Express Edition&lt;/a&gt;, se han podido percatar&amp;#160; que la herramienta de consulta (QueryAnalyzer o Sql Management Tool) era una interface Web, que además de poder hacer de consultas a las tablas, te permitía crear formularios, reportes, aplicaciones, entre otros, al estilo de lo que se puede hacer con una base de datos Access, esa Web es &lt;strong&gt;Oracle Application Express&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Parece que ya no es suficiente con tener versiones Express (Sql Express Edition y Oracle Express Edition), ahora veremos quien avanza más en el terreno de “algo mas”, que en este caso Oracle le lleva ventaja con el Oracle Application Express. &lt;/p&gt;  &lt;p&gt;¿Se pueden hacer aplicaciones “serias” con este tipo de herramientas? Con MS Access he visto aplicaciones “serias” estilo ERP, claro con su limitantes, pero en producción y funcionando al fin y al cabo. ¿Imaginen poder hacer lo mismo, pero atrás una base de datos como SQL Server o Oracle?&lt;/p&gt;  &lt;p&gt;Recientemente se ha liberado Oracle Application Express 4.0, pueden hacer una evaluación gratuita (crear base de datos, y crear aplicaciones de ejemplo) sin la necesidad de instalar Oracle, usando: &lt;b&gt;&lt;a title="apex.oracle.com" href="http://apex.oracle.com/i/index.html"&gt;apex.oracle.com&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;Nuevas funcionalidades de Oracle Application Express 4.0 [&lt;a title="New Features in Release 4.0" href="http://www.oracle.com/technology/products/database/application_express/html/4.0_new_features.html"&gt;…&lt;/a&gt;] (en ingles &lt;strike&gt;para no atarantar con la traducción&lt;/strike&gt;):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Websheets&lt;/strong&gt;, is a quick and easy way to get content on the web.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Dynamic Actions&lt;/strong&gt;, Users are demanding more user interactivity and client-side functionality whereby the application responds as soon as a value is changed or the user leaves a field.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Plug-Ins&lt;/strong&gt;, allow for the Application Express framework to be readily extended with custom item types, region types, application processes and Dynamic Actions.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Team Development&lt;/strong&gt;, is designed to manage software development.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Improved Charting with Gantts and Maps&lt;/strong&gt;, the underlying charting engine has been upgraded to AnyChart 5.1 which is faster, provides better graphics, and decreases rendering time.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;RESTful Web Services Support&lt;/strong&gt;, are becoming more common, especially amongst public Web service providers, as an alternative to SOAP Web Services.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Enhanced Interactive Reports&lt;/strong&gt;, Available since Application Express 3.1, Interactive Reports take much of the burden off developers to produce all the different online reports end-users want by allowing end-users to manipulate the data provided for themselves.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Improved Application Builder&lt;/strong&gt;, has undergone a large overhaul designed to improve navigation and make it faster and easier for developers to create, maintain and enhance Oracle Application Express applications.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Better Themes&lt;/strong&gt;, Application Express provides 20 themes.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;APEX Listener&lt;/strong&gt;, is a new Java based listener that can run on a J2EE based Web Server, such as Oracle WebLogic Server or OC4J.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Les recomiendo crearse una cuenta, y ver pueden hacer ustedes con esta herramienta, o también para tomar prestada alguna funcionalidad. En mi caso acabo de crear un cuenta, y una opción interesante para crear una tabla (con mantenimiento incluido) es importando información de hoja de calculo:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/07Jul/12_APEX.JPG" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Y he aquí mi mantenimiento:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/07Jul/12_ApexSample.JPG" width="705" height="652" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Además también hay una aplicación ejemplo para poder el poder de esta herramienta:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/07Jul/12_Apex_Sample_01.JPG" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/07Jul/12_Apex_Sample_02.JPG" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=179269" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Oracle/default.aspx">Oracle</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/RAD/default.aspx">RAD</category><feedburner:origLink>http://geeks.ms/blogs/sergiotarrillo/archive/2010/07/12/rad-con-oracle-application-express-4-0.aspx</feedburner:origLink></item><item><title>Publicando Aplicaciones Web Sobre IIS: Web Site, Virtual Directory, y Application</title><link>http://feedproxy.google.com/~r/sergiotarrillo/~3/PNvavJDmVjM/publicando-aplicaciones-web-sobre-iis-web-site-virtual-directory-y-application.aspx</link><pubDate>Thu, 03 Jun 2010 03:08:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:177593</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=177593</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/06/02/publicando-aplicaciones-web-sobre-iis-web-site-virtual-directory-y-application.aspx#comments</comments><description>&lt;p&gt;Esta entrada gira alrededor de IIS 6.0, pero los conceptos tambi&amp;eacute;n se pueden aplicar a IIS 7.0. &lt;/p&gt;
&lt;p&gt;Hay un error muy conocido cuando publicamos una aplicaci&amp;oacute;n ASP.NET a IIS: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;i&gt;It is an error to use a section registered as allowDefinition=&amp;#39;MachineToApplication&amp;#39; beyond application level.&amp;nbsp; This error can be caused by a virtual directory not being configured as an application in IIS. &lt;/i&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Si deseamos publicar una aplicaci&amp;oacute;n Web ASP.NET sobre IIS 6.0 en Windows Server 2003, debes poder diferenciar tres conceptos: Web Site, Virtual Directory, y Application. Estos t&amp;eacute;rminos no los traducir&amp;eacute; en los siguientes p&amp;aacute;rrafos, para no generar confusi&amp;oacute;n en la definici&amp;oacute;n de los mismos. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Web Site&lt;/b&gt;: Es la ruta base de una aplicaci&amp;oacute;n Web, y que se corresponde con un nombre de dominio o una ip de red: &lt;a href="http://sergiot2.com"&gt;http://sergiot2.com&lt;/a&gt;, o &lt;a href="http://servidorInformes"&gt;http://servidorInformes&lt;/a&gt;. Por ejemplo, si estamos desarrollando un portal de reportes, y despu&amp;eacute;s de publicar nuestra aplicaci&amp;oacute;n tenemos que acceder as&amp;iacute;: &lt;a href="http://serv2010/Reportes/"&gt;http://serv2010/Reportes/&lt;/a&gt;, es por que no la hemos publicado a nivel de Web Site. Si la publicamos a nivel de Web Site, debemos poder acceder a la aplicaci&amp;oacute;n s&amp;oacute;lo ingresando la ruta: &lt;a href="http://serv2010/"&gt;http://serv2010/&lt;/a&gt;. Mas claro el concepto de Web Site? &lt;/p&gt;
&lt;p&gt;En IIS podemos tener m&amp;uacute;ltiples Web Sites, y que b&amp;aacute;sicamente se pueden diferenciar por el puerto usado y la carpeta. Por ejemplo, cuando se instala IIS crea un Default Web Site, que apunta a: C:\inetpub\wwwroot\, y apunta al puerto 80. Cuando instalamos SharePoint, este crear varios Web Site, que usan otros puertos, dependiendo de la configuraci&amp;oacute;n seleccionada. Otro es caso en la instalaci&amp;oacute;n de Reporting Services, que por defecto se instala s&amp;oacute;lo como un Application dentro de un Web Site. &lt;/p&gt;
&lt;p&gt;&lt;img title="Web Site - sergiot2.com" alt="Web Site - sergiot2.com" src="http://sergiot2.com/blogimages/2010/06Jun/02_WebSites_sergiot2.com.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Virtual Directory&lt;/b&gt;: Un &amp;ldquo;directorio virtual&amp;rdquo; sirve para mapear una subdirecci&amp;oacute;n de un Web Site a otra carpeta. Imaginen que un Web Site de venta de autos, &lt;a href="http://crediAutos.com/"&gt;http://crediAutos.com/&lt;/a&gt; alojado en &amp;ldquo;C:\inetpub\wwwroot\&amp;rdquo;, que desea usar las im&amp;aacute;genes que est&amp;aacute;n en otro disco duro: &amp;ldquo;F:\imageAutos&amp;rdquo;, si deseamos cargar las im&amp;aacute;genes en la siguiente ruta: &lt;a href="http://crediAutos.com/images"&gt;http://crediAutos.com/images&lt;/a&gt; sin mover los archivos f&amp;iacute;sicos, es ah&amp;iacute; cuando podemos crear un Virtual Directory dentro del Web Site. Veamos la configuraci&amp;oacute;n del siguiente ejemplo: &lt;/p&gt;
&lt;p&gt;&lt;img title="Web Site Configuraton - Sergiot2.com" alt="Web Site Configuraton - Sergiot2.com" src="http://sergiot2.com/blogimages/2010/06Jun/02_VirtualDirectory_sergiot2.com.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Y si lo vemos en el navegador: &lt;/p&gt;
&lt;p&gt;&lt;img title="Web Site Sample - sergiot2.com" alt="Web Site Sample - sergiot2.com" src="http://sergiot2.com/blogimages/2010/06Jun/02_VirtualDirectory_test.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Si colocamos p&amp;aacute;ginas aspx dentro de un Virtual Directory, funcionar&amp;aacute; siempre y cuando y no tenga un archivo web.config con elementos de aplicaci&amp;oacute;n, por llamarlo as&amp;iacute;. Por ejemplo dentro de un Virtual Directory, que es un sub-directorio de nuestro Web Site, podemos colocar un archivo web.config con el elemento &lt;b&gt;&lt;a title="Authorization Element - ASP.NET" href="http://msdn.microsoft.com/en-us/library/8d82143t.aspx" target="_blank"&gt;authorization&lt;/a&gt;&lt;/b&gt;, como se menciona &lt;a href="http://geeks.ms/blogs/ivan/archive/2007/02/08/es-incorrecto-utilizar-una-secci-n-registrada-como-allowdefinition-machinetoapplication-mas-all-del-nivel-de-aplicaci-n.aspx" target="_blank"&gt;en esta entrada&lt;/a&gt;. Pero no podemos colocar un elemento &lt;a title="Authentication Elemento - ASP.NET" href="http://msdn.microsoft.com/en-us/library/532aee0e.aspx" target="_blank"&gt;Authentication&lt;/a&gt; dentro de un web.config de un Virtual Directoty, debido a que este elemento s&amp;oacute;lo se permite a nivel de aplicaci&amp;oacute;n. De ah&amp;iacute; el problema origen. &lt;/p&gt;
&lt;p&gt;Si queremos que nuestro Virtual Directory se comporte como una aplicaci&amp;oacute;n aparte, es decir tenga un web.config con el elemento Authentication, para poder manejar su propia autenticaci&amp;oacute;n distinta al Web Site base, debemos convertir este Virtual Directory en un ASP.NET Application. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Application&lt;/b&gt;: Tambi&amp;eacute;n podemos llamarlo ASP.NET Application, y se crea de la misma forma que un Virtual Directory, pero con la diferencia de que si puede comportarse como una aplicaci&amp;oacute;n ASP.NET independiente, es decir puede tener su propio Application Pool, puede tener su propia versi&amp;oacute;n de ASP.NET y el web.config permite elementos de aplicaci&amp;oacute;n como el famoso Authentication del error inicial. Se pueden crear varios ASP.NET Applications dentro de un Web Site, como se muestra en la siguiente figura: &lt;/p&gt;
&lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/06Jun/02_Applications_aspnet_sergiot2.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Caso de la Vida Real&lt;/b&gt;: Un amigo X ten&amp;iacute;a el problema mencionado al inicio, cuando publico su aplicaci&amp;oacute;n ASP.NET en el hosting de otro amigo due&amp;ntilde;o, por cierto el hosting en menci&amp;oacute;n es &lt;a title="dattatec.com - Su hosting hecho simple" href="http://www.dattatec.com" target="_blank"&gt;dattatec.com&lt;/a&gt;. Digamos que el due&amp;ntilde;o del hosting ten&amp;iacute;a su aplicaci&amp;oacute;n ASP.NET a nivel del Web Site del IIS, es decir: &lt;a href="http://todoautos.com.pe"&gt;http://todoautos.com.pe&lt;/a&gt;, el amigo del due&amp;ntilde;o ten&amp;iacute;a una aplicaci&amp;oacute;n ASP.NET que quer&amp;iacute;a probar, entonces publico su aplicaci&amp;oacute;n como un subdirectorio para no afectar la aplicaci&amp;oacute;n del due&amp;ntilde;o. Pero no funcionaba ninguna aspx, debido al error mencionado arriba. Dentro del panel de control de dattatec (dentro de lo que pude revisar a simple vista) s&amp;oacute;lo se pod&amp;iacute;a convertir la carpeta del amigo invitado en un Virtual Directory, pero no hab&amp;iacute;a ninguna opci&amp;oacute;n para convertirlo en un ASP.NET Application, y segu&amp;iacute;a el famoso problema del inicio. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;La soluci&amp;oacute;n pasar&amp;iacute;a&lt;/b&gt;, si es que no hay una opci&amp;oacute;n en el panel del control, mandar un correo al proveedor para que cree el Application manualmente, debe haber un administrador que monitorea los servidores no?. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Consejo&lt;/b&gt;: cuando renten un hosting, validen si se pueden crear muchos Virtual Directory y ASP.NET Application, pregunten por los dos por si ellos no tienen claro la diferencia entre los mismos. &lt;/p&gt;
&lt;p&gt;Por cierto, un proveedor de hosting no tendr&amp;iacute;a sentido habilitar la creaci&amp;oacute;n de Virtual Directory, porque no es l&amp;oacute;gico que administren carpetas en distintas ubicaciones para el mismo usuario, &amp;iquest;ser&amp;aacute; que pensaron que una aplicaci&amp;oacute;n ASP.NET pod&amp;iacute;a correr en un Virtual Directory? Bueno si alguien tiene su hosting en Dattatec.com, y sabe m&amp;aacute;s del tema, lo comenta por favor.&lt;/p&gt;
&lt;p&gt;Lecturas complementarias: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="Quick Review: How does IIS map applications and sites?" href="http://weblogs.asp.net/scottgu/archive/2005/08/23/423409.aspx" target="_blank"&gt;Quick Review: How does IIS map applications and sites?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title="Virtual Directory versus Application" href="http://forums.asp.net/t/1327183.aspx" target="_blank"&gt;Virtual Directory versus Application&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Saludos, &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=177593" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/IIS/default.aspx">IIS</category><feedburner:origLink>http://geeks.ms/blogs/sergiotarrillo/archive/2010/06/02/publicando-aplicaciones-web-sobre-iis-web-site-virtual-directory-y-application.aspx</feedburner:origLink></item><item><title>[miniTip] Activar Telnet en Windows 7</title><link>http://feedproxy.google.com/~r/sergiotarrillo/~3/v0hXAX25Owg/minitip-activar-telnet-en-windows-7.aspx</link><pubDate>Fri, 21 May 2010 04:47:31 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:177048</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=177048</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/05/21/minitip-activar-telnet-en-windows-7.aspx#comments</comments><description>&lt;p&gt;Años usando Windows Vista y Windows 7, sin saber que Telnet se puede activar usando: Control Panel –&amp;gt; Program and Features, habilitando la siguiente funcionalidad &lt;strike&gt;mas obvio imposible&lt;/strike&gt;:&lt;/p&gt;  &lt;p&gt;&lt;img alt="http://sergiot2.com/blogimages/2010/05May/20_Telnet_Windows7.jpg" src="http://sergiot2.com/blogimages/2010/05May/20_Telnet_Windows7.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;Fuente: &lt;a title="Activar Telnet en Windows Vista" href="http://www.configurarequipos.com/doc770.html" target="_blank"&gt;Activar Telnet en Windows Vista&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=177048" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Windows+7/default.aspx">Windows 7</category><feedburner:origLink>http://geeks.ms/blogs/sergiotarrillo/archive/2010/05/21/minitip-activar-telnet-en-windows-7.aspx</feedburner:origLink></item><item><title>[Apis] Html Agility Pack</title><link>http://feedproxy.google.com/~r/sergiotarrillo/~3/U_F6As1HiCQ/apis-html-agility-pack.aspx</link><pubDate>Mon, 10 May 2010 22:31:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:176727</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=176727</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/05/10/apis-html-agility-pack.aspx#comments</comments><description>&lt;p&gt;Estoy iniciando un proyecto personal, &lt;a title="portadas del Per&amp;uacute; - Noticias" href="http://sergiot2.com/peru/" target="_blank"&gt;portadas del Per&amp;uacute;&lt;/a&gt;, cuyo fin es mostrar las portadas de los diarios locales, bajo cierta perspectiva. Hay diarios, por ejemplo &lt;a title="el Comercio Peru - Noticias" href="http://elcomercio.pe" target="_blank"&gt;elcomercio.pe&lt;/a&gt;, donde no hay problema en obtener la imagen de portada: &lt;a href="http://e.elcomercio.pe/66/impresa/img/2010/05/10/ecpr100510a1.jpg"&gt;http://e.elcomercio.pe/66/impresa/img/2010/05/10/ecpr100510a1.jpg&lt;/a&gt;, claro considerando una determinada hora de publicaci&amp;oacute;n. Es f&amp;aacute;cil identificar que el patr&amp;oacute;n de la imagen s&amp;oacute;lo esta determinado por la fecha del d&amp;iacute;a, f&amp;aacute;cil de determinar con un juego de Strings: &lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; String.Format(&lt;span style="color:#006080;"&gt;&amp;quot;http://e.elcomercio.pe/66/impresa/img/{0}/ecpr{1}a1.jpg&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;               DateTime.Now.ToString(&lt;span style="color:#006080;"&gt;&amp;quot;yyyy/MM/dd&amp;quot;&lt;/span&gt;), DateTime.Now.ToString(&lt;span style="color:#006080;"&gt;&amp;quot;ddMMyy&amp;quot;&lt;/span&gt;));&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt; //&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Pero otros (varios), como &lt;a title="Per&amp;uacute; 21 - Noticias - Lima" href="http://peru21.pe" target="_blank"&gt;Per&amp;uacute;21.pe&lt;/a&gt;, donde la imagen de portada tiene un atributo adicional: &lt;a href="http://e.peru21.pe/102/impresa/img/2010/05/10/234399.jpg"&gt;http://e.peru21.pe/102/impresa/img/2010/05/10/234399.jpg&lt;/a&gt;. Adem&amp;aacute;s de tener la fecha, tiene un n&amp;uacute;mero que imagino debe ser el ID de la imagen, podemos probar &lt;a href="http://e.peru21.pe/102/impresa/img/2010/05/10/234400.jpg"&gt;http://e.peru21.pe/102/impresa/img/2010/05/10/234400.jpg&lt;/a&gt; y &lt;a href="http://e.peru21.pe/102/impresa/img/2010/05/10/234401.jpg"&gt;http://e.peru21.pe/102/impresa/img/2010/05/10/234401.jpg&lt;/a&gt;. Estuve tratando de elaborar un algoritmo para obtener la secuencia de n&amp;uacute;meros entre portada y portada, pero no es constante. Adem&amp;aacute;s no creo que ellos usen un algoritmo para colocar una imagen en portada, ellos deben tener un campo c&amp;oacute;mo: &amp;quot;EsPortada&amp;quot;, con lo cu&amp;aacute;l es sencillo hacer un WHERE: &amp;quot;traer la imagen de portada del d&amp;iacute;a tal&amp;quot;. &lt;/p&gt;
&lt;p&gt;C&amp;oacute;mo es seguro que no ellos no me van a dar acceso a su BD, la &amp;uacute;ltima opci&amp;oacute;n es sacarlo del HTML crudo, &amp;uacute;ltima opci&amp;oacute;n debido a que agregamos una variable de dependencia: si ellos cambian el html de su portal, podr&amp;iacute;a provocar que nuestro c&amp;oacute;digo ya no funcione. Pero esperemos que esto no suceda muy a menudo. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;iquest;C&amp;oacute;mo convertir HTml Crudo, a un modelo de &amp;quot;objetos&amp;quot; html?&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;Antes usaba &lt;a title="WebClient on Geeks.ms" href="http://geeks.ms/search/SearchResults.aspx?q=webClient" target="_blank"&gt;WebClient&lt;/a&gt;, para leer el html de una p&amp;aacute;gina, y era &amp;quot;manual&amp;quot; la b&amp;uacute;squeda de elementos dentro del html. C&amp;oacute;mo aprendizaje, es correcto empezar por ah&amp;iacute;, pero despu&amp;eacute;s, es mejor usar la API: &amp;quot;Html Agility Pack&amp;quot;: &lt;a href="http://htmlagilitypack.codeplex.com"&gt;http://htmlagilitypack.codeplex.com&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;&amp;ldquo;&lt;i&gt;What is exactly the Html Agility Pack (HAP)?&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT (you actually don&amp;#39;t HAVE to understand XPATH nor XSLT to use it, don&amp;#39;t worry...). It is a .NET code library that allows you to parse &amp;quot;out of the web&amp;quot; HTML files. The parser is very tolerant with &amp;quot;real world&amp;quot; malformed HTML. The object model is very similar to what proposes System.Xml, but for HTML documents (or streams).&lt;/i&gt;&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;En resumen, permite convertir el contenido texto de HTML en un modelo rico de elementos Xml, que son de f&amp;aacute;cil lectura, por ejemplo, en mi escenario, si quiero recuperar la imagen de portada puedo hacer lo siguiente: &lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; String getImgPeru21()&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;   String imgPortada = &lt;span style="color:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;   hap.HtmlWeb docWeb = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; hap.HtmlWeb();&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;   hap.HtmlDocument doc = docWeb.Load(&lt;span style="color:#006080;"&gt;&amp;quot;http://peru21.pe/impresa/&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (hap.HtmlNode img &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;             doc.DocumentNode.SelectNodes(&lt;span style="color:#006080;"&gt;&amp;quot;//img[@title]&amp;quot;&lt;/span&gt;))&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;   {&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;     hap.HtmlAttribute att = img.Attributes[&lt;span style="color:#006080;"&gt;&amp;quot;title&amp;quot;&lt;/span&gt;];&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (att.Value.ToLower() == &lt;span style="color:#006080;"&gt;&amp;quot;impresa&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;     {&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt;       imgPortada = img.Attributes[&lt;span style="color:#006080;"&gt;&amp;quot;src&amp;quot;&lt;/span&gt;].Value;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt;     }&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;   } &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum18"&gt;  18:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; imgPortada;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum19"&gt;  19:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Y nada, con ese peque&amp;ntilde;o c&amp;oacute;digo puedo obtener la imagen de portada del diario &lt;a title="Peru 21 - Noticias - Lima" href="http://peru21.pe" target="_blank"&gt;Per&amp;uacute; 21&lt;/a&gt;, siempre y cuando &lt;span style="text-decoration:line-through;"&gt;el designer no se despierte inspirado y cambie el dise&amp;ntilde;o base&lt;/span&gt;, no haya cambios sustanciales en el dise&amp;ntilde;o de la web. &lt;/p&gt;
&lt;p&gt;Saludos, &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=176727" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Web/default.aspx">Web</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/APIs/default.aspx">APIs</category><feedburner:origLink>http://geeks.ms/blogs/sergiotarrillo/archive/2010/05/10/apis-html-agility-pack.aspx</feedburner:origLink></item><item><title>[CodeSnippet] Enviar cuando correo cuando el usuario use Internet Explorer 6 (IE6)</title><link>http://feedproxy.google.com/~r/sergiotarrillo/~3/6ALR-rteME4/codesnippet-enviar-cuando-correo-cuando-el-usuario-use-internet-explorer-6-ie6.aspx</link><pubDate>Tue, 27 Apr 2010 17:51:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:175681</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>5</slash:comments><wfw:commentRss>http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=175681</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/04/27/codesnippet-enviar-cuando-correo-cuando-el-usuario-use-internet-explorer-6-ie6.aspx#comments</comments><description>&lt;p&gt;Internet Explorer 6, es una de esas piedritas por la que a veces uno tiene que pensar, &amp;iquest;damos soporte para IE6 o no?, claro hablando de dise&amp;ntilde;o. &lt;/p&gt;
&lt;p&gt;En un proyecto actual para una intranet, hemos decidido no dar soporte para IE6, &lt;span style="text-decoration:line-through;"&gt;no estresarnos haciendo dise&amp;ntilde;os web paralelos&lt;/span&gt;. IE6, fue lanzado all&amp;aacute; por el 2001, y como que ya va siendo hora de ni siquiera mencionarlo cuando definamos los navegadores a soportar por nuestra web. [Extra]: &lt;a title="Mat&amp;oacute; IE6 la marca Internet Explorer??" href="http://geeks.ms/blogs/dsalgado/archive/2009/10/08/mat-243-ie6-la-marca-internet-explorer.aspx" target="_blank"&gt;Mat&amp;oacute; IE6 la marca Internet Explorer??&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Regresando al tema, no vamos a bloquear a los usuarios que ingresen con IE6, lo que vamos hacer es enviar un email a Soporte, para actualizar a los usuarios que a&amp;uacute;n est&amp;aacute;n usando IE6. &lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; ValidarIExplore()&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (HttpContext.Current.Request.Browser.Type.ToUpper() == &lt;span style="color:#006080;"&gt;&amp;quot;IE6&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;   {&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;     String fromEmail = ConfigurationManager.AppSettings[&lt;span style="color:#006080;"&gt;&amp;quot;emailAdmin&amp;quot;&lt;/span&gt;];&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;     String toEmail = ConfigurationManager.AppSettings[&lt;span style="color:#006080;"&gt;&amp;quot;emailSoporte&amp;quot;&lt;/span&gt;];&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;     String subject = String.Format(&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;           &lt;span style="color:#006080;"&gt;&amp;quot;[{0}], necesita actualizar internet explorer&amp;quot;&lt;/span&gt;, &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;           HttpContext.Current.User.Identity.Name);&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;     String message = String.Format(&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;             &lt;span style="color:#006080;"&gt;@&amp;quot;Sres. de soporte, &amp;lt;br/&amp;gt; El usuario {0} necesita actualizar [...] &amp;quot;&lt;/span&gt;,&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;             HttpContext.Current.User.Identity.Name);&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt;     SendEmail(fromEmail, toEmail, subject, message);&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;   }&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;El m&amp;eacute;todo es sencillo, y como tengo una p&amp;aacute;gina base para todos mis formularios web, aplico lo siguiente: &lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;abstract&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; ReportPageBase : System.Web.UI.Page&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;   {&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//si no esta logueado reenviarlo&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (!User.Identity.IsAuthenticated) { Response.Redirect(&lt;span style="color:#006080;"&gt;&amp;quot;~/login.aspx&amp;quot;&lt;/span&gt;); }&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//validar browser&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;     Helper.ValidarIExplore();&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;     &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//other code&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;   }&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Para enviar correos desde ASP.NET, consulte la &lt;a title="http://geeks.ms/blogs/jalarcon/archive/2007/06/23/c-243-mo-enviar-correo-electr-243-nico-por-c-243-digo-usando-cuentas-de-gmail.aspx" href="http://geeks.ms/blogs/jalarcon/archive/2007/06/23/c-243-mo-enviar-correo-electr-243-nico-por-c-243-digo-usando-cuentas-de-gmail.aspx" target="_blank"&gt;siguiente entrada&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Saludos, &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=175681" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Web/default.aspx">Web</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Code+Snippets/default.aspx">Code Snippets</category><feedburner:origLink>http://geeks.ms/blogs/sergiotarrillo/archive/2010/04/27/codesnippet-enviar-cuando-correo-cuando-el-usuario-use-internet-explorer-6-ie6.aspx</feedburner:origLink></item><item><title>Ejemplos de base de datos para SQL Server</title><link>http://feedproxy.google.com/~r/sergiotarrillo/~3/x3qYUD0-5Rc/ejemplos-de-base-de-datos-para-sql-server.aspx</link><pubDate>Fri, 23 Apr 2010 19:48:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:175448</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=175448</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/04/23/ejemplos-de-base-de-datos-para-sql-server.aspx#comments</comments><description>&lt;p&gt;&lt;img title=" Ejemplos de Base de Datos - SQL Server" alt=" Ejemplos de Base de Datos - SQL Server" src="http://sergiot2.com/blogimages/2010/04Abr/23_databases.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;De vez en cuando, hay la oportunidad de revisar uno que otro proyecto Web ASP.NET disponible en la Web, para aprender de su Know-how. Es una manera r&amp;aacute;pida para aprender de golpe el desarrollo de aplicaciones Web. &lt;/p&gt;
&lt;p&gt;Debido a que pienso usar algunas de estas base de datos, para posts futuros, voy a colgarlas en un nuevo proyecto que estoy usando, &lt;a title="Gallery Server PRO" href="http://www.galleryserverpro.com/" target="_blank"&gt;Gallery Server PRO&lt;/a&gt; (pendiente un post con la revisi&amp;oacute;n de este site). &lt;/p&gt;
&lt;p&gt;Las base de datos disponibles que he tenido la oportunidad de revisar, las que recuerdo y que sean open source, son las siguientes: &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;La archi-conocida, Northwind, que es una especie de modelo ordenes de venta (maestro-detalle), y que puede registrar Productos, Clientes, y Vendedores.&lt;/li&gt;
&lt;li&gt;La archi-conocida, Pubs, para editoriales que deseen guardar informaci&amp;oacute;n de libros, empleados, autores, y la venta de libros. Obviamente no es un modelo complejo, simplifica algunas funcionalidades, pero que puede ser un punto de partida si nos estamos iniciando.&lt;/li&gt;
&lt;li&gt;&lt;a title="The Beer House en CodePlex, lo nuevo, ahora tambien en VB.NET" href="http://geeks.ms/blogs/sergiotarrillo/archive/2007/04/26/13733.aspx" target="_blank"&gt;TheBeerHouse&lt;/a&gt;, proyecto en CodePlex, que maneja foros, art&amp;iacute;culos, encuentas, adem&amp;aacute;s de ofertar productos a la venta (seguimiento de la orden). Por cierto hay una nueva versi&amp;oacute;n, que incluye este portal usando ASP.NET MVC.&lt;/li&gt;
&lt;li&gt;&lt;a title="Classifieds Web Site" href="http://www.asp.net/downloads/starter-kits/classifieds/" target="_blank"&gt;Classifieds&lt;/a&gt;, de uno de los tantos Starter Kit, y que b&amp;aacute;sicamente podemos guardar clasificados para anunciarlos en nuestro web, adem&amp;aacute;s incluye administraci&amp;oacute;n de imagenes por clasificado.&lt;/li&gt;
&lt;li&gt;&lt;a title="BlogEngine" href="http://geeks.ms/blogs/sergiotarrillo/archive/2008/05/02/84673.aspx" target="_blank"&gt;BlogEngine&lt;/a&gt;, es conocido motor de blog, y que permite manejar posts, comentarios, categor&amp;iacute;as, tags, y p&amp;aacute;ginas. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si quieren descargar los queries para la creaci&amp;oacute;n de alguna de estas base de datos, pueden hacerlo desde el siguiente enlace: &lt;a title="SQL Server - Base de Datos Ejemplos" href="http://sergiot2.com/gs/default.aspx?aid=4" target="_blank"&gt;SQL Server - Base de Datos Ejemplos&lt;/a&gt; (Powered by &lt;a title="Gallery Server PRO" href="http://www.galleryserverpro.com/" target="_blank"&gt;Gallery Server Pro&lt;/a&gt;) &lt;/p&gt;
&lt;p&gt;P.D.: Si tienen sugerencia de alguna m&amp;aacute;s, me avisan.&lt;/p&gt;
&lt;p&gt;P.D.2: Recuerden que siempre es mejor visitar el sitio oficinal para tener la &amp;uacute;ltima versi&amp;oacute;n de la base de datos, pero este es mi backup personal para el uso de estas base de datos, adem&amp;aacute;s de tener el enlace directo, y no tener que descargar todo el proyecto para tener la base de datos.&lt;/p&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=175448" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Web/default.aspx">Web</category><feedburner:origLink>http://geeks.ms/blogs/sergiotarrillo/archive/2010/04/23/ejemplos-de-base-de-datos-para-sql-server.aspx</feedburner:origLink></item><item><title>[CodeSnippet] Leer archivos ANSI en .Net (cuando C# no lee la enie)</title><link>http://feedproxy.google.com/~r/sergiotarrillo/~3/-bbIbtdrOM4/174008.aspx</link><pubDate>Wed, 07 Apr 2010 05:43:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:174008</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=174008</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/04/07/174008.aspx#comments</comments><description>&lt;p&gt;Hace meses coment&amp;aacute;bamos sobre &lt;a title="Integrando Sistemas de Informacion? - Geeks.ms - Sergio Tarrillo" href="http://geeks.ms/blogs/sergiotarrillo/archive/2009/06/10/150245.aspx" target="_blank"&gt;la integraci&amp;oacute;n de sistemas de informaci&amp;oacute;n&lt;/a&gt;, y es que cuando empiezas a interactuar con otros sistemas te das cuenta que no todos trabajan de la misma forma que tu, ni todos usan los mismos est&amp;aacute;ndares. Y lo mismo pasa con la codificaci&amp;oacute;n de archivos. &lt;/p&gt;
&lt;p&gt;Y parece un tema trivial, pero imaginad que estas cargando unos clientes a tu sistema que vinieron en un archivo con formato ANSI, y alguno de los clientes se apellida Nu&amp;ntilde;ez. En la reuniones de an&amp;aacute;lisis, nunca se determino el formato del archivo. As&amp;iacute; que el programador abri&amp;oacute; el archivo como siempre le ha funcionado: &lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (StreamReader rd = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; StreamReader(&lt;span style="color:#006080;"&gt;&amp;quot;rutaArchivo&amp;quot;&lt;/span&gt;)) &lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;El archivo se cargo exitosamente al sistema, despu&amp;eacute;s de unas semanas al cliente le llega su recibo de facturaci&amp;oacute;n y su apellido no dice Nu&amp;ntilde;ez, dice Nu?ez. &lt;/p&gt;
&lt;p&gt;Seguramente responsabilizaran al programador, por programar &amp;quot;mal&amp;quot;, y bueno, en parte tiene responsabilidad por no preguntar cual era la codificaci&amp;oacute;n a usar. Pero tambi&amp;eacute;n la tiene el analista o persona que no defini&amp;oacute; correctamente el contrato de servicio para intercambiar informaci&amp;oacute;n. Se debi&amp;oacute; especificar que se iba a usar un formato en espec&amp;iacute;fico, o hacer que el tipo de codificaci&amp;oacute;n sea parametrizable. &lt;/p&gt;
&lt;p&gt;Para leer correctamente las cadenas, debemos agregar un atributo al constructor del &lt;b&gt;StreamReader/Writer&lt;/b&gt;. Usaremos el siguiente ejemplo, dos archivos con el mismo contenido, pero guardados en distinta codificaci&amp;oacute;n:&lt;/p&gt;
&lt;p&gt;&lt;img title="Archivos ANSI UTF8 - Geeks.ms" alt="Archivos ANSI UTF8 - Geeks.ms" src="http://sergiot2.com/blogimages/2010/04Abr/06_ANSI_UTF8.JPG" /&gt;&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//leyendo por defecto&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; String fileANSI = &lt;span style="color:#006080;"&gt;@&amp;quot;..\..\Files\Ejemplo_ANSI.txt&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; String fileUTF8 = &lt;span style="color:#006080;"&gt;@&amp;quot;..\..\Files\Ejemplo_UTF8.txt&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (StreamReader rdDefault = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; StreamReader(fileANSI))&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;   Console.WriteLine(&lt;span style="color:#006080;"&gt;&amp;quot;Usando StreamReader Default para leer ANSI: &amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;   Console.Write(rdDefault.ReadToEnd());&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;   Console.WriteLine(&lt;span style="color:#006080;"&gt;&amp;quot;\n----------------\n&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt; }&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (StreamReader rdDefault = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; StreamReader(fileUTF8))&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;   Console.WriteLine(&lt;span style="color:#006080;"&gt;&amp;quot;Usando StreamReader Default para leer UTF8: &amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;   Console.Write(rdDefault.ReadToEnd());&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt;   Console.WriteLine(&lt;span style="color:#006080;"&gt;&amp;quot;\n----------------\n&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt; }&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//leyendo en ANSI&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum18"&gt;  18:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (StreamReader rdDefault = &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum19"&gt;  19:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; StreamReader(fileANSI, Encoding.GetEncoding(1252)))&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum20"&gt;  20:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum21"&gt;  21:&lt;/span&gt;   Console.WriteLine(&lt;span style="color:#006080;"&gt;&amp;quot;Usando StreamReader ANSI para leer ANSI: &amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum22"&gt;  22:&lt;/span&gt;   Console.Write(rdDefault.ReadToEnd());&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum23"&gt;  23:&lt;/span&gt;   Console.WriteLine(&lt;span style="color:#006080;"&gt;&amp;quot;\n----------------\n&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum24"&gt;  24:&lt;/span&gt; }&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum25"&gt;  25:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (StreamReader rdDefault = &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum26"&gt;  26:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; StreamReader(fileUTF8, Encoding.GetEncoding(1252)))&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum27"&gt;  27:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum28"&gt;  28:&lt;/span&gt;   Console.WriteLine(&lt;span style="color:#006080;"&gt;&amp;quot;Usando StreamReader ANSI para leer UTF8: &amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum29"&gt;  29:&lt;/span&gt;   Console.Write(rdDefault.ReadToEnd());&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum30"&gt;  30:&lt;/span&gt;   Console.WriteLine(&lt;span style="color:#006080;"&gt;&amp;quot;\n----------------\n&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum31"&gt;  31:&lt;/span&gt; }     &lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;El resultado ser&amp;aacute; el siguiente:&lt;/p&gt;
&lt;p&gt;&lt;img alt="http://sergiot2.com/blogimages/2010/04Abr/06_CSharp_StreamReader_ANSI.JPG" src="http://sergiot2.com/blogimages/2010/04Abr/06_CSharp_StreamReader_ANSI.JPG" /&gt;&lt;/p&gt;
&lt;p&gt;Descargar soluci&amp;oacute;n ejemplo: &lt;a title="Leer archivos ANSI desde C#" href="http://geeks.ms/media/p/173993.aspx" target="_blank"&gt;Leer archivos ANSI desde C#&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Otros art&amp;iacute;culos referentes a la codificaci&amp;oacute;n de los archivos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="Conversi&amp;oacute;n ANSI a Unicode y viceversa" href="http://geeks.ms/blogs/rfog/archive/2010/02/03/conversi-243-n-ansi-a-unicode-y-viceversa.aspx" target="_blank"&gt;Conversi&amp;oacute;n ANSI a Unicode y viceversa&lt;/a&gt;, por &lt;a title="Rafael Ontivero - .NET o no .NET, esa es la cuesti&amp;oacute;n" href="http://geeks.ms/blogs/rfog/default.aspx" target="_blank"&gt;Rafael Ontivero&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title="Strings en .NET y el BOM" href="http://geeks.ms/blogs/etomas/archive/2009/02/04/strings-en-net-y-el-bom.aspx" target="_blank"&gt;Strings en .NET y el BOM&lt;/a&gt;, por &lt;a title="Eduard Tom&amp;agrave;s i Avellana - Burbujas en .NET" href="http://geeks.ms/blogs/etomas/default.aspx" target="_blank"&gt;Eduard Tom&amp;agrave;s i Avellana&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title="The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)" href="http://www.joelonsoftware.com/articles/Unicode.html" target="_blank"&gt;The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)&lt;/a&gt;, por &lt;a title="Joel Spolsky - Joel on Software" href="http://www.joelonsoftware.com/" target="_blank"&gt;Joel Spolsky&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=174008" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/.NET/default.aspx">.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Code+Snippets/default.aspx">Code Snippets</category><feedburner:origLink>http://geeks.ms/blogs/sergiotarrillo/archive/2010/04/07/174008.aspx</feedburner:origLink></item><item><title>ASP.NET WebForms vs ASP.NET MVC, la nueva batalla</title><link>http://feedproxy.google.com/~r/sergiotarrillo/~3/wtLzciLnOaI/171454.aspx</link><pubDate>Fri, 26 Mar 2010 19:47:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:171454</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>7</slash:comments><wfw:commentRss>http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=171454</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/03/26/171454.aspx#comments</comments><description>&lt;p&gt;&lt;img title="ASP.NET Web Forms, basado en armar todo por componentes" alt="ASP.NET Web Forms, basado en armar todo por componentes" src="http://sergiot2.com/blogimages/2010/03Mar/26_aspnet_WebForms.jpg" /&gt;&amp;nbsp; &lt;img title="ASP.NET MVC - basado en construir todo el renderizado tu mismo" alt="ASP.NET MVC - basado en construir todo el renderizado tu mismo" src="http://sergiot2.com/blogimages/2010/03Mar/26_aspnet_mvc.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;Uacute;ltimamente los debates de C# o VB.Net quedaron atr&amp;aacute;s, ahora los nuevos debates dentro del mundillo .Net est&amp;aacute;n entre usar ASP.NET Web Forms o ASP.NET MVC. Imaginen la desorientaci&amp;oacute;n sobre el tema, que hasta se dedico una sesi&amp;oacute;n del &lt;a title="MIX 2009" href="http://videos.visitmix.com/MIX09/T23F"&gt;MIX 2009&lt;/a&gt; a tratar sobre este tema: &lt;a title="Choosing between ASP.NET Web Forms and MVC" href="http://videos.visitmix.com/MIX09/T23F" target="_blank"&gt;Choosing between ASP.NET Web Forms and MVC&lt;/a&gt;. En los inicios de ASP.NET su principal objetivo era ganar terreno a PHP, JSP, y las otras tecnolog&amp;iacute;as existentes, vendiendo que hacer aplicaciones Web era como hacer aplicaciones Windows, aunque haya un trabajo extra por detr&amp;aacute;s. Con los a&amp;ntilde;os de este Framework el uso de la comunidad ha hecho los Web Forms evolucionen, esfuerzos como reducir el tama&amp;ntilde;o del ViewState, los CSS Adapters, los Starter Kits, las buenas pr&amp;aacute;cticas, entre otras, han ido mejorando el Framework. De hecho no creo que de Microsoft escuchemos no usen Web Forms, ahora usen ASP.NET MVC, por que por parte de ellos y de la comunidad hubo un gran esfuerzo,&lt;span style="text-decoration:line-through;"&gt; y mucho cari&amp;ntilde;o&lt;/span&gt;, por hacer que los Web Forms, sean un buen Framework de desarrollo Web.&lt;/p&gt;
&lt;p&gt;Antes de empezar quisiera usar y resaltar esta l&amp;iacute;nea de un post de &lt;a title="ScottGu Blog" href="http://weblogs.asp.net/scottgu/default.aspx" target="_blank"&gt;ScottGu&lt;/a&gt; relacionado con esta discusi&amp;oacute;n, &lt;a title="About Technical Debates (and ASP.NET Web Forms and ASP.NET MVC debates in particular)" href="http://weblogs.asp.net/scottgu/archive/2010/01/24/about-technical-debates-both-in-general-and-regarding-asp-net-web-forms-and-asp-net-mvc-in-particular.aspx" target="_blank"&gt;About Technical Debates (and ASP.NET Web Forms and ASP.NET MVC debates in particular)&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Great developers using bad tools/frameworks can make great apps. Bad developers using great tools/frameworks can make bad apps.&amp;rdquo; &lt;/p&gt;
&lt;p&gt;Al citar esta cifra, creo que deben tener un idea de cual es mi punto de vista. Ahora dividamos el problema, vamos a establecer dos grupos de usuarios para dar nuestros comentarios:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="text-decoration:underline;"&gt;Grupo de usuarios experimentados de ASP.NET&lt;/span&gt;, que tienen varios proyectos en producci&amp;oacute;n y que no han tenido problemas de rendimiento, tiempo de respuesta, etc, cuando han desarrollado proyectos usando &lt;b&gt;WebForms&lt;/b&gt;. &lt;/li&gt;
&lt;li&gt;&lt;span style="text-decoration:underline;"&gt;Grupo de usuarios nuevos de ASP.NET&lt;/span&gt; (y en general nuevos en el desarrollo Web), cuyo primero contacto fue hacer proyectos Web usando ASP.NET, y que no han tenido buenos resultados, han tenido problemas de rendimiento, de tiempo de respuesta, de dise&amp;ntilde;o, y todos los que encontramos en los foros. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Usando el mismo patr&amp;oacute;n que recomend&amp;oacute; Jorge Serrano en este art&amp;iacute;culo, &lt;a title="C# o VB, VB o C#,... la envidia me corroe" href="http://geeks.ms/blogs/jorge/archive/2008/04/18/c-o-vb-vb-o-c-la-envidia-me-corroe.aspx" target="_blank"&gt;C# o VB, VB o C#,... la envidia me corroe&lt;/a&gt;, si eres un usuario experimentando, no necesitas recomendaciones, s&amp;oacute;lo revisar las caracter&amp;iacute;sticas de ASP.NET MVC y ver si alguna de ellas es la estabas buscando: &lt;a title="ASP.NET MVC Overview" href="http://msdn.microsoft.com/en-us/library/dd381412%28VS.100%29.aspx" target="_blank"&gt;ASP.NET MVC Overview&lt;/a&gt;. Cerramos el tema con ellos, y nos dedicamos a los usuarios nuevos en el desarrollo Web y que van a empezar con ASP.NET.&lt;/p&gt;
&lt;p&gt;El problema para los nuevos usuarios, y para los que toman como cierto el mensaje: &amp;ldquo;Desarrolla Aplicaciones Web como si lo hicieras con Windows Forms, s&amp;oacute;lo arrastras controles y ya tienes tu Aplicaci&amp;oacute;n Web&amp;rdquo;. Y lo toman literalmente, &lt;a title="no necesitan aprender la diferencia entre POST Y GET" href="http://geeks.ms/blogs/sergiotarrillo/archive/2008/08/25/95868.aspx" target="_blank"&gt;no necesitan aprender la diferencia entre POST Y GET&lt;/a&gt;, no hay porque aprender el significado de QueryString, no es necesario saber si es malo guardar un DataSet en el ViewState de la p&amp;aacute;gina, s&amp;oacute;lo la hago para ya no consultar la base de datos y no tener lenta mi aplicaci&amp;oacute;n, no se preocupan en aprender HTML, no se preocupan en aprender JavaScript, entre todas las otras que suelen dejarse de aprender. &lt;/p&gt;
&lt;p&gt;Entonces si eres un usuario nuevo en ASP.NET (y si no eres nuevo y no sabes que que usa POST o GET), la recomendaci&amp;oacute;n b&amp;aacute;sica es aprender los fundamentos del desarrollo Web:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="Programando Web para principiantes I" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032336422&amp;amp;culture=es-ES" target="_blank"&gt;Programando Web para principiantes I&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Programando Web para principiantes II" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032336425&amp;amp;culture=es-ES" target="_blank"&gt;Programando Web para principiantes II&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Programando Web para principiantes III" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032346608&amp;amp;culture=es-ES" target="_blank"&gt;Programando Web para principiantes III&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos son WebCasts impartidos por el amigo &lt;a title="Jonas Stawski" href="http://www.jstawski.com/" target="_blank"&gt;Jonas Stawski&lt;/a&gt;. Es m&amp;aacute;s si pueden traten de hacer peque&amp;ntilde;as Web simples usando s&amp;oacute;lo ASP cl&amp;aacute;sico, ver&amp;aacute;n los resultados y la diferencia cuando despu&amp;eacute;s aprendan ASP.NET.&lt;/p&gt;
&lt;p&gt;Si ya aprendieron los fundamentos, la elecci&amp;oacute;n ser&amp;aacute; m&amp;aacute;s f&amp;aacute;cil. Por otro lado, tampoco es que ASP.NET MVC cambie totalmente la forma de hacer aplicaciones Web Forms, hay muchas funcionalidades que comparten en un com&amp;uacute;n, la diferencia principal esta en como presentar el fron-ed al usuario, no vamos a entrar en detalles muy t&amp;eacute;cnico por que quiz&amp;aacute;s si fuerzas a cualquier de los dos frameworks puedes lograr la funcionalidad del otro, pero vamos mostrar el siguiente gr&amp;aacute;fico para mostrar algunas diferencias, y como podemos elegir en que escenario usar uno u otro:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/03Mar/26_aspnet_mvc_webForms.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.gadodia.net/choosing-between-webforms-and-mvc/" target="_blank"&gt;Fuente del gr&amp;aacute;fico&lt;/a&gt;, y &lt;a title="otro m&amp;aacute;s detallado" href="http://www.emadibrahim.com/2008/09/07/deciding-between-aspnet-mvc-and-webforms/" target="_blank"&gt;otro m&amp;aacute;s detallado&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Como recomendaci&amp;oacute;n final, podr&amp;iacute;amos establecer la siguiente l&amp;iacute;nea para aprender correctamente cualquier de las tecnolog&amp;iacute;as y no caer en las malas practicas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Aprender Html &lt;/li&gt;
&lt;li&gt;Aprender JavaScript &lt;/li&gt;
&lt;li&gt;Aprender ASP Cl&amp;aacute;sico &lt;/li&gt;
&lt;li&gt;Aprender ASP.NET MVC &lt;/li&gt;
&lt;li&gt;Aprender ASP.NET Web Forms &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aprender al final ASP.Net Web Forms, nos ayudar&amp;aacute; a entender porque algunas opiniones dicen no usar Web Forms, principalmente por el m&amp;aacute;gico ViewState que hace que los WebForms sean Stateful, por el contrario de toda la Web que es Stateless.&lt;/p&gt;
&lt;p&gt;Otros art&amp;iacute;culos con algunos detalles de este versus, unos m&amp;aacute;s t&amp;eacute;cnicos que otros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="About Technical Debates (and ASP.NET Web Forms and ASP.NET MVC debates in particular)" href="http://weblogs.asp.net/scottgu/archive/2010/01/24/about-technical-debates-both-in-general-and-regarding-asp-net-web-forms-and-asp-net-mvc-in-particular.aspx" target="_blank"&gt;About Technical Debates (and ASP.NET Web Forms and ASP.NET MVC debates in particular)&lt;/a&gt; , by &lt;a title="ScottGu&amp;#39;s" href="http://weblogs.asp.net/scottgu/default.aspx" target="_blank"&gt;ScottGu&amp;#39;s&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Web Forms vs. ASP.NET MVC" href="http://weblogs.asp.net/despos/archive/2009/04/11/web-forms-vs-asp-net-mvc.aspx" target="_blank"&gt;Web Forms vs. ASP.NET MVC&lt;/a&gt;, by &lt;a title="Dino Esposito" href="http://weblogs.asp.net/despos/default.aspx" target="_blank"&gt;Dino Esposito - .NET Architectonics&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Choosing Between WebForms and MVC" href="http://blog.gadodia.net/choosing-between-webforms-and-mvc/" target="_blank"&gt;Choosing Between WebForms and MVC&lt;/a&gt;, by &lt;a title="http://blog.gadodia.net/" href="http://blog.gadodia.net/" target="_blank"&gt;Vaibhav Gadodia&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Comparing Web Forms And ASP.NET MVC" href="http://msdn.microsoft.com/en-us/magazine/dd942833.aspx" target="_blank"&gt;Comparing Web Forms And ASP.NET MVC&lt;/a&gt;, by &lt;a href="http://weblogs.asp.net/despos/default.aspx"&gt;Dino Esposito - .NET Architectonics&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Deciding Between ASP.NET MVC and WebForms" href="http://www.emadibrahim.com/2008/09/07/deciding-between-aspnet-mvc-and-webforms/" target="_blank"&gt;Deciding Between ASP.NET MVC and WebForms&lt;/a&gt;, by &lt;a title="Emad Ibrahim" href="http://www.emadibrahim.com/" target="_blank"&gt;Emad Ibrahim&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Video: ASP.NET MVC vs ASP.NET WebForms &amp;ndash; Will WebForms be replaced by MVC?" href="http://blog.tatham.oddie.com.au/2009/09/14/video-asp-net-mvc-vs-asp-net-webforms-will-webforms-be-replaced-by-mvc/" target="_blank"&gt;Video: ASP.NET MVC vs ASP.NET WebForms &amp;ndash; Will WebForms be replaced by MVC?&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="ASP.NET Development: MVC vs. Web Forms" href="http://rachelappel.com/asp-net/asp-net-development-mvc-vs-web-forms/" target="_blank"&gt;ASP.NET Development: MVC vs. Web Forms&lt;/a&gt;, by &lt;a title="Rachel Appel" href="http://rachelappel.com/" target="_blank"&gt;Rachel Appel&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="MSDN Guidance on ASP.NET MVC vs WebForms and its Impact on my EF + ASP.NET Work" href="http://thedatafarm.com/blog/asp-net/msdn-guidance-on-asp-net-mvc-vs-webforms-and-it-rsquo-s-impact-on-my-ef-asp-net-work/" target="_blank"&gt;MSDN Guidance on ASP.NET MVC vs WebForms and its Impact on my EF + ASP.NET Work&lt;/a&gt;, by &lt;a title="Julie Lerman&amp;#39;s Blog" href="http://thedatafarm.com/blog/" target="_blank"&gt;Julie Lerman&amp;#39;s Blog&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=171454" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Web/default.aspx">Web</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><feedburner:origLink>http://geeks.ms/blogs/sergiotarrillo/archive/2010/03/26/171454.aspx</feedburner:origLink></item></channel></rss>
