<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang=""><title type="html">Tecnologías Microsoft</title><subtitle type="html">Web Development</subtitle><id>http://geeks.ms/blogs/mredison/atom.aspx</id><link rel="alternate" type="text/html" href="http://geeks.ms/blogs/mredison/default.aspx" /><link rel="self" type="application/atom+xml" href="http://geeks.ms/blogs/mredison/atom.aspx" /><generator uri="http://communityserver.org" version="4.1.31106.3070">Community Server</generator><updated>2008-04-30T16:04:28Z</updated><entry><title>Manejar archivos CSV y cargarlos a un GridView en ASP.NET</title><link rel="alternate" type="text/html" href="/blogs/mredison/archive/2009/04/08/manejar-archivos-csv-y-cargarlos-a-un-gridview-en-asp-net.aspx" /><id>/blogs/mredison/archive/2009/04/08/manejar-archivos-csv-y-cargarlos-a-un-gridview-en-asp-net.aspx</id><published>2009-04-08T15:40:00Z</published><updated>2009-04-08T15:40:00Z</updated><content type="html">&lt;p&gt;En este post se mostr&amp;oacute; como manipular los datos desde un archivo csv y guardarlo en tablas en SQL Server 2005:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/archive/2009/04/08/tip-manejo-de-archivos-csv-con-sql-server.aspx" title="http://geeks.ms/blogs/mredison/archive/2009/04/08/tip-manejo-de-archivos-csv-con-sql-server.aspx"&gt;http://geeks.ms/blogs/mredison/archive/2009/04/08/tip-manejo-de-archivos-csv-con-sql-server.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pero este post simplemente se basa en cargar un archivo a un directorio dentro del proyecto web, leer dicho archivo y mostrar los datos en una regilla de datos (GridView) sin hacer uso del servidor de base de datos.&lt;/p&gt;
&lt;p&gt;El formulario que se ocupar&amp;aacute; tendr&amp;aacute; estos controles web:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un control FileUpload. &lt;/li&gt;
&lt;li&gt;Dos botones de comando. &lt;/li&gt;
&lt;li&gt;Dos labels &lt;/li&gt;
&lt;li&gt;Un gridView &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mredison/CsvFilesUpload_5F00_01_5F00_1BC2BE32.jpg"&gt;&lt;img height="297" width="417" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mredison/CsvFilesUpload_5F00_01_5F00_thumb_5F00_64B8BA2B.jpg" alt="CsvFilesUpload_01" border="0" title="CsvFilesUpload_01" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;HTML:&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:11976dd8-068c-40aa-b933-4d6d037a85dc" style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;"&gt;
&lt;pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;overflow:auto;"&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:#FF0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&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;span style="color:#000000;"&gt;
    &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;&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;span style="color:#000000;"&gt;
&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;span style="color:#000000;"&gt;
&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;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;form &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;form1&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;span style="color:#FF0000;"&gt; method&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;post&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &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;span style="color:#000000;"&gt;
    
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:FileUpload &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;FileUpload1&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;span style="color:#FF0000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:Button &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Button1&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;span style="color:#FF0000;"&gt; onclick&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Button1_Click&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; Text&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Subir&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:Button &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Button2&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;span style="color:#FF0000;"&gt; Text&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Cargar Datos-Tabla&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; 
            onclick&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Button2_Click&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    
    &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;span style="color:#000000;"&gt;
    &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;lblOculto&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;span style="color:#FF0000;"&gt; Text&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; Visible&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:Label&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &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;span style="color:#000000;"&gt;
    &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;Label1&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;span style="color:#FF0000;"&gt; Text&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:Label&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &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;GridView1&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;span style="color:#FF0000;"&gt; Height&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;251px&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; Width&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;420px&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &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;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;form&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&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;span style="color:#000000;"&gt;
&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;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;C&amp;oacute;digo:&lt;/p&gt;
&lt;p&gt;En &lt;span style="color:#408080;"&gt;Default.aspx.cs&lt;/span&gt; crearemos estos m&amp;eacute;todos.&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:820528fc-5e7c-4501-8860-c3ff96960193" style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;"&gt;
&lt;pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;overflow:auto;"&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; DataTable CrearTabla(String fila)
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; cantidadColumnas;
        DataTable tabla &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; DataTable(&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Datos&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
        String[] valores &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; fila.Split(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;char&lt;/span&gt;&lt;span style="color:#000000;"&gt;[] { &lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#800000;"&gt;,&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt; });
        cantidadColumnas &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; valores.Length;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; idx &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#800080;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;foreach&lt;/span&gt;&lt;span style="color:#000000;"&gt; (String val &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;in&lt;/span&gt;&lt;span style="color:#000000;"&gt; valores)
        {
            String nombreColumna &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; String.Format(&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;{0}&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, idx&lt;/span&gt;&lt;span style="color:#000000;"&gt;++&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
            tabla.Columns.Add(nombreColumna, Type.GetType(&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;System.String&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;));
        }
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; tabla;
    }&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;En este primer m&amp;eacute;todo se crear&amp;aacute; la tabla de acuerdo a la cantidad de columnas que se obtengan y que se hayan guardado en un arreglo de tipo string.&lt;/p&gt;
&lt;p&gt;Posteriormente crearemos el m&amp;eacute;todo AgregarFila:&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:4180dac2-aae3-44d1-aad4-47ff76042064" style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;"&gt;
&lt;pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;overflow:auto;"&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; DataRow AgregarFila(String fila, DataTable tabla)
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; cantidadColumnas &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#800080;"&gt;100&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
        String[] valores &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; fila.Split(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;char&lt;/span&gt;&lt;span style="color:#000000;"&gt;[] { &lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#800000;"&gt;,&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt; });
        Int32 numeroTotalValores &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; valores.Length;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (numeroTotalValores &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; cantidadColumnas)
        {
            Int32 diferencia &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; numeroTotalValores &lt;/span&gt;&lt;span style="color:#000000;"&gt;-&lt;/span&gt;&lt;span style="color:#000000;"&gt; cantidadColumnas;
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;for&lt;/span&gt;&lt;span style="color:#000000;"&gt; (Int32 i &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#800080;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt;; i &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; diferencia; i&lt;/span&gt;&lt;span style="color:#000000;"&gt;++&lt;/span&gt;&lt;span style="color:#000000;"&gt;)
            {

                String nombreColumna &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; String.Format(&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;{0}&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, (cantidadColumnas &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt; i));
                tabla.Columns.Add(nombreColumna, Type.GetType(&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;System.String&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;));
            }
            cantidadColumnas &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; numeroTotalValores;
        }
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; idx &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#800080;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
        DataRow dfila &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; tabla.NewRow();
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;foreach&lt;/span&gt;&lt;span style="color:#000000;"&gt; (String val &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;in&lt;/span&gt;&lt;span style="color:#000000;"&gt; valores)
        {
            String nombreColumna &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; String.Format(&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;{0}&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, idx&lt;/span&gt;&lt;span style="color:#000000;"&gt;++&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
            dfila[nombreColumna] &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; val.Trim();
        }
        tabla.Rows.Add(dfila);
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; dfila;
    }
&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;M&amp;eacute;todo CargarDatos:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Teniendo listos los primeros dos m&amp;eacute;todos de crearTabla y agregarFilas a la tabla, procedemos a cargar los datos mediante una ruta como parametro:&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:3d9fa868-965b-4038-a8fb-76d86666d51f" style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;"&gt;
&lt;pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;overflow:auto;"&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; CargarDatos(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt; strm)
    {
        DataTable tabla &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;null&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
        StreamReader lector &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; StreamReader(strm);
        String fila &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; String.Empty;
        Int32 cantidad &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#800080;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;do&lt;/span&gt;&lt;span style="color:#000000;"&gt;
        {
            fila &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; lector.ReadLine();
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (fila &lt;/span&gt;&lt;span style="color:#000000;"&gt;==&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;null&lt;/span&gt;&lt;span style="color:#000000;"&gt;)
            {
                &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;break&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
            }
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#800080;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;==&lt;/span&gt;&lt;span style="color:#000000;"&gt; cantidad&lt;/span&gt;&lt;span style="color:#000000;"&gt;++&lt;/span&gt;&lt;span style="color:#000000;"&gt;)
            {
                tabla &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;&lt;span style="color:#000000;"&gt;.CrearTabla(fila);
            }
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;&lt;span style="color:#000000;"&gt;.AgregarFila(fila, tabla);
        } &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;while&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;true&lt;/span&gt;&lt;span style="color:#000000;"&gt;);

        GridView1.DataSource &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; tabla;
        GridView1.DataBind();
    }&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Este m&amp;eacute;todo checa si existen datos en el archivo,&amp;nbsp; crea la tabla y agrega las filas a dicha tabla, adem&amp;aacute;s de mostrarlos en el GridView.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Carga de Archivos con FileUpload:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Haremos un m&amp;eacute;todo de tipo bool, que determinar&amp;aacute; que tipo de archivo solo quiero que suba el usuario.&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:6cab2592-597c-4f15-a87a-d215a3e45daa" style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;"&gt;
&lt;pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;overflow:auto;"&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; ChecarExtension(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt; fileName)
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt; ext &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; Path.GetExtension(fileName);
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;switch&lt;/span&gt;&lt;span style="color:#000000;"&gt; (ext.ToLower())
        {
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;case&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;.csv&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;:
                &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;true&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;default&lt;/span&gt;&lt;span style="color:#000000;"&gt;:
                &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;false&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
        }
    }&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Posteriormente en el bot&amp;oacute;n de Subir, agregaremos el siguiente c&amp;oacute;digo:&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:0a101135-e2f3-4b8d-90e2-365586a12414" style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;"&gt;
&lt;pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;overflow:auto;"&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; Button1_Click(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;object&lt;/span&gt;&lt;span style="color:#000000;"&gt; sender, EventArgs e)
    {
        
        
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (FileUpload1.HasFile)
        {
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (ChecarExtension(FileUpload1.FileName))
            {
                FileUpload1.SaveAs( MapPath(&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Archivos/&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt; FileUpload1.FileName));
                

                 Label1.Text &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt;FileUpload1.FileName &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt; cargado exitosamente&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;;

                 lblOculto.Text &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; MapPath(&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Archivos/&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt; FileUpload1.FileName);
            }
        }
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;else&lt;/span&gt;&lt;span style="color:#000000;"&gt;
        {
            Label1.Text &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Error al subir el archivo o no es el tipo .CSV&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;; 
        }

    }&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;En esta parte indicamos en que directorio se colocar&amp;aacute; dicho archivo y obtenemos la ruta que posteriormente pasaremos como parametro al m&amp;eacute;todo CargarDatos(); a continuaci&amp;oacute;n:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mredison/CsvFilesUpload_5F00_02_5F00_5A37E60B.jpg"&gt;&lt;img height="360" width="506" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mredison/CsvFilesUpload_5F00_02_5F00_thumb_5F00_37174ECE.jpg" alt="CsvFilesUpload_02" border="0" title="CsvFilesUpload_02" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:5af4d40f-dfe0-4feb-9855-1fb0cd3024ee" style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;"&gt;
&lt;pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;overflow:auto;"&gt;&lt;span style="color:#0000FF;"&gt;protected&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; Button2_Click(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;object&lt;/span&gt;&lt;span style="color:#000000;"&gt; sender, EventArgs e)
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;try&lt;/span&gt;&lt;span style="color:#000000;"&gt;
        {

            CargarDatos(lblOculto.Text);
        }
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;catch&lt;/span&gt;&lt;span style="color:#000000;"&gt;
        {
            Response.Write(&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Ocurri&amp;Atilde;&amp;sup3; un error debe cargar antes el archivo&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
        }
    }&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mredison/CsvFilesUpload_5F00_03_5F00_7996C479.jpg"&gt;&lt;img height="456" width="513" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mredison/CsvFilesUpload_5F00_03_5F00_thumb_5F00_038B1A0B.jpg" alt="CsvFilesUpload_03" border="0" title="CsvFilesUpload_03" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Descarga el archivo de c&amp;oacute;digo: &lt;a href="http://v9wria.bay.livefilestore.com/y1pJXTxRJnwBVmqkvo2Vp1Y95rcBBE26pjQ92a4t3zMdyRMY8E-MW16J4T6gVcBecZ6SugwDRyvUaz521ZtEUYyHg/CSV.zip?download" title="CSV.zip-download"&gt;CSV.zip-download&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=146472" width="1" height="1"&gt;</content><author><name>mredison</name><uri>http://geeks.ms/members/mredison/default.aspx</uri></author><category term="C#" scheme="http://geeks.ms/blogs/mredison/archive/tags/C_2300_/default.aspx" /><category term="ASP.NET" scheme="http://geeks.ms/blogs/mredison/archive/tags/ASP.NET/default.aspx" /></entry><entry><title>Entrenamiento de apoyo para el examen de certificación 70-536 TS: Microsoft .NET Framework Application Development Foundation</title><link rel="alternate" type="text/html" href="/blogs/mredison/archive/2009/04/08/entrenamiento-de-apoyo-para-el-examen-de-certificaci-243-n-70-536-ts-microsoft-net-framework-application-development-foundation.aspx" /><id>/blogs/mredison/archive/2009/04/08/entrenamiento-de-apoyo-para-el-examen-de-certificaci-243-n-70-536-ts-microsoft-net-framework-application-development-foundation.aspx</id><published>2009-04-08T15:34:00Z</published><updated>2009-04-08T15:34:00Z</updated><content type="html">&lt;p&gt;&lt;em&gt;&lt;strong&gt;MVP Miguel Mu&amp;ntilde;oz&lt;/strong&gt;&lt;/em&gt;, director de la comunidad de desarrolladores de Puebla en M&amp;eacute;xico, nos comparte un entrenamiento completo de apoyo para el 70-536. Aprov&amp;eacute;chenlo. Saludos.&lt;/p&gt;
&lt;h5&gt;Para desarrolladores avanzados&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/GS7053601.zip"&gt;Rumbo a la certificaci&amp;oacute;n 70-536 - Introducci&amp;oacute;n general&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/GS7053602.zip"&gt;Rumbo a la certificaci&amp;oacute;n 70-536 - Introducci&amp;oacute;n primera secci&amp;oacute;n&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/GS7053603.zip"&gt;Rumbo a la certificaci&amp;oacute;n 70-536 - Stack y Heap&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/GS7053604.zip"&gt;Rumbo a la certificaci&amp;oacute;n 70-536 - Tipos Valor&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/GS7053605.zip"&gt;Rumbo a la certificaci&amp;oacute;n 70-536 - Tipos valor - Continuaci&amp;oacute;n&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/GS7053606.zip"&gt;Rumbo a la certificaci&amp;oacute;n 70-536 - Tipos referencia&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/GS7053607.zip"&gt;Rumbo a la certificaci&amp;oacute;n 70-536 - Conversi&amp;oacute;n entre tipos de datos&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/GS7053607a.zip"&gt;Rumbo a la certificaci&amp;oacute;n 70-536 - Boxing, Unboxing, tipos genericos&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/GS7053608.zip"&gt;Rumbo a la certificaci&amp;oacute;n 70-536 - Restricciones en tipos genericos&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/GS7053609.zip"&gt;Rumbo a la certificaci&amp;oacute;n 70-536 - Nullable Types&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/GS7053610.zip"&gt;Rumbo a la certificaci&amp;oacute;n 70-536 - Clases Exception&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/GS7053611.zip"&gt;Rumbo a la certificaci&amp;oacute;n 70-536 - Attributes&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/GS7053612.zip"&gt;Rumbo a la certificaci&amp;oacute;n 70-536 - Interfaces&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/GS7053613.zip"&gt;Rumbo a la certificaci&amp;oacute;n 70-536 - Interfaces: IEnumerable, IEnumerator&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/GS7053614.zip"&gt;Rumbo a la certificaci&amp;oacute;n 70-536 - Interfaces: IFormatable, IComparable, IComparer, IEquatable&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/GS7053615.zip"&gt;Rumbo a la certificaci&amp;oacute;n 70-536 - Interfaces - IConvertible, ICloneable&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/GS7053616.zip"&gt;Rumbo a la certificaci&amp;oacute;n 70-536 - Interfaces - IDisposable&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Introducci&amp;oacute;n al desarrollo de aplicaciones Microsoft .NET utilizando Visual Studio 2008 (Para principiantes.)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/wc0100.zip"&gt;Introducci&amp;oacute;n al desarrollo de aplicaciones Microsoft .NET utilizando Visual Studio 2008&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/wc0101.zip"&gt;M&amp;oacute;dulo 1: Fundamentos de la programaci&amp;oacute;n&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/wc0101a.zip"&gt;M&amp;oacute;dulo 1: Fundamentos de la programaci&amp;oacute;n - Continuaci&amp;oacute;n -&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/wc0102.zip"&gt;M&amp;oacute;dulo 2: Introducci&amp;oacute;n a la programaci&amp;oacute;n orientada a objetos&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/wc0102a.zip"&gt;M&amp;oacute;dulo 2: Introducci&amp;oacute;n a la programaci&amp;oacute;n orientada a objetos - Continuaci&amp;oacute;n -&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/wc0102b.zip"&gt;M&amp;oacute;dulo 2: Introducci&amp;oacute;n a la programaci&amp;oacute;n orientada a objetos - Continuaci&amp;oacute;n -&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/wc0103.zip"&gt;M&amp;oacute;dulo 3: Introducci&amp;oacute;n al .NET Framework&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/wc0103a.zip"&gt;M&amp;oacute;dulo 3: Introducci&amp;oacute;n al .NET Framework (Desarrollo con .NET y MONO)&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/wc0103b.zip"&gt;M&amp;oacute;dulo 3: Introducci&amp;oacute;n al .NET Framework (Desarrollo con .NET y MONO) - Continuaci&amp;oacute;n&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comunidadesdeusuarios.net/recursosentrenamiento/wc0104.zip"&gt;M&amp;oacute;dulo 4: Creando aplicaciones orientadas a objetos con Visual Basic .NET y Visual C#&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=146470" width="1" height="1"&gt;</content><author><name>mredison</name><uri>http://geeks.ms/members/mredison/default.aspx</uri></author><category term="MCTS" scheme="http://geeks.ms/blogs/mredison/archive/tags/MCTS/default.aspx" /></entry><entry><title>Tip: Manejo de Archivos CSV con SQL Server</title><link rel="alternate" type="text/html" href="/blogs/mredison/archive/2009/04/08/tip-manejo-de-archivos-csv-con-sql-server.aspx" /><id>/blogs/mredison/archive/2009/04/08/tip-manejo-de-archivos-csv-con-sql-server.aspx</id><published>2009-04-08T15:26:12Z</published><updated>2009-04-08T15:26:12Z</updated><content type="html">&lt;p&gt;&lt;font color="#ff8000"&gt;Wikipedia&lt;/font&gt;: &lt;/p&gt;  &lt;p&gt;Los ficheros CSV (del inglés comma-separated values) son un tipo de documento sencillo para representar datos en forma de tabla, en las que las columnas se separan por comas (o punto y coma en donde la coma es el separador decimal: España, Francia, Italia...) y las filas por saltos de línea. Los campos que contengan una coma, un salto de línea o una comilla doble deben ser encerrados entre comillas dobles. &lt;/p&gt;  &lt;p&gt;El formato CSV es muy sencillo y no indica un juego de caracteres concreto, ni cómo van situados los bytes, ni el formato para el salto de línea. Estos puntos deben indicarse muchas veces al abrir el fichero, por ejemplo, con una hoja de cálculo.&lt;/p&gt;  &lt;p&gt;Fuente: &lt;a title="http://es.wikipedia.org/wiki/CSV" href="http://es.wikipedia.org/wiki/CSV"&gt;http://es.wikipedia.org/wiki/CSV&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;¿Cómo sacar provecho de este tipo de archivos en SQL Server?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:d9968675-737c-4445-90e9-aed3f4bb0ae7" class="wlWriterEditableSmartContent"&gt;&lt;pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;overflow:auto;"&gt;&lt;span style="color:#0000FF;"&gt;CREATE&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;DATABASE&lt;/span&gt;&lt;span style="color:#000000;"&gt; ESCUELA
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;USE&lt;/span&gt;&lt;span style="color:#000000;"&gt;  ESCUELA

&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;CREATE&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;TABLE&lt;/span&gt;&lt;span style="color:#000000;"&gt; ALUMNOS(
    NOCONTROL &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;INT&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;NOT&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;NULL&lt;/span&gt;&lt;span style="color:#000000;"&gt;,
    NOMBRE &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#800000;font-weight:bold;"&gt;50&lt;/span&gt;&lt;span style="color:#000000;"&gt;) &lt;/span&gt;&lt;span style="color:#808080;"&gt;NOT&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;NULL&lt;/span&gt;&lt;span style="color:#000000;"&gt;,
    SEMESTRE &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;INT&lt;/span&gt;&lt;span style="color:#000000;"&gt;
)
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;ALTER&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;TABLE&lt;/span&gt;&lt;span style="color:#000000;"&gt; ALUMNOS &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;ADD&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;CONSTRAINT&lt;/span&gt;&lt;span style="color:#000000;"&gt; PK_ALUMNOS &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;PRIMARY&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;KEY&lt;/span&gt;&lt;span style="color:#000000;"&gt;(NOCONTROL)&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;br /&gt;&lt;/div&gt;

&lt;div class="csharpcode-wrapper"&gt;Tenemos este ejemplo muy sencillo de una tabla Alumnos.&lt;/div&gt;

&lt;div class="csharpcode-wrapper"&gt;&amp;#160;&lt;/div&gt;

&lt;div class="csharpcode-wrapper"&gt;Ahora vamos a utilizar un archivo CSV, pueden crearlo desde notepad o Microsoft Excel y guardarlo como .csv, en este caso puede utilizar comas para separar entre campos.&lt;/div&gt;

&lt;div class="csharpcode-wrapper"&gt;&amp;#160;&lt;/div&gt;

&lt;div class="csharpcode-wrapper"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mredison/ARCHIVOSCVS_5F00_21325EC1.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="ARCHIVOSCVS" border="0" alt="ARCHIVOSCVS" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mredison/ARCHIVOSCVS_5F00_thumb_5F00_386D3D65.png" width="491" height="193" /&gt;&lt;/a&gt; &lt;/div&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;br /&gt;&lt;/div&gt;

&lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:31371f6e-0764-4e90-ae57-527cec51025a" class="wlWriterEditableSmartContent"&gt;&lt;pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;overflow:auto;"&gt;&lt;span style="color:#0000FF;"&gt;BULK&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color:#000000;"&gt; ALUMNOS 
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;FROM&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;c:\Alumnos.csv&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt; 
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;WITH&lt;/span&gt;&lt;span style="color:#000000;"&gt; 
    ( 
        FIRSTROW &lt;/span&gt;&lt;span style="color:#808080;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#800000;font-weight:bold;"&gt;1&lt;/span&gt;&lt;span style="color:#000000;"&gt;, 
        MAXERRORS &lt;/span&gt;&lt;span style="color:#808080;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#800000;font-weight:bold;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt;, 
        FIELDTERMINATOR &lt;/span&gt;&lt;span style="color:#808080;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;,&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, 
        ROWTERMINATOR &lt;/span&gt;&lt;span style="color:#808080;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;\n&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt; 
    )
    &lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
  &lt;br /&gt;&lt;/div&gt;

&lt;div class="csharpcode-wrapper"&gt;Ahora ocuparemos una sentencia T-SQL llamada BULK INSERT con este comando puedes importar algun documento a sql server desde un txt, xml, etc. y agregar registros a la tabla correspondiente.&lt;/div&gt;

&lt;div class="csharpcode-wrapper"&gt;&amp;#160;&lt;/div&gt;

&lt;div class="csharpcode-wrapper"&gt;Damos un select a la tabla alumnos.&lt;/div&gt;

&lt;div class="csharpcode-wrapper"&gt;&amp;#160;&lt;/div&gt;

&lt;div class="csharpcode-wrapper"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mredison/ARCHIVOSCVS2_5F00_0852C617.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="ARCHIVOSCVS2" border="0" alt="ARCHIVOSCVS2" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mredison/ARCHIVOSCVS2_5F00_thumb_5F00_5365C0D9.png" width="240" height="197" /&gt;&lt;/a&gt; 

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Muy práctico para agregar registros a una tabla desde script.&lt;/p&gt;

&lt;p&gt;Saludos.&lt;/p&gt;

&lt;p&gt;Edison Daniel García Chiñas&amp;#160; | Microsoft Student Partner&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=146469" width="1" height="1"&gt;</content><author><name>mredison</name><uri>http://geeks.ms/members/mredison/default.aspx</uri></author><category term="SQL SERVER 2008" scheme="http://geeks.ms/blogs/mredison/archive/tags/SQL+SERVER+2008/default.aspx" /></entry><entry><title>Microsoft Data Access Application Block</title><link rel="alternate" type="text/html" href="/blogs/mredison/archive/2009/04/08/microsoft-data-access-application-block.aspx" /><id>/blogs/mredison/archive/2009/04/08/microsoft-data-access-application-block.aspx</id><published>2009-04-08T15:16:25Z</published><updated>2009-04-08T15:16:25Z</updated><content type="html">&lt;p&gt;Son pequeñas clases que nos ayudan mucho a los desarrolladores, en este caso para manipular los datos desde código, existe un archivo llamado &lt;strong&gt;SQLHelper&lt;/strong&gt; que contiene métodos reutilizables para llamar procedimientos almacenados y comandos SQL en forma de texto.&lt;/p&gt;  &lt;p&gt;Les recomiendo que lo descarguen y lo utilizen para sus proyectos.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyID=f63d1f0a-9877-4a7b-88ec-0426b48df275&amp;amp;displaylang=en"&gt;URL: http://www.microsoft.com/downloads/details.aspx?FamilyID=f63d1f0a-9877-4a7b-88ec-0426b48df275&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=146468" width="1" height="1"&gt;</content><author><name>mredison</name><uri>http://geeks.ms/members/mredison/default.aspx</uri></author><category term="C#" scheme="http://geeks.ms/blogs/mredison/archive/tags/C_2300_/default.aspx" /><category term="SQL SERVER 2008" scheme="http://geeks.ms/blogs/mredison/archive/tags/SQL+SERVER+2008/default.aspx" /></entry><entry><title>Servidor Web HTTP, FTP, HTTPs en Windows Server 2008</title><link rel="alternate" type="text/html" href="/blogs/mredison/archive/2009/02/26/servidor-web-http-ftp-https-en-windows-server-2008.aspx" /><id>/blogs/mredison/archive/2009/02/26/servidor-web-http-ftp-https-en-windows-server-2008.aspx</id><published>2009-02-27T02:47:49Z</published><updated>2009-02-27T02:47:49Z</updated><content type="html">&lt;p&gt;&lt;em&gt;&lt;strong&gt;Como instalar un servidor HTTP en Windows Server 2008:&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;1.- Vaya a Inicio – &lt;strong&gt;Server Manager&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis01.jpg"&gt;&lt;img title="InstallIIS01" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="378" alt="InstallIIS01" src="http://mredison.files.wordpress.com/2009/02/installiis01-thumb.jpg" width="270" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;   &lt;p&gt;&lt;/p&gt;  &lt;p&gt;2.-Vaya a &lt;strong&gt;Roles&lt;/strong&gt; y de agregar un &lt;strong&gt;Rol&lt;/strong&gt; o función&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis02.jpg"&gt;&lt;img title="InstallIIS02" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="298" alt="InstallIIS02" src="http://mredison.files.wordpress.com/2009/02/installiis02-thumb.jpg" width="413" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;3.- Escoga de la lista la función &lt;strong&gt;Web Server (IIS) &lt;/strong&gt;y de clic en siguiente:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis03.jpg"&gt;&lt;img title="InstallIIS03" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="307" alt="InstallIIS03" src="http://mredison.files.wordpress.com/2009/02/installiis03-thumb.jpg" width="419" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;4.-Active todas las casillas.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis04.jpg"&gt;&lt;img title="InstallIIS04" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="338" alt="InstallIIS04" src="http://mredison.files.wordpress.com/2009/02/installiis04-thumb.jpg" width="427" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;5.- Una vez seleccionadas de clic en Instalar.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis05.jpg"&gt;&lt;img title="InstallIIS05" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="315" alt="InstallIIS05" src="http://mredison.files.wordpress.com/2009/02/installiis05-thumb.jpg" width="427" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis06.jpg"&gt;&lt;img title="InstallIIS06" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="318" alt="InstallIIS06" src="http://mredison.files.wordpress.com/2009/02/installiis06-thumb.jpg" width="431" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;6.- Active el servicio de FTP Publising para utilizarlo más adelante.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis07.jpg"&gt;&lt;img title="InstallIIS07" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="313" alt="InstallIIS07" src="http://mredison.files.wordpress.com/2009/02/installiis07-thumb.jpg" width="437" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;7.- Abra un explorador Web y teclee &lt;a href="http://localhost"&gt;http://localhost&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis071.jpg"&gt;&lt;img title="InstallIIS07-1" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="322" alt="InstallIIS07-1" src="http://mredison.files.wordpress.com/2009/02/installiis071-thumb.jpg" width="430" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;8.- Cree una carpeta para colocar su sitio web, puede eliminar los archivos iistart y welcome.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis072.jpg"&gt;&lt;img title="InstallIIS07-2" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="320" alt="InstallIIS07-2" src="http://mredison.files.wordpress.com/2009/02/installiis072-thumb.jpg" width="427" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;9.- Cheque en C:/inetpub/&amp;#160; existen dos carpetas wwwroot y ftproot.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis073.jpg"&gt;&lt;img title="InstallIIS07-3" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="322" alt="InstallIIS07-3" src="http://mredison.files.wordpress.com/2009/02/installiis073-thumb.jpg" width="430" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;10.-El siguiente paso es ir a IIS 7, existen dos formas, una es por medio de las &lt;strong&gt;Herramientas Administrativas&lt;/strong&gt; – IIS y la otra en ejecutar colocamos el comando &lt;strong&gt;inetmgr.exe&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis08.jpg"&gt;&lt;img title="InstallIIS08" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="440" alt="InstallIIS08" src="http://mredison.files.wordpress.com/2009/02/installiis08-thumb.jpg" width="429" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;11.-Estando en IIS7, vamos agregar un nuevo sitio web y apuntando a la carpeta que creo anteriormente, recuerdo asignar la ip, puede ser la de su computadora en modo privada para forma local, o una ip pública.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis09.jpg"&gt;&lt;img title="InstallIIS09" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="338" alt="InstallIIS09" src="http://mredison.files.wordpress.com/2009/02/installiis09-thumb.jpg" width="422" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;12.- Coloque los archivos de su sitio web en la carpeta, en este caso haré un &lt;strong&gt;index.htm&lt;/strong&gt; de prueba.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis10.jpg"&gt;&lt;img title="InstallIIS10" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="181" alt="InstallIIS10" src="http://mredison.files.wordpress.com/2009/02/installiis10-thumb.jpg" width="398" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;13.- Vaya a &lt;a href="http://localhost"&gt;http://localhost&lt;/a&gt; si no asigno ninguna ip anteriormente o a &lt;a href="http://direccionIp"&gt;http://direccionIp&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis11.jpg"&gt;&lt;img title="InstallIIS11" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="275" alt="InstallIIS11" src="http://mredison.files.wordpress.com/2009/02/installiis11-thumb.jpg" width="431" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Como instalar un servidor FTP&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;1.- Primer paso entrar al IIS 7 e ir a la opción FTP Sites. Abrir el Internet Information Services 6.0.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis12.jpg"&gt;&lt;img title="InstallIIS12" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="140" alt="InstallIIS12" src="http://mredison.files.wordpress.com/2009/02/installiis12-thumb.jpg" width="426" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2.- Agregar un nuevo Sitio FTP.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis13.jpg"&gt;&lt;img title="InstallIIS13" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="296" alt="InstallIIS13" src="http://mredison.files.wordpress.com/2009/02/installiis13-thumb.jpg" width="423" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;3.- Colocar una descripción&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis14.jpg"&gt;&lt;img title="InstallIIS14" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="269" alt="InstallIIS14" src="http://mredison.files.wordpress.com/2009/02/installiis14-thumb.jpg" width="347" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;4.- Asignar alguna dirección IP y el puerto 21.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis15.jpg"&gt;&lt;img title="InstallIIS15" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="267" alt="InstallIIS15" src="http://mredison.files.wordpress.com/2009/02/installiis15-thumb.jpg" width="343" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;5.- Dar en &lt;strong&gt;Do not isolate users. &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis16.jpg"&gt;&lt;img title="InstallIIS16" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="266" alt="InstallIIS16" src="http://mredison.files.wordpress.com/2009/02/installiis16-thumb.jpg" width="342" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;6.- Apuntar a la carpeta c:\inetpub\ftproot&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis17.jpg"&gt;&lt;img title="InstallIIS17" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="292" alt="InstallIIS17" src="http://mredison.files.wordpress.com/2009/02/installiis17-thumb.jpg" width="377" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;7.- Agregar algunos archivos a esa carpeta y checarlo en el IIS.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis18.jpg"&gt;&lt;img title="InstallIIS18" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="335" alt="InstallIIS18" src="http://mredison.files.wordpress.com/2009/02/installiis18-thumb.jpg" width="362" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;8.- Cheque tecleando &lt;a&gt;ftp://direccionIP&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis19.jpg"&gt;&lt;img title="InstallIIS19" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="325" alt="InstallIIS19" src="http://mredison.files.wordpress.com/2009/02/installiis19-thumb.jpg" width="287" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;9.- Es recomendable agregar cuenta de tipo Everyone para que puedan acceder al servidor ftp.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis20.jpg"&gt;&lt;img title="InstallIIS20" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="296" alt="InstallIIS20" src="http://mredison.files.wordpress.com/2009/02/installiis20-thumb.jpg" width="243" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;También es importante en el windows Firewall, tener activado la excepción de FTP Server.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis21.jpg"&gt;&lt;img title="InstallIIS21" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="313" alt="InstallIIS21" src="http://mredison.files.wordpress.com/2009/02/installiis21-thumb.jpg" width="267" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;10.- Si se requiere ver en internet con el modem de Infinitum puedes hacer entrando a la configuración y agregando el servicio de servidor FTP a la computadora, este te dará una dirección ip pública el cual le tendrás que asignar con los pasos anteriores.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis22.jpg"&gt;&lt;img title="InstallIIS22" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="270" alt="InstallIIS22" src="http://mredison.files.wordpress.com/2009/02/installiis22-thumb.jpg" width="341" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Como instalar un servidor HTTPs&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;1.- Vaya al servidor IIS y de clic en Server Certifications&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis23.jpg"&gt;&lt;img title="InstallIIS23" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="288" alt="InstallIIS23" src="http://mredison.files.wordpress.com/2009/02/installiis23-thumb.jpg" width="399" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2.- Agregue un certificado, dando clic en Create Self-Signed Certificate&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis24.jpg"&gt;&lt;img title="InstallIIS24" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="305" alt="InstallIIS24" src="http://mredison.files.wordpress.com/2009/02/installiis24-thumb.jpg" width="409" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;3.- Vaya a su sitio web y seleccione la opción &lt;strong&gt;Bindings&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis25.jpg"&gt;&lt;img title="InstallIIS25" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="173" alt="InstallIIS25" src="http://mredison.files.wordpress.com/2009/02/installiis25-thumb.jpg" width="195" border="0" /&gt;&lt;/a&gt; &lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;4.- De agregar y seleccione tipo https, la ip y el puerto 443, y el certificado creado.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis251.jpg"&gt;&lt;img title="InstallIIS25-1" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="291" alt="InstallIIS25-1" src="http://mredison.files.wordpress.com/2009/02/installiis251-thumb.jpg" width="384" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;5.- Una vez hecho eso, tendrá algo de esta forma:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis26.jpg"&gt;&lt;img title="InstallIIS26" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="160" alt="InstallIIS26" src="http://mredison.files.wordpress.com/2009/02/installiis26-thumb.jpg" width="399" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;6.- Vaya a un explorador web y teclee &lt;a href="https://direccionIp"&gt;https://direccionIp&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Verá algo como esto:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis27.jpg"&gt;&lt;img title="InstallIIS27" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="240" alt="InstallIIS27" src="http://mredison.files.wordpress.com/2009/02/installiis27-thumb.jpg" width="229" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;7.- Clic en continuar.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2009/02/installiis28.jpg"&gt;&lt;img title="InstallIIS28" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="301" alt="InstallIIS28" src="http://mredison.files.wordpress.com/2009/02/installiis28-thumb.jpg" width="368" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;NOTA: Para Windows Vista se instala el IIS en Activar o Quitar Características de Windows.&lt;/p&gt;  &lt;p&gt;Importante, para las versiones Windows Vista Business, Ultimate, se puede activar la casilla de Servidor FTP, para las versiones Home, HomePremium solo el Web Server, y enWindows Vista Basic no soporta ASP.NET.&lt;/p&gt;  &lt;p&gt;De igual modo se hacen los pasos para Windows Vista.&lt;/p&gt;  &lt;p&gt;Saludos, cualquier pregunta por este medio.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=143540" width="1" height="1"&gt;</content><author><name>mredison</name><uri>http://geeks.ms/members/mredison/default.aspx</uri></author><category term="Windows Server 2008" scheme="http://geeks.ms/blogs/mredison/archive/tags/Windows+Server+2008/default.aspx" /></entry><entry><title>LINQ To SQL Classes Sample</title><link rel="alternate" type="text/html" href="/blogs/mredison/archive/2008/11/29/linq_2D00_to_2D00_sql_2D00_classes_2D00_sample.aspx" /><id>/blogs/mredison/archive/2008/11/29/linq_2D00_to_2D00_sql_2D00_classes_2D00_sample.aspx</id><published>2008-11-29T16:13:22Z</published><updated>2008-11-29T16:13:22Z</updated><content type="html">&lt;p&gt;Hola, he preparado un peque&amp;#241;o ejemplo muy sencillo, tal vez para aquellos que a&amp;#250;n est&amp;#233;n aprendiendo&lt;strong&gt; &lt;font color="#0080c0"&gt;LINQ y SQL Server&lt;/font&gt;&lt;/strong&gt;, este ejemplo se basa en como manejar datos con LINQ conect&amp;#225;ndose a un servidor de base de datos como &lt;font color="#0080c0"&gt;&lt;strong&gt;SQLEXPRESS&lt;/strong&gt; &lt;/font&gt;y a una base de datos de control de Alumnos, si quieren crear la tabla desde cero, aqu&amp;#237; les dejo el script:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;USE&lt;/span&gt; bdTecMina
&lt;span class="kwrd"&gt;GO&lt;/span&gt;
&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt; Alumnos
(
    AlumnoID nvarchar(10),
    Nombre     nvarchar(40),
    Semestre nvarchar(3),
    &lt;span class="kwrd"&gt;CONSTRAINT&lt;/span&gt; &amp;quot;PK_Alumnos&amp;quot; &lt;span class="kwrd"&gt;PRIMARY&lt;/span&gt; &lt;span class="kwrd"&gt;KEY&lt;/span&gt; &lt;span class="kwrd"&gt;CLUSTERED&lt;/span&gt;(AlumnoID),
)

INSERT &lt;span class="kwrd"&gt;INTO&lt;/span&gt; Alumnos &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(&lt;span class="str"&gt;&amp;#39;05231104&amp;#39;&lt;/span&gt;,&lt;span class="str"&gt;&amp;#39;Edison Garc&amp;#237;a&amp;#39;&lt;/span&gt;,&lt;span class="str"&gt;&amp;#39;7&amp;#39;&lt;/span&gt;)
INSERT &lt;span class="kwrd"&gt;INTO&lt;/span&gt; Alumnos &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(&lt;span class="str"&gt;&amp;#39;05231106&amp;#39;&lt;/span&gt;,&lt;span class="str"&gt;&amp;#39;Abraham Gomez Garc&amp;#237;a&amp;#39;&lt;/span&gt;,&lt;span class="str"&gt;&amp;#39;9&amp;#39;&lt;/span&gt;)
INSERT &lt;span class="kwrd"&gt;INTO&lt;/span&gt; Alumnos &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(&lt;span class="str"&gt;&amp;#39;05231108&amp;#39;&lt;/span&gt;,&lt;span class="str"&gt;&amp;#39;Alejandre Carvajal&amp;#39;&lt;/span&gt;,&lt;span class="str"&gt;&amp;#39;7&amp;#39;&lt;/span&gt;)
INSERT &lt;span class="kwrd"&gt;INTO&lt;/span&gt; Alumnos &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(&lt;span class="str"&gt;&amp;#39;06231110&amp;#39;&lt;/span&gt;,&lt;span class="str"&gt;&amp;#39;Luis Armando&amp;#39;&lt;/span&gt;,&lt;span class="str"&gt;&amp;#39;10&amp;#39;&lt;/span&gt;)&lt;/pre&gt;

&lt;p&gt;Ahora necesitaremos crear un&lt;font color="#ff8040"&gt; Procedimiento Almacenado&lt;/font&gt; llamado &lt;strong&gt;&lt;font color="#0080c0"&gt;InsertarAlumno&lt;/font&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; ANSI_NULLS &lt;span class="kwrd"&gt;ON&lt;/span&gt;
&lt;span class="kwrd"&gt;GO&lt;/span&gt;
&lt;span class="kwrd"&gt;SET&lt;/span&gt; QUOTED_IDENTIFIER &lt;span class="kwrd"&gt;ON&lt;/span&gt;
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;PROCEDURE&lt;/span&gt; dbo.InsertarAlumno
(
    @AlumnoID &lt;span class="kwrd"&gt;nchar&lt;/span&gt;(5),
    @Nombre      nvarchar(40),
    @Semestre &lt;span class="kwrd"&gt;nchar&lt;/span&gt;(3)
)
&lt;span class="kwrd"&gt;AS&lt;/span&gt;
    &lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; Alumnos
    (
        AlumnoID,    
        Nombre,
        Semestre
    )
    &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;
    (
        @AlumnoID,
        @Nombre,
        @Semestre
    )
GO&lt;/pre&gt;

&lt;p&gt;Creamos nuestro proyecto Windows Forms, y a&amp;#241;adimos un nuevo elemento en el explorador de soluciones (Solution Explorer), y escogemos LINQ TO SQL Classes, pueden colocar cualquier nombre a su datacontext. (dml) a continuaci&amp;#243;n se conectan al servidor de base de datos que tengan instalado, si tienen SQLEXPRESS se conectan y escogen la base de datos bdTecMina o la que hayan creado, y arrastran la Tabla Alumnos al dise&amp;#241;ador.&lt;/p&gt;

&lt;p&gt;A continuaci&amp;#243;n buscan el Procedimiento Almacenado (Store Procedure) y lo colocan en el espacio que se marca en la figura de abajo.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/LINQToSQLClassesSample_81E7/linqtosqlclasessample01_2.jpg"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" alt="linqtosqlclasessample01" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/LINQToSQLClassesSample_81E7/linqtosqlclasessample01_thumb.jpg" width="498" height="290" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Dar clic para agrandar las im&amp;#225;genes]&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/LINQToSQLClassesSample_81E7/linqtosqlclasessample02_2.jpg"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" alt="linqtosqlclasessample02" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/LINQToSQLClassesSample_81E7/linqtosqlclasessample02_thumb.jpg" width="499" height="289" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Seleccionamos a continuaci&amp;#243;n la tabla Alumnos y en sus propiedades seleccionamos Insert.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/LINQToSQLClassesSample_81E7/linqtosqlclasessample03_2.jpg"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" alt="linqtosqlclasessample03" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/LINQToSQLClassesSample_81E7/linqtosqlclasessample03_thumb.jpg" width="498" height="290" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Seleccionamos el Procedimiento Almacenado que hab&amp;#237;amos agregado al dise&amp;#241;ador.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/LINQToSQLClassesSample_81E7/linqtosqlclasessample04_2.jpg"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" alt="linqtosqlclasessample04" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/LINQToSQLClassesSample_81E7/linqtosqlclasessample04_thumb.jpg" width="497" height="431" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Nos vamos a dise&amp;#241;ar nuestro formulario, muy simple pero es para hacer las pruebas.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/LINQToSQLClassesSample_81E7/linqtosqlclasessample05_2.jpg"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" alt="linqtosqlclasessample05" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/LINQToSQLClassesSample_81E7/linqtosqlclasessample05_thumb.jpg" width="490" height="343" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Declaramos nuestro dataContext:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;        bdSistemaDataContext db = &lt;span class="kwrd"&gt;new&lt;/span&gt; bdSistemaDataContext();&lt;/pre&gt;

&lt;p&gt;Agregamos el siguiente c&amp;#243;digo para el bot&amp;#243;n de Agregar:&lt;/p&gt;

&lt;pre class="csharpcode"&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; button1_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
        
            &lt;span class="kwrd"&gt;string&lt;/span&gt; AlumnoID = txtID.Text;
            &lt;span class="kwrd"&gt;string&lt;/span&gt; Nombre = txtNombre.Text;
            &lt;span class="kwrd"&gt;string&lt;/span&gt; Semestre = txtSemestre.Text;
            &lt;span class="kwrd"&gt;try&lt;/span&gt;
            {
                db.InsertarAlumno(AlumnoID, Nombre, Semestre);
                db.SubmitChanges();
                MessageBox.Show(&lt;span class="str"&gt;&amp;quot;Se ha agregado correctamente&amp;quot;&lt;/span&gt;);

            }
            &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)
            {
                MessageBox.Show(&lt;span class="str"&gt;&amp;quot;Ha ocurrido un error&amp;quot;&lt;/span&gt;);
            }
            &lt;span class="kwrd"&gt;finally&lt;/span&gt;
            {
                txtID.Text = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;
                txtNombre.Text = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;
                txtSemestre.Text = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;  

            }          
        }&lt;/pre&gt;

&lt;p&gt;En donde solo paso los valores de los textBoxs a variables string y de ahi al m&amp;#233;todo del procedimiento almacenado, guardo los cambios y limpio los cuadros de textos.&lt;/p&gt;

&lt;p&gt;Despu&amp;#233;s visualizando en el DataGridView el c&amp;#243;digo queda as&amp;#237;:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; button2_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            var consulta = from alu &lt;span class="kwrd"&gt;in&lt;/span&gt; db.Alumnos
                           select alu;
            dataGridView1.Refresh();
            dataGridView1.DataSource = consulta.ToList();
        }&lt;/pre&gt;

&lt;p&gt;Hago una peque&amp;#241;a consulta en LINQ mostrando todos los elementos de la tabla Alumnos en el dataGridView.&lt;/p&gt;

&lt;p&gt;Damos F5 y tenemos lo siguiente:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/LINQToSQLClassesSample_81E7/linqtosqlclasessample06_2.jpg"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" alt="linqtosqlclasessample06" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/LINQToSQLClassesSample_81E7/linqtosqlclasessample06_thumb.jpg" width="508" height="334" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/LINQToSQLClassesSample_81E7/linqtosqlclasessample07_2.jpg"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" alt="linqtosqlclasessample07" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/LINQToSQLClassesSample_81E7/linqtosqlclasessample07_thumb.jpg" width="497" height="342" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a target="_blank" href="http://w6cebg.bay.livefilestore.com/y1p0DRnZ3glxxlKOgKZ0jgKNcGGMWZ67FEVPFOkLtcVj3o_LTpnDC8_k7MmDcelQ_A4I6d0Gpc8nuaXhbf2qu0gvg/Codigo_LinqToSQLClasses.txt"&gt;Descarga el c&amp;#243;digo de este ejemplo&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Saludos, espero este peque&amp;#241;o ejemplo sea de mucha utilidad, nos vemos en otro post con los siguientes m&amp;#233;todos.&lt;/p&gt;

&lt;p&gt;PD:Si te ha gustado este post, vota por mi blog (&lt;em&gt;mredison.wordpress.com&lt;/em&gt;) en &lt;a href="http://blogit.ms"&gt;http://blogit.ms&lt;/a&gt; en la categor&amp;#237;a de SQL Server, te lo agradecer&amp;#233; mucho.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Edison Daniel Garc&amp;#237;a Chi&amp;#241;as&lt;/strong&gt; 

  &lt;br /&gt;Microsoft Student Partner | M&amp;#233;xico&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=122290" width="1" height="1"&gt;</content><author><name>mredison</name><uri>http://geeks.ms/members/mredison/default.aspx</uri></author><category term="LINQ" scheme="http://geeks.ms/blogs/mredison/archive/tags/LINQ/default.aspx" /><category term="C#" scheme="http://geeks.ms/blogs/mredison/archive/tags/C_2300_/default.aspx" /></entry><entry><title>Maratón SQL SERVER 2008</title><link rel="alternate" type="text/html" href="/blogs/mredison/archive/2008/08/21/maratn_2D00_sql_2D00_server_2D00_2008.aspx" /><id>/blogs/mredison/archive/2008/08/21/maratn_2D00_sql_2D00_server_2D00_2008.aspx</id><published>2008-08-22T02:54:55Z</published><updated>2008-08-22T02:54:55Z</updated><content type="html">&lt;p&gt;Les comparto los videos de la maratón SQL:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Gestión del Servidor mediante facetas  &lt;li&gt;Diseño de cubos con Analysis Services  &lt;li&gt;Introducción al Declarative Management Framework  &lt;li&gt;Instalando SQL Server 2008 en Windows Server 2008  &lt;li&gt;Manejo de recursos mediante Resource Governor  &lt;li&gt;Nuevos tipos de datos en SQL Server 2008  &lt;li&gt;Compresión de datos en SQL Server 2008  &lt;li&gt;Monitoreando el desempeño mediante Performance Data Collector  &lt;li&gt;Administración mediante Políticas 1  &lt;li&gt;Administración mediante Políticas 2  &lt;li&gt;Administración mediante Políticas 3&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/MaratnSQLSERVER2008_1339B/pag_tech_landing_heroes_2.gif"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="150" alt="pag_tech_landing_heroes" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/MaratnSQLSERVER2008_1339B/pag_tech_landing_heroes_thumb.gif" width="491" border="0" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;URL: &lt;/strong&gt;&lt;a title="http://www.microsoft.com/latam/technet/maratonsql/" href="http://www.microsoft.com/latam/technet/maratonsql/"&gt;&lt;strong&gt;http://www.microsoft.com/latam/technet/maratonsql/&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=95552" width="1" height="1"&gt;</content><author><name>mredison</name><uri>http://geeks.ms/members/mredison/default.aspx</uri></author><category term="SQL SERVER 2008" scheme="http://geeks.ms/blogs/mredison/archive/tags/SQL+SERVER+2008/default.aspx" /></entry><entry><title>Personalizar una Instalación Silverlight</title><link rel="alternate" type="text/html" href="/blogs/mredison/archive/2008/08/21/personalizar_2D00_una_2D00_instalacin_2D00_silverlight.aspx" /><id>/blogs/mredison/archive/2008/08/21/personalizar_2D00_una_2D00_instalacin_2D00_silverlight.aspx</id><published>2008-08-22T01:42:17Z</published><updated>2008-08-22T01:42:17Z</updated><content type="html">&lt;p&gt;A veces cuando desarrollamos aplicaciones Silverlight, cuando le decimos a un amigo, compañero, etc, cheque nuestra aplicación en el Internet, por lo regular no tienen instalado el plugin de Silverlight, como a continuación:&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/PersonalizarunaInstalacinSilverlight_1217F/PersonalizateSilverlightInstallation_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="305" alt="PersonalizateSilverlightInstallation" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/PersonalizarunaInstalacinSilverlight_1217F/PersonalizateSilverlightInstallation_thumb.jpg" width="524" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;El usuario no tiene idea de que debe instalar el plugin, o para que me va a servir eso, que pasa usualmente, si una persona que no conoce esa tecnología cerraría la página.&lt;/p&gt; &lt;p&gt;Como podemos detener o cambiar eso, simplemente personalizandolo, de esta forma:&lt;/p&gt; &lt;p&gt;Supongamos que estamos en nuestro proyecto Silverlight y tenemos el siguiente código:;&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/PersonalizarunaInstalacinSilverlight_1217F/PersonalizateSilverlightInstallation1_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="166" alt="PersonalizateSilverlightInstallation1" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/PersonalizarunaInstalacinSilverlight_1217F/PersonalizateSilverlightInstallation1_thumb.jpg" width="544" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Lo que debemos hacer es lo siguiente dentro del tag asp:Silverlight tenemos una propiedad llamada &lt;strong&gt;PluginNotInstalledTemplate, &lt;/strong&gt;que va a hacer la que nos permitira personalizar esta instalación.&lt;/p&gt; &lt;p&gt;Añadimos una imagen personalizada.&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/PersonalizarunaInstalacinSilverlight_1217F/PersonalizateSilverlightInstallation2_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="277" alt="PersonalizateSilverlightInstallation2" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/PersonalizarunaInstalacinSilverlight_1217F/PersonalizateSilverlightInstallation2_thumb.jpg" width="277" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Agregamos lo siguiente:&lt;/p&gt; &lt;p&gt;&amp;lt;PluginNotInstalledTemplate&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;lt;img src=&amp;quot;logoPersonalizado.png&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;br /&amp;gt;&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;a href=&lt;a href="http://go.microsoft.com/fwlink/?LinkID=115261"&gt;http://go.microsoft.com/fwlink/?LinkID=115261&lt;/a&gt; a style=&amp;quot;text-decoration: none;&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;img src=&amp;quot;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=108181&amp;quot;"&gt;http://go.microsoft.com/fwlink/?LinkId=108181&amp;quot;&lt;/a&gt; alt=&amp;quot;Obtener el plugin de&amp;nbsp; Silverlight&amp;quot; style=&amp;quot;border-style: none &amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/PluginNotInstalledTemplate&amp;gt;&lt;/p&gt; &lt;p&gt;Ejecutamos y listo.&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/PersonalizarunaInstalacinSilverlight_1217F/PersonalizateSilverlightInstallation3_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="544" alt="PersonalizateSilverlightInstallation3" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/PersonalizarunaInstalacinSilverlight_1217F/PersonalizateSilverlightInstallation3_thumb.jpg" width="456" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Esto hará que el usuario no cierre nuestra página web y se anime a instalar el plugin.&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/PersonalizarunaInstalacinSilverlight_1217F/PersonalizateSilverlightInstallation4_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="564" alt="PersonalizateSilverlightInstallation4" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/PersonalizarunaInstalacinSilverlight_1217F/PersonalizateSilverlightInstallation4_thumb.jpg" width="454" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Espero lo puedan implementar en sus websites que ya cuenten con contenido Silverlight. Recuerden siempre la experiencia de usuario!!&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=95547" width="1" height="1"&gt;</content><author><name>mredison</name><uri>http://geeks.ms/members/mredison/default.aspx</uri></author><category term="Silverlight" scheme="http://geeks.ms/blogs/mredison/archive/tags/Silverlight/default.aspx" /></entry><entry><title>Curso E-Learning Silverlight</title><link rel="alternate" type="text/html" href="/blogs/mredison/archive/2008/08/18/curso_2D00_e_2D00_learning_2D00_silverlight.aspx" /><id>/blogs/mredison/archive/2008/08/18/curso_2D00_e_2D00_learning_2D00_silverlight.aspx</id><published>2008-08-19T04:33:58Z</published><updated>2008-08-19T04:33:58Z</updated><content type="html">&lt;p&gt;Les comparto el siguiente curso muy interesante sobre Silverlight, esta muy bueno, espero les sirva mucho.&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/CursoELearningSilverlight_14ABD/Silve3rlightelearning_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="343" alt="Silve3rlightelearning" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/CursoELearningSilverlight_14ABD/Silve3rlightelearning_thumb.jpg" width="485" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/CursoELearningSilverlight_14ABD/Silve3rlightelearning01_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="322" alt="Silve3rlightelearning01" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/CursoELearningSilverlight_14ABD/Silve3rlightelearning01_thumb.jpg" width="490" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;URL:&lt;/strong&gt; &lt;a title="http://www.microsoft.com/learning/_silverlight/learningsnacks/silverlight/snack01/Default.html" href="http://www.microsoft.com/learning/_silverlight/learningsnacks/silverlight/snack01/Default.html"&gt;http://www.microsoft.com/learning/_silverlight/learningsnacks/silverlight/snack01/Default.html&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=95251" width="1" height="1"&gt;</content><author><name>mredison</name><uri>http://geeks.ms/members/mredison/default.aspx</uri></author><category term="Silverlight" scheme="http://geeks.ms/blogs/mredison/archive/tags/Silverlight/default.aspx" /></entry><entry><title>Importante - Atención MSPs y  estudiantes de TI de México!!</title><link rel="alternate" type="text/html" href="/blogs/mredison/archive/2008/08/18/importante_2D00_atencin_2D00_msps_2D00_estudiantes_2D00_de_2D00_ti_2D00_de_2D00_mxico_2D00_en_2D00_general.aspx" /><id>/blogs/mredison/archive/2008/08/18/importante_2D00_atencin_2D00_msps_2D00_estudiantes_2D00_de_2D00_ti_2D00_de_2D00_mxico_2D00_en_2D00_general.aspx</id><published>2008-08-18T21:26:44Z</published><updated>2008-08-18T21:26:44Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;&lt;a href="http://s2bprogram.com/Mexico" target="_blank"&gt;Microsoft Students To Business&lt;/a&gt;&lt;/strong&gt; ha posteado &lt;em&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;/em&gt; vacantes para trabajar en Microsoft, México, a continuación los detalles.&lt;/p&gt; &lt;h5&gt;Información del Proyecto&lt;/h5&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Nombre:&lt;/strong&gt; Development Consultant Trainee  &lt;li&gt;&lt;strong&gt;Fecha de Inicio&lt;/strong&gt; 21/08/2008  &lt;li&gt;&lt;strong&gt;Fecha de Terminación&lt;/strong&gt; 21/08/2009  &lt;li&gt;&lt;strong&gt;Duración&lt;/strong&gt; 1año  &lt;li&gt;&lt;strong&gt;Lugares Disponibles&lt;/strong&gt; 10  &lt;li&gt;&lt;strong&gt;Lugares restantes&lt;/strong&gt; 9  &lt;li&gt;&lt;strong&gt;Ciudad:&lt;/strong&gt; Ciudad de México  &lt;li&gt;&lt;strong&gt;Región:&lt;/strong&gt; Distrito Federal  &lt;li&gt;&lt;strong&gt;País&lt;/strong&gt; Mexico  &lt;li&gt;&lt;strong&gt;Idiomas:&lt;/strong&gt; Ingles&lt;/li&gt;&lt;/ul&gt; &lt;h5&gt;Partner&lt;/h5&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Nombre:&lt;/strong&gt; Microsoft HR Mexico  &lt;li&gt;&lt;strong&gt;Web site:&lt;/strong&gt; &lt;a href="http://www.microsoft.com/latam/careers"&gt;http://www.microsoft.com/latam/careers&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;h5&gt;Habilidades de TI&lt;/h5&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;C#&lt;br /&gt;&lt;/strong&gt;Desktop Application  &lt;li&gt;&lt;strong&gt;.Net Framework 3.0&lt;br /&gt;&lt;/strong&gt;Desktop Application  &lt;li&gt;&lt;strong&gt;Visual Studio .Net&lt;br /&gt;&lt;/strong&gt;Client Tools  &lt;li&gt;&lt;strong&gt;ASP&lt;br /&gt;&lt;/strong&gt;Web Development  &lt;h5&gt;Tipos de Grado&lt;/h5&gt; &lt;li&gt;Bachelor Degree  &lt;h5&gt;Categorias en Curso&lt;/h5&gt; &lt;li&gt;Ciencias Computacionales  &lt;li&gt;Engineering&lt;/li&gt;&lt;/ul&gt; &lt;h5&gt;Archivos de proyecto&lt;/h5&gt; &lt;p&gt;&lt;a href="http://s2bprogram.com/Mexico/Download/DownloadFiles.aspx?Guid=c07bc325-55cf-4ddc-abc3-5457466131b4&amp;amp;Digest=53U1ue0U9RJp1Git7IeWSw"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="68" alt="wordPPP" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/ImportanteAtencinMSPsestudiantesdeTIdeMx_E59F/wordPPP_3.gif" width="68" align="left" border="0" /&gt;&lt;/a&gt;  &lt;ul&gt; &lt;li&gt;Development Consultant Trainee Job Description  &lt;li&gt;Job Description file. Word Version.  &lt;li&gt;&lt;i&gt;13,46 Kb &lt;/i&gt; &lt;li&gt;&lt;em&gt;&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Si cumples con este perfil, que esperás registrate inmediatamente en &lt;/p&gt; &lt;p&gt;&lt;strong&gt;URL:&lt;/strong&gt; &lt;a title="http://s2bprogram.com/Mexico" href="http://s2bprogram.com/Mexico"&gt;http://s2bprogram.com/Mexico&lt;/a&gt; y completa tu perfil con los conocimientos que tienes además, adjunta tu CV, en la opción de archivos que aparece ahi. &lt;/p&gt; &lt;p&gt;Nota: &lt;a href="http://s2bprogram.com/Mexico/Downloads.aspx" target="_blank"&gt;Tips para realizar tu CV aquí&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h2&gt;&lt;strong&gt;&lt;a href="http://s2bprogram.com/Mexico/Projects.aspx"&gt;URL:&lt;/strong&gt;http://s2bprogram.com/Mexico/Projects.aspx&lt;/a&gt;&lt;/h2&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=95237" width="1" height="1"&gt;</content><author><name>mredison</name><uri>http://geeks.ms/members/mredison/default.aspx</uri></author><category term="Microsoft Students to Business" scheme="http://geeks.ms/blogs/mredison/archive/tags/Microsoft+Students+to+Business/default.aspx" /></entry><entry><title>Academic Cells - Microsoft México</title><link rel="alternate" type="text/html" href="/blogs/mredison/archive/2008/08/18/academic_2D00_cells_2D00_microsoft_2D00_mxico.aspx" /><id>/blogs/mredison/archive/2008/08/18/academic_2D00_cells_2D00_microsoft_2D00_mxico.aspx</id><published>2008-08-18T17:29:14Z</published><updated>2008-08-18T17:29:14Z</updated><content type="html">&lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/AcademicCellsMicrosoftMxico_AEE7/y1pmShFkujlcjOYbvvQKxjlONBp5VMRdegJfJ70cX1b1R4tuMlII0K_AFR1muVLv97g_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="96" alt="y1pmShFkujlcjOYbvvQKxjlONBp5VMRdegJfJ70cX1b1R4tuMlII0K_AFR1muVLv97g" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/AcademicCellsMicrosoftMxico_AEE7/y1pmShFkujlcjOYbvvQKxjlONBp5VMRdegJfJ70cX1b1R4tuMlII0K_AFR1muVLv97g_thumb.jpg" width="180" align="left" border="0" /&gt;&lt;/a&gt; Hola que tal les hago una cordial invitación para que visiten el blog de &lt;b&gt;Ivette Pérez&lt;/b&gt;&lt;br /&gt;&lt;em&gt;(Community Operation Manager de Microsoft, México), &lt;/em&gt;en el cual pueden encontrar información de los diversos programas Academicos de Microsoft. &lt;/p&gt; &lt;p&gt;En estas fechas habrá un lanzamiento del programa para estudiantes llamado Microsoft Student Clubs, así para que esten al pendientes y puedan participar en este nuevo programa a nivel México no dejen de visitar este blog, además pueden encontrar noticias y convocatorias para Microsoft Student Partners, etc.&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;http://academiccellsms.spaces.live.com/&lt;/font&gt;&lt;/strong&gt;&lt;/h4&gt; &lt;p&gt;Información y Contacto:&lt;/p&gt; &lt;blockquote&gt; &lt;p align="left"&gt;&lt;b&gt;Ivette Pérez&lt;/b&gt; &lt;/p&gt; &lt;p align="left"&gt;Community Operation Manager , Microsoft México &lt;/p&gt; &lt;p align="left"&gt;academic_cells@hotmail.com&lt;/p&gt;&lt;/blockquote&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=95220" width="1" height="1"&gt;</content><author><name>mredison</name><uri>http://geeks.ms/members/mredison/default.aspx</uri></author><category term="Microsoft Mexico" scheme="http://geeks.ms/blogs/mredison/archive/tags/Microsoft+Mexico/default.aspx" /><category term="Academic Cells" scheme="http://geeks.ms/blogs/mredison/archive/tags/Academic+Cells/default.aspx" /></entry><entry><title>Atención Profesores de TI (Microsoft Educación)</title><link rel="alternate" type="text/html" href="/blogs/mredison/archive/2008/08/18/atencin_2D00_profesores_2D00_de_2D00_ti_2D00_microsoft_2D00_educacin.aspx" /><id>/blogs/mredison/archive/2008/08/18/atencin_2D00_profesores_2D00_de_2D00_ti_2D00_microsoft_2D00_educacin.aspx</id><published>2008-08-18T14:58:53Z</published><updated>2008-08-18T14:58:53Z</updated><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/AtencinProfesoresdeTIMicrosoftEducacin_8BA8/mssstudent_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="118" alt="mssstudent" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/AtencinProfesoresdeTIMicrosoftEducacin_8BA8/mssstudent_thumb.jpg" width="110" align="left" border="0" /&gt;&lt;/a&gt; Hola, que tal, de vez en cuando a los profesores se les hace muy dificil conseguir material para dar en clases. Microsoft nos deja unos buenos recursos.&lt;/p&gt; &lt;p&gt;Les comparto algunos, espero y les pueda servir, estos temas vienen con diapositivas, documentos de word, examenes, y ejercicios para los profesores.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.microsoft.com/education/facultyconnection/bz/articles/articledetails.aspx?cid=1410"&gt;Innovative Web Design Pilot Project Underway&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.microsoft.com/education/facultyconnection/bz/articles/articledetails.aspx?cid=450"&gt;Visual Web Developer Curriculum&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.microsoft.com/education/facultyconnection/bz/articles/articledetails.aspx?cid=531"&gt;Teaching Math with Technology&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.microsoft.com/education/facultyconnection/bz/articles/articledetails.aspx?cid=533"&gt;Career Interview: Melissa Federoff&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.microsoft.com/education/facultyconnection/bz/articles/articledetails.aspx?cid=446"&gt;Code Rules! Visual Basic Programming Course&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.microsoft.com/education/facultyconnection/bz/articles/articledetails.aspx?cid=523"&gt;Bits &amp;amp; Bytes&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.microsoft.com/education/facultyconnection/bz/articles/articledetails.aspx?cid=518"&gt;Scratch Programming Language&lt;/a&gt; (Lenguaje para Matematicas)  &lt;li&gt;&lt;a href="http://www.microsoft.com/education/facultyconnection/bz/articles/articledetails.aspx?cid=527"&gt;Beginning Developer Learning Center&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.microsoft.com/education/facultyconnection/bz/articles/articledetails.aspx?cid=449"&gt;Visual Basic .NET Projects for the Classroom&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=95212" width="1" height="1"&gt;</content><author><name>mredison</name><uri>http://geeks.ms/members/mredison/default.aspx</uri></author><category term="Microsoft Education" scheme="http://geeks.ms/blogs/mredison/archive/tags/Microsoft+Education/default.aspx" /></entry><entry><title>Microsoft Students to Business</title><link rel="alternate" type="text/html" href="/blogs/mredison/archive/2008/08/17/microsoft_2D00_students_2D00_to_2D00_business.aspx" /><id>/blogs/mredison/archive/2008/08/17/microsoft_2D00_students_2D00_to_2D00_business.aspx</id><published>2008-08-18T03:18:03Z</published><updated>2008-08-18T03:18:03Z</updated><content type="html">&lt;p&gt;Una iniciativa de la comunidad Microsoft, que pretende conectar la industria de Partners con las Universidades y Estudiantes del país proveyéndoles experiencia laboral en el campo real.&lt;/p&gt; &lt;p&gt;Con lo anterior se pretende brindar las habilidades y competencias necesarias para impulsar la innovación y empleo de las siguientes generaciones.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/MicrosoftStudentstoBusiness_104C3/s2bmexico02_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="325" alt="s2bmexico02" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/MicrosoftStudentstoBusiness_104C3/s2bmexico02_thumb.jpg" width="517" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;h5&gt;¿Por qué S2B?&lt;/h5&gt; &lt;ul&gt; &lt;li&gt;Forma escalable para generar talento de TI.  &lt;li&gt;Demuestra oportunidades en el sector de las TI.  &lt;li&gt;Crea nuevas oportunidades de empleo.  &lt;li&gt;Apoya a los requerimientos locales en la industria.  &lt;li&gt;Brinda a empresarios recursos motivados.  &lt;li&gt;Promueve el empleo en carreras de IT.  &lt;li&gt;Desarrolla estudiantes con mayor talento en tecnología &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;No lo pienses mas y únete a &lt;a title="http://www.s2bprogram.com/mexico" href="http://www.s2bprogram.com/latam"&gt;http://www.s2bprogram.com/latam&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Microsoft, Latinoamerica&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=95175" width="1" height="1"&gt;</content><author><name>mredison</name><uri>http://geeks.ms/members/mredison/default.aspx</uri></author><category term="Microsoft Students to Business" scheme="http://geeks.ms/blogs/mredison/archive/tags/Microsoft+Students+to+Business/default.aspx" /></entry><entry><title>Gratis E-book Microsoft Press - SQL Server 2008</title><link rel="alternate" type="text/html" href="/blogs/mredison/archive/2008/08/17/gratis-e-book-microsoft-press-sql-server-2008.aspx" /><id>/blogs/mredison/archive/2008/08/17/gratis-e-book-microsoft-press-sql-server-2008.aspx</id><published>2008-08-18T03:14:10Z</published><updated>2008-08-18T03:14:10Z</updated><content type="html">&lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/GratisEbookMicrosoftPressSQLServer2008_138AD/ms_sql_srv_cvr_2.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="187" alt="ms_sql_srv_cvr" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/GratisEbookMicrosoftPressSQLServer2008_138AD/ms_sql_srv_cvr_thumb.jpg" width="154" align="left" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Gratis 2 Cap&amp;#237;tulos&lt;/p&gt;  &lt;li&gt;Chapter 1: Policy-based Management&lt;/li&gt;  &lt;li&gt;Chapter 11: Transact-SQL Enhancement&lt;/li&gt;  &lt;p&gt;URL: &lt;a title="http://csna01.libredigital.com/" href="http://csna01.libredigital.com/"&gt;http://csna01.libredigital.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/GratisEbookMicrosoftPressSQLServer2008_138AD/MSPressLogo-Hero-Sm_2.gif"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="83" alt="MSPressLogo-Hero-Sm" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/GratisEbookMicrosoftPressSQLServer2008_138AD/MSPressLogo-Hero-Sm_thumb.gif" width="192" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=95174" width="1" height="1"&gt;</content><author><name>mredison</name><uri>http://geeks.ms/members/mredison/default.aspx</uri></author><category term="SQL SERVER 2008" scheme="http://geeks.ms/blogs/mredison/archive/tags/SQL+SERVER+2008/default.aspx" /></entry><entry><title>Seguimiento de Imagine Cup 2008 Microsoft, México</title><link rel="alternate" type="text/html" href="/blogs/mredison/archive/2008/05/19/seguimiento-de-imagine-cup-2008-microsoft-m-233-xico.aspx" /><id>/blogs/mredison/archive/2008/05/19/seguimiento-de-imagine-cup-2008-microsoft-m-233-xico.aspx</id><published>2008-05-19T19:47:07Z</published><updated>2008-05-19T19:47:07Z</updated><content type="html">&lt;p&gt;Hola que tal, solo para comentarle que&amp;nbsp; a través de mi blog &lt;a href="http://mredison.wordpress.com/"&gt;http://mredison.wordpress.com&lt;/a&gt; se podrá seguir minuto a minuto lo que estará ocurriendo hoy en las finales de &lt;u&gt;&lt;strong&gt;Imagine Cup 2008&lt;/strong&gt;&lt;/u&gt; en&amp;nbsp; las oficinas de Microsoft, México, DF, en donde un servidor esta reportando a cada equipo finalista, al igual pueden checar la dirección de&lt;em&gt; Alejandro Martínez &lt;/em&gt;&lt;a href="http://twitter.com/imixe"&gt;http://twitter.com/imixe&lt;/a&gt;&lt;br /&gt;Al finalizar el día tendremos publicado el video en Channel 8 de MSDN &lt;a href="http://channel8.msdn.com/"&gt;http://channel8.msdn.com&lt;/a&gt; , con todo el reporte del equipo ganador y los proyectos realizados. Saludos, y estamos en sintonía... &lt;p&gt;&lt;a href="http://channel8.msdn.com/"&gt;http://channel8.msdn.com/&lt;/a&gt; &lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2008/05/logoimaginecup2008.png"&gt;&lt;img height="87" alt="logoImagineCup2008" src="http://mredison.files.wordpress.com/2008/05/logoimaginecup2008-thumb.png?w=240&amp;amp;h=87" width="240" border="0" /&gt;&lt;/a&gt; &lt;p&gt;&lt;a href="http://www.imaginecup.com/"&gt;http://www.imaginecup.com&lt;/a&gt;&lt;br /&gt;Nota: Vota por el nuevo Diseño de Imagine Cup 2009 aquí : &lt;a href="http://www.mondorobot.com/microsoft/IC2009"&gt;http://www.mondorobot.com/microsoft/IC2009&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=86225" width="1" height="1"&gt;</content><author><name>mredison</name><uri>http://geeks.ms/members/mredison/default.aspx</uri></author><category term="Imagine Cup 2008" scheme="http://geeks.ms/blogs/mredison/archive/tags/Imagine+Cup+2008/default.aspx" /></entry><entry><title>Tutorial de Silverlight 2 con WCF</title><link rel="alternate" type="text/html" href="/blogs/mredison/archive/2008/05/16/tutorial_2D00_de_2D00_silverlight_2D00_2_2D00_con_2D00_wcf.aspx" /><id>/blogs/mredison/archive/2008/05/16/tutorial_2D00_de_2D00_silverlight_2D00_2_2D00_con_2D00_wcf.aspx</id><published>2008-05-16T12:58:23Z</published><updated>2008-05-16T12:58:23Z</updated><content type="html">&lt;p&gt;Hola, les comparto un tutorial en donde utilizo las siguientes tecnologías:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Silverlight 2 Beta 1  &lt;li&gt;Expression Blend 2.5  &lt;li&gt;WCF  &lt;li&gt;LINQ &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Antes que nada tenemos que tener instalado el Visual Studio 2008 y las extensiones de Silverlight 2 Beta 1, y expression Blend 2.5, eso lo pueden encontrar &lt;a href="http://silverlight.net/GetStarted/"&gt;aquí&lt;/a&gt;&lt;/p&gt; &lt;p&gt;a) Iniciamos en Visual Studio 2008, Creamos un nuevo proyecto de tipo Silverlight:&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial01_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="359" alt="silverlight2_tutorial01" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial01_thumb.jpg" width="537" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;b) Después nos aparece una ventana en donde escogemos la opción de tipo proyecto:&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial02_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="290" alt="silverlight2_tutorial02" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial02_thumb.jpg" width="345" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;c) Nos crea el proyecto, escogemos el Page.xaml y le damos clic derecho abrir con Expression Blend : &lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial03_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="352" alt="silverlight2_tutorial03" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial03_thumb.jpg" width="417" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;d) Cambiamos el fondo en Expression Blend&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial04_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="231" alt="silverlight2_tutorial04" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial04_thumb.jpg" width="432" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;e) Agregaremos un Rectangulo y lo agruparemos dentro de un StackPanel y le daremos un Color de Fondo:&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial05_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="322" alt="silverlight2_tutorial05" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial05_thumb.jpg" width="433" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;F) Agregamos un control desde el Asset Library, el cual se llama WatermarkedTextBox, &lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial06_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="145" alt="silverlight2_tutorial06" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial06_thumb.jpg" width="111" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial07_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="185" alt="silverlight2_tutorial07" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial07_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;g) Agregamos un boton, quedando de esta forma:&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial08_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="117" alt="silverlight2_tutorial08" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial08_thumb.jpg" width="421" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Guardemos y volvemos a Visual Studio 2008, le damos que Si a Todo.&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial09_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="340" alt="silverlight2_tutorial09" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial09_thumb.jpg" width="572" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;h) Agregamos un nuevo elemento al proyecto Web que tenemos,en este caso será un dataContext que es propio del nuevo control de acceso a datos LINQ, escogemos LINQ to SQL Clases y colocamos el nombre de &amp;quot; datos.dbml &amp;quot;.&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial10_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="272" alt="silverlight2_tutorial10" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial10_thumb.jpg" width="583" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;i)Al dar agregar nos crea el diseñador visual, y le damos clic en Server Explorer, nos abre el explorador de servidores y damos en nueva conexión, &lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial11_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="325" alt="silverlight2_tutorial11" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial11_thumb.jpg" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;j)Selecciono la base de datos Northwind que si no la tienen pueden descargarla de &lt;a style="border-right:#dde5e9 1px solid;padding-right:0px;border-top:#dde5e9 1px solid;padding-left:0px;padding-bottom:0px;margin:3px;border-left:#dde5e9 1px solid;width:240px;padding-top:0px;border-bottom:#dde5e9 1px solid;height:26px;background-color:#ffffff;"&gt;&lt;/iframe&gt;&amp;quot;&amp;gt;&amp;#39;&amp;gt;aquí&lt;/a&gt;&lt;/p&gt; &lt;p&gt;k)Depues, selecciono las tablas de Categorias y Productos, las arrastro al diseñador visual de LINQ.&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial12_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="240" alt="silverlight2_tutorial12" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial12_thumb.jpg" width="178" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Quedando de esta forma, con sus relaciones:&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial13_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="268" alt="silverlight2_tutorial13" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial13_thumb.jpg" width="459" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;l)Escogemos que el dataContext tenga en el modo de Serialización que sea Unidireccional.&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial14_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="236" alt="silverlight2_tutorial14" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial14_thumb.jpg" width="240" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;m) Agregamos un nuevo elemento al proyecto, en este caso será un servicio de WCF.&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial15_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="301" alt="silverlight2_tutorial15" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial15_thumb.jpg" width="506" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;n) En este caso, coloco una lista de la clase Productos, que en este caso me refiero a la tabla, y pido como parametro una variable de tipo string, en donde indicará la categoría del Producto:&lt;/p&gt; &lt;p&gt;&lt;em&gt;using System; &lt;br /&gt;using System.Collections.Generic; &lt;br /&gt;using System.Linq; &lt;br /&gt;using System.Runtime.Serialization; &lt;br /&gt;using System.ServiceModel; &lt;br /&gt;using System.Text; &lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;namespace TutorialSilverlight2_Web &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ServiceContract] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public interface ImiServicio &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [OperationContract] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;Product&amp;gt; ObtenerProductos(string NombreCategoria); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;}&lt;/em&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp; &lt;/p&gt; &lt;p&gt;o) Depues este buscamos el archivo de codigo del web service: &lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial16_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="94" alt="silverlight2_tutorial16" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial16_thumb.jpg" width="229" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;p) Borramos el metodo DoWork, que nos quede de tal forma así:&lt;/p&gt; &lt;p&gt;&lt;em&gt;using System; &lt;br /&gt;using System.Collections.Generic; &lt;br /&gt;using System.Linq; &lt;br /&gt;using System.Runtime.Serialization; &lt;br /&gt;using System.ServiceModel; &lt;br /&gt;using System.Text; &lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;namespace TutorialSilverlight2_Web &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class miServicio : ImiServicio &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;}&lt;/em&gt; &lt;/p&gt; &lt;p&gt;q) Ahora vamos a implementar nuestro servicio cual haya sido el nombre que ustedes le pusieron, dando clic en la I, de la interfaz: &lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial17_4.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="118" alt="silverlight2_tutorial17" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial17_thumb_1.jpg" width="399" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;#region ImiServicio Members &lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public List&amp;lt;Product&amp;gt; ObtenerProductos(string NombreCategoria) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;#endregion&lt;/em&gt;&lt;/p&gt; &lt;p&gt;r) Ahora, crearemos una variable de tipo DataContext. &lt;/p&gt; &lt;p&gt;&lt;em&gt;var miDataContext = new datosDataContext();&lt;/em&gt; &lt;/p&gt; &lt;p&gt;s) Codificamos nuestra consulta de LINQ, que consiste en traernos a todos los productos del dataContext segun la categoría que le metamos como parámetro. &lt;/p&gt; &lt;p&gt;&lt;em&gt;var miConsulta = from p in miDataContext.Products &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where p.Category.CategoryName.Contains(NombreCategoria) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select p;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;y) Retornaremos la consulta en forma de Lista de esta forma:&lt;/p&gt; &lt;p&gt;&lt;em&gt;return miConsulta.ToList();&lt;/em&gt; &lt;/p&gt; &lt;p&gt;Quedando finalmente así: &lt;/p&gt; &lt;p&gt;&lt;em&gt;public List&amp;lt;Product&amp;gt; ObtenerProductos(string NombreCategoria) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var miDataContext = new datosDataContext(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var miConsulta = from p in miDataContext.Products &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where p.Category.CategoryName.Contains(NombreCategoria) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select p; &lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return miConsulta.ToList(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/em&gt;&lt;/p&gt; &lt;p&gt;u) Nos vamos al webconfig y le cambiamos al atributo binding del tag services, de wsHttpBinding a basicHttpBinding:&lt;/p&gt; &lt;p&gt;&lt;em&gt;&amp;nbsp;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial18_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="254" alt="silverlight2_tutorial18" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial18_thumb.jpg" width="499" border="0" /&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;v ) Esto con el fin de activar solo el modo básico al llamar a mi webservice desde la aplicación que lo solicitará.&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial19_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="146" alt="silverlight2_tutorial19" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial19_thumb.jpg" width="514" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;w) Nos vamos ahora al proyecto y agregamos referencias Web, del servicio que acabamos de hacer:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&amp;nbsp;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial20_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="67" alt="silverlight2_tutorial20" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial20_thumb.jpg" width="334" border="0" /&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial21_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="402" alt="silverlight2_tutorial21" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial21_thumb.jpg" width="497" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;x) Ahora agregaremos una referencia, que será la de System.Windows.Controls.Data, ya que colocaré un datagrid dentro de la aplicación Silverlight:&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial22_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="316" alt="silverlight2_tutorial22" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial22_thumb.jpg" width="402" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;y) Ahora agregaremos ese referencia en el código XAML:&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial23_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="175" alt="silverlight2_tutorial23" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial23_thumb.jpg" width="475" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;z) Después localizamos el control watermarkedTexBox y le colocamos un nombre:&lt;/p&gt; &lt;p&gt;&lt;em&gt;&amp;lt;WatermarkedTextBox x:Name=&amp;quot;txtCategoria&amp;quot;&amp;nbsp; ...../&amp;gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;a1) Nos vamos a Expression Blend 2.5 y agregamos un nuevo control que será un datagrid:&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial25_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="228" alt="silverlight2_tutorial25" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial25_thumb.jpg" width="385" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;a2) Nos vamos a Visual studio 2008 y en el tag del datagrid vamos a añadir los siguientes atributos:&lt;/p&gt; &lt;p&gt;&lt;em&gt;x:Name=&amp;quot;Mostrar&amp;quot; AutoGenerateColumns=&amp;quot;True&amp;quot;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;a3) Después añadimos el evento click al boton:&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial24_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="59" alt="silverlight2_tutorial24" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial24_thumb.jpg" width="303" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Nos vamos al evento clic del botón:&lt;/p&gt; &lt;p&gt;&lt;em&gt;private void Button_Click(object sender, RoutedEventArgs e) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/em&gt; &lt;/p&gt; &lt;p&gt; a4) Agrego a los namespaces la referencia:&lt;/p&gt; &lt;p&gt;&lt;em&gt;using TutorialSilverlight2.ServiceReference1;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;a5) Dentro del evento clic copiamos esto:&lt;/p&gt; &lt;p&gt;&lt;em&gt;var proxy=new ServiceReference1.ImiServicioClient(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxy.ObtenerProductosAsync(txtCategoria.Text);&lt;/em&gt; &lt;/p&gt; &lt;p&gt;&lt;em&gt; a6) &lt;/em&gt;Despues vamos a crear el siguiente metodo:&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial26_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="179" alt="silverlight2_tutorial26" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial26_thumb.jpg" width="270" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Quedando de esta forma:&lt;/p&gt; &lt;p align="left"&gt;&lt;em&gt;private void Button_Click(object sender, RoutedEventArgs e) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var proxy=new ServiceReference1.ImiServicioClient(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxy.ObtenerProductosCompleted += new EventHandler&amp;lt;ObtenerProductosCompletedEventArgs&amp;gt;(proxy_ObtenerProductosCompleted); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxy.ObtenerProductosAsync(txtCategoria); &lt;/em&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void proxy_ObtenerProductosCompleted(object sender, ObtenerProductosCompletedEventArgs e) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/em&gt;&lt;/p&gt; &lt;p&gt;a7) Ahora dentro del metodo que creamos colocaremos:&lt;/p&gt; &lt;p align="left"&gt;&lt;em&gt;void proxy_ObtenerProductosCompleted(object sender, ObtenerProductosCompletedEventArgs e) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mostrar.ItemsSource = e.Result; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/em&gt;&lt;/p&gt; &lt;p align="left"&gt; a8) Y damos visualizar, podemos ingresar una categoría de la tabla y nos dará los productos que estan ligados a esa categoría...&lt;/p&gt; &lt;p align="left"&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial27_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="316" alt="silverlight2_tutorial27" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/TutorialdeSilverlight2conWCF_1C7D/silverlight2_tutorial27_thumb.jpg" width="475" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;Saludos... Si quieren el proyecto completo, me dicen, para colocar la liga de descarga... Nos vemos en el proximo tutorial. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=85893" width="1" height="1"&gt;</content><author><name>mredison</name><uri>http://geeks.ms/members/mredison/default.aspx</uri></author><category term="LINQ" scheme="http://geeks.ms/blogs/mredison/archive/tags/LINQ/default.aspx" /><category term="Silverlight" scheme="http://geeks.ms/blogs/mredison/archive/tags/Silverlight/default.aspx" /><category term="WCF" scheme="http://geeks.ms/blogs/mredison/archive/tags/WCF/default.aspx" /></entry><entry><title>Operadores de consulta estándar con LINQ</title><link rel="alternate" type="text/html" href="/blogs/mredison/archive/2008/04/30/operadores_2D00_de_2D00_consulta_2D00_estndar_2D00_con_2D00_linq.aspx" /><id>/blogs/mredison/archive/2008/04/30/operadores_2D00_de_2D00_consulta_2D00_estndar_2D00_con_2D00_linq.aspx</id><published>2008-04-30T21:12:00Z</published><updated>2008-04-30T21:12:00Z</updated><content type="html">&lt;p&gt;Language Integrated Query (LINQ) permite a los desarrolladores escribir consultas similares a SQL con el código de Microsoft® .NET Framework 3.5 usando una sintaxis con establecimiento inflexible de tipos. Distintos proveedores de LINQ, como LINQ to Objects (que le permite escribir las consultas con jerarquías de objetos) y LINQ to Entities (que le permiten escribir consultas con el modelo conceptual de Entity Framework), podrán procesar estas consultas de manera eficaz en función de las particularidades de sus almacenes de datos representativos.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;!--more--&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Además de la sintaxis con establecimiento inflexible de tipos, las consultas de LINQ tienen también un arsenal de operadores de consulta estándar para mejorar su funcionalidad. Estos operadores de consulta estándar funcionan en secuencias y le permiten realizar operaciones como determinar si un valor existe en la secuencia y realizar una función agregada, como una suma, sobre una secuencia.&lt;/p&gt;
&lt;p&gt;En la columna de este mes, se realizarán consultas y operaciones prácticas con LINQ, usando tanto LINQ to Objects como LINQ to Entities. Se realizará una consulta sobre una colección de entidades y me sumergir en un conjunto jerárquico de entidades mediante sus propiedades de navegación. Se mostrará también cómo puede aplicar muchos de los operadores de consulta estándar a matrices y colecciones. Se demostrará cómo se mejoran los operadores de consulta estándar de LINQ mediante expresiones lambda y cómo les permite analizar información concreta a partir de una secuencia. También aprenderán a realizar una lógica compleja sobre una secuencia. Todos los ejemplos de código están disponibles en la descarga de esta columna (consulte &lt;a href="http://msdn.microsoft.com/msdnmag/code08.aspx"&gt;msdn.microsoft.com/msdnmag/code08.aspx&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Operadores y LINQ&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;LINQ es muy eficaz por sí mismo, independientemente de que use LINQ to XML, LINQ to Datasets, LINQ to Entities, LINQ to Objects o cualquier otro proveedor de LINQ que surja. El punto fuerte de LINQ radica en su sintaxis de consulta con establecimiento inflexible de tipos, que puede usarse para operar con cualquiera de estos proveedores. Al combinar LINQ con uno o varios operadores de consulta estándar, el resultado es un conjunto de herramientas aún más eficaz que le proporciona un control granular sobre un conjunto de datos.&lt;/p&gt;
&lt;p&gt;Los operadores de consulta estándar se encuentran en el ensamblado System.Core.dll dentro del espacio de nombres System.Linq como métodos de extensión en las clases estáticas Enumerable y Queryable. Pueden usarse en objetos que implementan IEnumerable&amp;lt;T&amp;gt; o IQueryable&amp;lt;T&amp;gt;. Esto les permite operar con varios tipos, desde colecciones y matrices (secuencias) en memoria hasta bases de datos remotas que usan proveedores como LINQ to Entities y LINQ to SQL.&lt;/p&gt;
&lt;p&gt;Es fácil determinar qué conjunto de operadores tiene a su disposición para realizar una tarea específica. Cuando desee usar un operador en una consulta de LINQ, puede utilizar un operador de la lista disponible de métodos de extensión en la clase estática Queryable. Cuando desee usar un operador en una secuencia que implementa IEnumerable&amp;lt;T&amp;gt;, puede usar uno de los métodos de extensión encontrados en la clase estática Enumerable. Tenga presente, sin embargo, que no todos los operadores encontrados en la clase Queryable son aplicables al almacén de datos subyacente y que, por tanto, es posible que algunos presenten problemas de compatibilidad durante el tiempo de ejecución.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tipos de operadores&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Hay muchos tipos diferentes de operadores (que pueden encontrarse mediante el explorador de objetos para mirar en las clases Enumerable y Queryable). La &lt;strong&gt;Figura A&lt;/strong&gt; muestra una categorización de los distintos tipos de operadores por orden alfabético. Le ofrece una visión de la funcionalidad que los operadores ofrecen. Voy a demostrar un subconjunto de estos operadores usando tanto LINQ to Objects como LINQ to Entities para mostrar cómo pueden ser beneficiosos en una aplicación real.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2008/04/figuraa.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="260" alt="FiguraA" src="http://mredison.files.wordpress.com/2008/04/figuraa-thumb.jpg" width="163" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expresiones lambda&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Muchos operadores de consulta estándar usan delegados &lt;strong&gt;Func&lt;/strong&gt; para procesar elementos individuales conforme operan sobre una secuencia. Las expresiones lambda pueden funcionar en este caso junto con los operadores de consulta estándar para representar a los delegados. Una expresión lambda es una forma abreviada para crear una implementación de un delegado y puede utilizarse en cualquier lugar donde se pueda usar un delegado anónimo. Las expresiones lambda se admiten tanto en C# como en Visual Basic® .NET. Sin embargo, es importante tener en cuenta que, puesto que Visual Basic .NET no admite aún métodos anónimos, las expresiones lambda pueden constar de una única instrucción.&lt;/p&gt;
&lt;p&gt;Vamos a ver cómo se puede usar el operador Single en una matriz de enteros. Se crea una matriz de enteros, donde cada elemento representa una potencia de 2 del 1 al 10. Después se usará el operador Single para recuperar el elemento del entero que reúne la condición especificada en la expresión lambda:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;int[] nums = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 };
int singleNum = nums.Single(x =&amp;gt; x &amp;gt; 16 &amp;amp;&amp;amp; x &amp;lt; 64);
Console.WriteLine(singleNum.ToString());
&lt;/pre&gt;
&lt;p&gt;Las expresiones lambda tienen unos cuantos elementos clave. La expresión lambda se inicia con la definición de las variables que se pasan al delegado. En el ejemplo de código anterior, x (declarado a la izquierda del operador =&amp;gt;) es el argumento que representa cada elemento de la matriz numérica que se pasa a él. El resto de la expresión lambda representa la lógica que se evalúa para cada elemento de la matriz. La expresión anterior se podría haber rescrito fácilmente usando un delegado anónimo, como se muestra a continuación:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;int singleNum = nums.Single&amp;lt;int&amp;gt;(
  delegate(int x) {return (x &amp;gt; 16 &amp;amp;&amp;amp; x &amp;lt; 64); }
) ;
&lt;/pre&gt;
&lt;p&gt;Sin embargo, este código es menos legible que usar la expresión lambda. C# 2.0 introdujo delegados anónimos, lo que simplificó en gran medida el paso de delegados. Sin embargo, las expresiones lambda simplificaron el proceso exponencialmente gracias a la brevedad de su sintaxis.&lt;/p&gt;
&lt;p&gt;First y Single&lt;/p&gt;
&lt;p&gt;Cuando es necesario obtener un solo valor de una secuencia, los operadores First, FirstOrDefault, Single y SingleOrDefault son muy útiles. El método First devuelve el primer elemento de una secuencia. Hay un método sobrecargado para First que le permite pasar una expresión lambda para representar una condición. Por ejemplo, si desea devolver el primer elemento de una secuencia de enteros donde el elemento entero es mayor que 50, podría usar el siguiente ejemplo de código:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;int[] nums = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 };
int num1 = nums.First&amp;lt;int&amp;gt;();
int num2 = nums.First&amp;lt;int&amp;gt;(x =&amp;gt; x &amp;gt; 50);
int num3 = nums.FirstOrDefault&amp;lt;int&amp;gt;(x =&amp;gt; x &amp;gt; 5000);

Console.WriteLine(
  num1.ToString() + &amp;quot;-&amp;quot; + 
  num2.ToString() + &amp;quot;-&amp;quot; + 
  num3.ToString());
&lt;/pre&gt;
&lt;p&gt;Este código encontrará el primer elemento (1), el primer elemento mayor que 50 (64) y el primer elemento mayor que 5.000. Debido a que no hay ningún elemento en la matriz que satisfaga la tercera expresión lambda (ningún entero de la matriz es superior a 5.000), se generará una excepción si el código usó el operador First en lugar de FirstOrDefault. Al usar el operador FirstOrDefault, se devuelve 0 si ningún elemento satisface la expresión lambda. También se puede usar el operador First en una consulta de LINQ to Entities, como puede ver a continuación:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;using (Entities entities = new Entities())
{
  var query = (from c in entities.Customers
               select c).First(c =&amp;gt; c.City.Equals(&amp;quot;London&amp;quot;));
  Console.WriteLine(query.CompanyName);
}
&lt;/pre&gt;
&lt;p&gt;En este ejemplo, se devolverá el primer cliente en la ciudad de Londres. Como puede ver, la sintaxis para usar el método First no cambia cuando se usa con distintos proveedores de LINQ (en este caso, LINQ to Objects y LINQ to Entities).&lt;/p&gt;
&lt;p&gt;El operador First es muy útil en el contexto de LINQ to Entities, sobre todo cuando sabe que la consulta devolverá un único registro. Por ejemplo, podría tener una consulta que siempre obtiene un registro de cliente cuando se proporciona CustomerID. En esta situación, siempre se devolvería 0 o 1 registro, por lo que una secuencia no ayuda tanto como la entidad en sí misma. En otras palabras, simplemente recogería la entidad Customer en lugar de una secuencia de la entidad 1 Customer. Este es un caso en el que el método First puede ayudar, tal y como se muestra en el fragmento de código que sigue. Debido a que Entity Framework no intenta distribuir la ejecución de una consulta entre cliente y servidor, el método Single no se admite en LINQ to Entities, por lo que usar el método First es una alternativa fácil.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;using (Entities entities = new Entities())
{
  var query = (from c in entities.Customers
               where c.CustomerID.Equals(&amp;quot;BOLID&amp;quot;)
               select c).First();
  Console.WriteLine(query.CompanyName);
}
&lt;/pre&gt;
&lt;p&gt;Agregados, jerarquías y proyecciones&lt;/p&gt;
&lt;p&gt;Usar un operador agregado como Sum en una consulta LINQ to Entities puede ayudar a simplificar una consulta. Por ejemplo, el código siguiente recupera una secuencia de pedidos donde la cantidad total es superior a 10.000 USD:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;using (Entities entities = new Entities())
{
  var query = from o in entities.Orders
              where o.OrderDetails.Sum(
                od =&amp;gt; od.UnitPrice * od.Quantity) &amp;gt;= 10000
              select o;
  foreach (Orders order in query)
    Console.WriteLine(order.OrderID);
}  
&lt;/pre&gt;
&lt;p&gt;Como LINQ puede realizar una consulta sobre las recopilaciones de entidades jerárquicas, los operadores de consulta estándar también se pueden usar para realizar operaciones sobre las secuencias anidadas de entidades. Esto puede ser muy útil cuando los datos derivados deben calcularse o interrogarse. Los datos derivados sólo pueden existir en sus formularios base. Éste es el caso, por ejemplo, cuando los detalles de los pedidos del cliente sólo tienen valores para el precio por unidad y la cantidad. En este caso, los datos agregados que representan la cantidad total correspondiente a un pedido no se proporcionan en ningún punto del modelo. Sin embargo, al aplicar el operador Sum a su consulta de LINQ, podrá seguir recuperando todos los clientes que hayan gastado más de 20.000 USD, tal y como vemos aquí:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;using (Entities entities = new Entities())
{
  var query = from c in entities.Customers
              where c.Orders.Sum(
                o =&amp;gt; o.OrderDetails.Sum(
                  od =&amp;gt; od.UnitPrice * od.Quantity)) &amp;gt;= 25000
              select c;
  foreach (Customers customer in query)
    Console.WriteLine(customer.CompanyName);
}
&lt;/pre&gt;
&lt;p&gt;Este ejemplo muestra cómo puede aplicar los operadores de consulta estándar en varios niveles de una consulta de LINQ. La consulta devuelve finalmente una secuencia de entidades Customers, pero para llegar hasta allí, deberá sumergirse primero en los pedidos del cliente y en cada detalle del pedido para obtener los datos que necesita. Así, se puede calcular el precio de cada elemento de línea, sumar el total de los elementos de línea correspondiente a cada pedido y sumar los totales del pedido para cada cliente.&lt;/p&gt;
&lt;p&gt;El operador Count es otro operador de consulta estándar agregado. Puede determinar cuántos clientes gastaron más de 25.000 USD con el siguiente código:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;using (Entities entities = new Entities())
{
  var query = (from c in entities.Customers
               where c.Orders.Sum(
                 o =&amp;gt; o.OrderDetails.Sum(
                   od =&amp;gt; od.UnitPrice * od.Quantity)) &amp;gt;= 25000
               select c).Count();
  Console.WriteLine(query);
}
&lt;/pre&gt;
&lt;p&gt;Se puede usar el operador Max para determinar el mejor cliente. El siguiente código de ejemplo devolverá la cantidad desembolsada por el cliente que más gasta. Usa una combinación de los agregadores Sum y Max en varios niveles de una jerarquía:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;using (Entities entities = new Entities())
{
  var query = (from c in entities.Customers
               select new
               {
                 c.CustomerID, 
                 Total = c.Orders.Sum(
                   o =&amp;gt; o.OrderDetails.Sum(od =&amp;gt; od.UnitPrice))
               }).Max(c2 =&amp;gt; c2.Total);
  Console.WriteLine(query);
}
&lt;/pre&gt;
&lt;p&gt;Proyecciones y ordenación&lt;/p&gt;
&lt;p&gt;Puede que haya notado que en el ejemplo anterior he introducido una proyección. Antes usar el operador Max, la consulta LINQ no devuelve una lista de clientes. En su lugar, devuelve una proyección, que crea una entidad nueva que contiene una propiedad para CustomerID y otra para Total (el importe total del gasto del cliente). Las proyecciones son una parte integral de LINQ y, cuando se proyectan en secuencias, tal y como se muestra en el ejemplo anterior, se pueden seguir procesando mediante operadores de consulta estándar.&lt;/p&gt;
&lt;p&gt;La Figura 1 muestra cómo crear una proyección de una nueva entidad que contiene un CustomerID y la suma de los totales de pedidos del cliente (con el operador Sum que se ha descrito anteriormente). La &lt;strong&gt;Figura 1&lt;/strong&gt; usa el operador OrderByDescending para ordenar la secuencia de entidades proyectadas en función del total calculado. Si dos clientes tuvieran el mismo total, se podría usar un operador de ordenación adicional para ampliar la definición de la ordenación. Por ejemplo, la instrucción foreach que aparece en la &lt;strong&gt;Figura 1&lt;/strong&gt; se podría corregir para usar el siguiente código y seguir calificando las reglas de ordenación:&lt;/p&gt;
&lt;p&gt;Figura 1 Agregados, proyecciones y ordenación&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;using (Entities entities = new Entities())
{
  var query = from c in entities.Customers
              where c.Orders.Sum(
                o =&amp;gt; o.OrderDetails.Sum(od =&amp;gt; od.UnitPrice)) &amp;gt; 0
              select new
              {
                c.CustomerID, 
                Total = c.Orders.Sum(
                  o =&amp;gt; o.OrderDetails.Sum(od =&amp;gt; od.UnitPrice))
              };
  foreach (var item in query.OrderByDescending(x =&amp;gt; x.Total))
    Console.WriteLine(item.CustomerID + &amp;quot; == &amp;quot; + item.Total);
}

&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;foreach (var item in 
  query.OrderByDescending(x =&amp;gt; x.Total)
  .ThenBy(x =&amp;gt; x.CustomerID))
{
  Console.WriteLine(item.CustomerID + &amp;quot; == &amp;quot; + item.Total);
}
&lt;/pre&gt;
&lt;p&gt;En este fragmento de código, agregué el operador ThenBy y una expresión lambda para indicar que la secuencia debe ordenarse primero en orden descendente por la propiedad Total y después en orden ascendente por la propiedad CustomerID de la proyección.&lt;/p&gt;
&lt;p&gt;Cuantificadores y conversión&lt;/p&gt;
&lt;p&gt;Si necesita determinar si existe un valor en una secuencia, puede usar el operador de consulta estándar Any. Los cuantificadores como Any, All y Contains buscan una secuencia de elementos y evalúan si la secuencia cumple o no una condición de la expresión lambda. Esto puede ser muy útil cuando necesita examinar una secuencia para determinar, por ejemplo, si el cliente de una dirección específica existe, si todos los clientes son del mismo país o cualquier otra pregunta analítica.&lt;/p&gt;
&lt;p&gt;Por ejemplo, la siguiente consulta LINQ comprueba si todos los clientes del Reino Unido se encuentran en Londres. Usa el cuantificador All y le pasa la expresión lambda que evalúa si la ciudad es Londres. Si cada elemento en la secuencia cumple este criterio y devuelve true desde la expresión lambda, entonces el operador All devolverá true:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;using (Entities entities = new Entities())
{
  bool allUKCustomerAreFromLondon = (from c in entities.Customers
                                     where c.Country == &amp;quot;UK&amp;quot;
                                     select c).All(
                                       c =&amp;gt; c.City.Equals(&amp;quot;London&amp;quot;));
  Console.WriteLine(allUKCustomerAreFromLondon ? &amp;quot;Yes&amp;quot; : &amp;quot;No&amp;quot;);
}            
&lt;/pre&gt;
&lt;p&gt;Otra pregunta que quizás necesite respuesta en esta consulta es si hay alguna entidad en la secuencia de la ciudad de Cowes en el Reino Unido. Con esta pregunta, puede usar el cuantificador Any para operar en la secuencia, tal y como se muestra aquí:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;using (Entities entities = new Entities())
{
  bool isOneUKCustomerFromCowes = (from c in entities.Customers
                                   where c.Country == &amp;quot;UK&amp;quot;
                                   select c).Any(
                                     c =&amp;gt; c.City.Equals(&amp;quot;Cowes&amp;quot;));
  Console.WriteLine(isOneUKCustomerFromCowes? &amp;quot;Yes&amp;quot; : &amp;quot;No&amp;quot;);
}
&lt;/pre&gt;
&lt;p&gt;El operador Contains es similar al operador Any en tanto que evalúa si la secuencia contiene lo que está buscando. El operador Any puede determinar si un valor existe dentro de un elemento en la secuencia, pero el operador Contains determina si un elemento concreto existe en la secuencia. Por ejemplo, antes de agregar un objeto a una secuencia, es posible que desee asegurarse de que la secuencia no contiene ese objeto. La &lt;strong&gt;Figura 2&lt;/strong&gt; muestra cómo hacerlo.&lt;/p&gt;
&lt;p&gt;Figure 2 Uso de Contains y conversión&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;using (Entities entities = new Entities())
{
    Customers customerBSBEV = (from c in entities.Customers
                               where c.CustomerID == &amp;quot;BSBEV&amp;quot;
                               select c).First();

    var customersUK = from c in entities.Customers
                      where c.Country == &amp;quot;UK&amp;quot;
                      select c;

    bool isCustomerInSequence = customersUK.Contains(customerBSBEV);

    Console.WriteLine(isCustomerInSequence? &amp;quot;Yes&amp;quot; : &amp;quot;No&amp;quot;);
}

&lt;/pre&gt;
&lt;p&gt;Tenga en cuenta que en la &lt;strong&gt;Figura 2&lt;/strong&gt; se recupera una entidad Customers para el cliente BSBEV. A continuación, se recupera la secuencia de entidades Customers de clientes del Reino Unido. Finalmente, se usa el operador Contains para comprobar si la secuencia de clientes contiene la versión mantenida por la variable customerBSBEV.&lt;/p&gt;
&lt;p&gt;La implementación del operador Contains que se muestra en la &lt;strong&gt;Figura 2&lt;/strong&gt; funciona en situaciones donde puede comparar de forma segura objetos basados en la versión actual. Sin embargo, ¿qué ocurre si necesita comprobar el operador Contains en función de una identidad lógica? Afortunadamente, el operador Contains cuenta con una sobrecarga que le permite pasar un objeto que implementa la interfaz de IEqualityComparer&amp;lt;T&amp;gt;. Para usar Contains en función de CustomerID, el código de la &lt;strong&gt;Figura 2&lt;/strong&gt; puede volver a escribirse de la siguiente manera:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;using (Entities entities = new Entities())
{
  ...

  bool isCustomerInSequence = customersUK.Contains(customerBSBEV,
    new CustomerComparer());

  Console.WriteLine(isCustomerInSequence? &amp;quot;Yes&amp;quot; : &amp;quot;No&amp;quot;);
 }
&lt;/pre&gt;
&lt;p&gt;donde CustomerComparer se define como&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;private class CustomerComparer : IEqualityComparer&amp;lt;Customers&amp;gt;
{
  public bool Equals(Customers x, Customers y) {
    if (x == null || y == null)
      return false;
    return x.CustomerID.Equals(y.CustomerID);
  }

  ...
}
&lt;/pre&gt;
&lt;p&gt;Conclusión&lt;/p&gt;
&lt;p&gt;Hay muchos operadores de consulta estándar que se definen como métodos de extensión para las clases de secuencias Enumerable y Queryable. Estos operadores pueden ayudar a ampliar la funcionalidad de LINQ, tal y como he mostrado en este artículo. He demostrado también cuántas de las nuevas mejoras realizadas a .NET Framework 3.5 (incluidas las expresiones lambda, LINQ, Entity Framework y las variables con establecimiento implícito de tipos) se unen para facilitar la escritura de código y lógica robustos.&lt;/p&gt;
&lt;p&gt;Código lo encuentras en:&lt;/p&gt;
&lt;p&gt;URL: &lt;a title="http://msdn2.microsoft.com/es-mx/magazine/cc337979.aspx?pr=blog" href="http://msdn2.microsoft.com/es-mx/magazine/cc337979.aspx?pr=blog"&gt;http://msdn2.microsoft.com/es-mx/magazine/cc337979.aspx?pr=blog&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=84606" width="1" height="1"&gt;</content><author><name>mredison</name><uri>http://geeks.ms/members/mredison/default.aspx</uri></author><category term="LINQ" scheme="http://geeks.ms/blogs/mredison/archive/tags/LINQ/default.aspx" /></entry><entry><title>Windows Live Quick Applications (beta)</title><link rel="alternate" type="text/html" href="/blogs/mredison/archive/2008/04/30/windows_2D00_live_2D00_quick_2D00_applications_2D00_beta.aspx" /><id>/blogs/mredison/archive/2008/04/30/windows_2D00_live_2D00_quick_2D00_applications_2D00_beta.aspx</id><published>2008-04-30T21:10:21Z</published><updated>2008-04-30T21:10:21Z</updated><content type="html">&lt;p&gt;En que consiste, muy facil Microsoft nos brinda algunas aplicaciones web realizadas con servicios de Windows Live, y nos da la posibilidad de descargar el código de la aplicación, con el fin de que nosotros lo usemos de buena manera. Checa algunas aplicaciones como:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Tafiti  &lt;li&gt;Adventure Works Resorts  &lt;li&gt;Contoso Bicycle Club  &lt;li&gt;Video Show  &lt;li&gt;ContosoISV  &lt;li&gt;Contoso University  &lt;li&gt;Visit Planner&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/WindowsLiveQuickApplicationsbeta_111A1/vistiplannerwqla.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="171" alt="vistiplannerwqla" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/WindowsLiveQuickApplicationsbeta_111A1/vistiplannerwqla_thumb.png" width="240" border="0" /&gt;&lt;/a&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/WindowsLiveQuickApplicationsbeta_111A1/contosoujniwaql.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="171" alt="contosoujniwaql" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/WindowsLiveQuickApplicationsbeta_111A1/contosoujniwaql_thumb.png" width="240" border="0" /&gt;&lt;/a&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/WindowsLiveQuickApplicationsbeta_111A1/tafitiwlqa.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="171" alt="tafitiwlqa" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/WindowsLiveQuickApplicationsbeta_111A1/tafitiwlqa_thumb.png" width="240" border="0" /&gt;&lt;/a&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/WindowsLiveQuickApplicationsbeta_111A1/streaminwqla.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="171" alt="streaminwqla" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/WindowsLiveQuickApplicationsbeta_111A1/streaminwqla_thumb.png" width="240" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Checa online estas aplicaciones, están de lujo.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;URL y Características:&lt;/strong&gt; &lt;a title="http://dev.live.com/quickapps/" href="http://dev.live.com/quickapps/"&gt;http://dev.live.com/quickapps/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=84605" width="1" height="1"&gt;</content><author><name>mredison</name><uri>http://geeks.ms/members/mredison/default.aspx</uri></author><category term="Windows Live" scheme="http://geeks.ms/blogs/mredison/archive/tags/Windows+Live/default.aspx" /></entry><entry><title>Microsoft Robotics Studio 2008</title><link rel="alternate" type="text/html" href="/blogs/mredison/archive/2008/04/30/microsoft_2D00_robotics_2D00_studio_2D00_2008.aspx" /><id>/blogs/mredison/archive/2008/04/30/microsoft_2D00_robotics_2D00_studio_2D00_2008.aspx</id><published>2008-04-30T21:07:00Z</published><updated>2008-04-30T21:07:00Z</updated><content type="html">&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/en-us/robotics/default.aspx"&gt;Robotics Developer Studio 2008&lt;/a&gt; es la plataforma para desarrollo de aplicaciones con Robots previamente conocida como Microsoft Robotics Studio.&lt;/p&gt;
&lt;p&gt;Entre las nuevas características están que mejora el performance del runtime y tiene un enfoque asíncrono y distribuido de programación, además soporta LINQ entre &lt;a href="http://msdn2.microsoft.com/en-us/robotics/cc470038.aspx"&gt;muchas otras mejoras y características&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2008/04/vpl2008.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="325" alt="vpl2008" src="http://mredison.files.wordpress.com/2008/04/vpl2008-thumb.jpg" width="482" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Contiene el VPL (Visual Programming Language) y el entorno de simulación, incluye nuevos modelos para simular, como vemos aquí:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2008/04/simulacion2008.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="295" alt="simulacion2008" src="http://mredison.files.wordpress.com/2008/04/simulacion2008-thumb.jpg" width="483" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mredison.files.wordpress.com/2008/04/simulacion12008.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="293" alt="simulacion12008" src="http://mredison.files.wordpress.com/2008/04/simulacion12008-thumb.jpg" width="496" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Download:&lt;/strong&gt;&lt;a title="http://www.microsoft.com/downloads/details.aspx?familyid=eb00c558-2163-45a5-befe-531ad48bc525&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?familyid=eb00c558-2163-45a5-befe-531ad48bc525&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=eb00c558-2163-45a5-befe-531ad48bc525&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=84604" width="1" height="1"&gt;</content><author><name>mredison</name><uri>http://geeks.ms/members/mredison/default.aspx</uri></author><category term="Microsoft Robotics Studio" scheme="http://geeks.ms/blogs/mredison/archive/tags/Microsoft+Robotics+Studio/default.aspx" /></entry><entry><title>¿Cuáles son las 10 razones para cambiar a Visual Studio 2008?</title><link rel="alternate" type="text/html" href="/blogs/mredison/archive/2008/04/30/cules_2D00_son_2D00_las_2D00_10_2D00_razones_2D00_para_2D00_cambiar_2D00_a_2D00_visual_2D00_studio_2D00_2008.aspx" /><id>/blogs/mredison/archive/2008/04/30/cules_2D00_son_2D00_las_2D00_10_2D00_razones_2D00_para_2D00_cambiar_2D00_a_2D00_visual_2D00_studio_2D00_2008.aspx</id><published>2008-04-30T21:04:28Z</published><updated>2008-04-30T21:04:28Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;&lt;a href="http://geeks.ms/blogs/mredison/WindowsLiveWriter/Culessonlas10razonesparacambiaraVisualSt_1043F/aa700831_VS08_v(MSDN_10)_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="72" alt="aa700831_VS08_v(MSDN_10)" src="http://geeks.ms/blogs/mredison/WindowsLiveWriter/Culessonlas10razonesparacambiaraVisualSt_1043F/aa700831_VS08_v(MSDN_10)_thumb.png" width="240" border="0" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;1)&lt;/strong&gt; Trabajar con datos de forma unificada e integrada: mayor productividad usando el nuevo LINQ, un lenguaje integrado de consultas para acceder a fuentes de datos XML, SQL y objetos en memoria. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;2)&lt;/strong&gt; Facilita la interacción entre desarrolladores y diseñadores: excelente integración entre Visual Studio 2008 y las familia de herramientas de diseño &lt;a href="http://go.microsoft.com/?linkid=8792737"&gt;Microsoft Expression&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;3)&lt;/strong&gt; Las más modernas tecnologías de interfaz de usuario en la Web: soporte integrado del nuevo framework Ajax de Microsoft, controles ASP .NET y soporte nativo de sindicación RSS y REST. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;4)&lt;/strong&gt; La mejor herramienta de desarrollo para Windows Vista: permite al programador sacar el máximo provecho de las nuevas características de Windows Vista en general y en particular integración directa con las librerías WPF. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;5)&lt;/strong&gt; Software de más calidad: nuevas funcionalidades de depuración de aplicaciones ahora directamente integradas en Visual Studio 2008. Soporte a pruebas unitarias integrado en todas las versiones. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;6)&lt;/strong&gt; Excelente soporte para escribir aplicaciones Web: los editores HTML y CSS han sido muy mejorados, incluso cuentan con pruebas unitarias. Soporte JavaScript revolucionario, incluyendo IntelliSense y depuración! &lt;/p&gt; &lt;p&gt;&lt;strong&gt;7)&lt;/strong&gt; Aplicaciones compatibles con distintos frameworks .NET: El mismo entorno de Visual Studio permite compilar aplicaciones para diferentes versiones del framework (.Net 2.0, 3.0 y 3.5.). Aprovecha las nuevas funcionalidades del entorno sin cambiar el código! &lt;/p&gt; &lt;p&gt;&lt;strong&gt;8 )&lt;/strong&gt; Desarrollo de aplicaciones Office: Visual Studio incluye herramientas para escribir muy fácilmente complementos para las aplicaciones de Microsoft Office 2003 y 2007 (Outlook, Excel, Word...) &lt;/p&gt; &lt;p&gt;&lt;strong&gt;9)&lt;/strong&gt; Workflow y comunicaciones: Visual Studio incorpora herramientas que permiten modernizar y desarrollar la lógica de negocio de la aplicaciones vía soporte integrado de Workflow Foundation y Windows Communication Foundation. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;10) &lt;/strong&gt;El entorno de desarrollo más sólido: el Visual Studio de más alta calidad de la historia que garantiza la mayor productividad de los desarrolladores. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;URL:&lt;/strong&gt; &lt;a title="http://msdn2.microsoft.com/es-mx/vstudio/products/aa700831.aspx" href="http://msdn2.microsoft.com/es-mx/vstudio/products/aa700831.aspx"&gt;http://msdn2.microsoft.com/es-mx/vstudio/products/aa700831.aspx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=84603" width="1" height="1"&gt;</content><author><name>mredison</name><uri>http://geeks.ms/members/mredison/default.aspx</uri></author><category term="Visual Studio 2008" scheme="http://geeks.ms/blogs/mredison/archive/tags/Visual+Studio+2008/default.aspx" /></entry></feed>