<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Carlos Walzer : Cazador de Mitos .NET</title><link>http://msmvps.com/blogs/cwalzer/archive/tags/Cazador+de+Mitos+.NET/default.aspx</link><description>Tags: Cazador de Mitos .NET</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Performance: Datos en Memoria con ADO.NET IV</title><link>http://msmvps.com/blogs/cwalzer/archive/2008/05/20/performance_5F00_memoria_5F00_ado_5F00_net.aspx</link><pubDate>Tue, 20 May 2008 23:50:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1608472</guid><dc:creator>cwalzer</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/cwalzer/rsscomments.aspx?PostID=1608472</wfw:commentRss><comments>http://msmvps.com/blogs/cwalzer/archive/2008/05/20/performance_5F00_memoria_5F00_ado_5F00_net.aspx#comments</comments><description>&lt;p&gt;En este art&amp;iacute;culo quisiera mostrarles cual es el consumo de memoria de algunas t&amp;eacute;cnicas de acceso a datos. En art&amp;iacute;culos anteriores hemos estudiado y optimizado performance&amp;nbsp;mejorando el tiempo de procesamiento. Como colorario veremos algunos gr&amp;aacute;ficos que siempre ayudan a la comparaci&amp;oacute;n. &lt;/p&gt;
&lt;p&gt;Este art&amp;iacute;culo est&amp;aacute; relacionado con: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msmvps.com/blogs/cwalzer/archive/2007/09/24/anti-pr-225-cticas-i-acceso-a-datos-con-ado-net.aspx"&gt;Performance: Lectura de Datos con ADO.NET&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://msmvps.com/blogs/cwalzer/archive/2007/09/24/anti-pr-225-cticas-i-acceso-a-datos-con-ado-net.aspx"&gt;Performance: Lectura de Datos con ADO.NET II&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://msmvps.com/blogs/cwalzer/archive/2007/09/24/anti-pr-225-cticas-i-acceso-a-datos-con-ado-net.aspx"&gt;Performance: Lectura de Datos con ADO.NET III&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Presentaci&amp;oacute;n del escenario&lt;/h3&gt;
&lt;p&gt;Este es el contexto en el que estoy haciendo las mediciones: &lt;/p&gt;
&lt;p&gt;Una aplicaci&amp;oacute;n Windows Forms, que utiliza 4 mecanismos para recuperar datos &amp;ldquo;de solo lectura&amp;rdquo; de la base de datos AdvertureWorks alojada en SQL Server 2005: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DataReader cargado en una lista gen&amp;eacute;rica de objetos de entidad&lt;/li&gt;
&lt;li&gt;DataSet&lt;/li&gt;
&lt;li&gt;DataTable&lt;/li&gt;
&lt;li&gt;DataSet tipificado creado con el asistente de Visual Studio 2005&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aqu&amp;iacute; subrayo &amp;ldquo;&lt;span style="text-decoration:underline;"&gt;solo lectura&lt;/span&gt;&amp;rdquo; porque, justamente solo quiero recuperar los datos, y no hacer ninguna operaci&amp;oacute;n sobre ellos. &lt;/p&gt;
&lt;h3&gt;Memoria y Garbage Collector&lt;/h3&gt;
&lt;p&gt;Si bien sabemos que la administraci&amp;oacute;n de la memoria en .NET es un trabajo que le compete al Garbage Collector y que no es terreno en el que debamos hurgar, a no ser que sea por administraci&amp;oacute;n de memoria no manejada, siempre es bueno saber que uso hacemos de &amp;eacute;l. Si bien el Garbage Collector es un mecanismo muy optimizado, y hace un muy buen trabajo de recolecci&amp;oacute;n de basura (memoria no utilizada), tiene sus limitaciones y su costo. Ser&amp;iacute;a una buena actitud de parte nuestra considerar al Garbage Collector como un recurso m&amp;aacute;s, as&amp;iacute; como lo es la memoria. Teniendo en cuenta esto lograr&amp;iacute;amos minimizar su trabajo, lo cual redundar&amp;iacute;a en un mejor rendimiento de nuestra aplicaci&amp;oacute;n. &lt;/p&gt;
&lt;h3&gt;El C&amp;oacute;digo&lt;/h3&gt;
&lt;p&gt;La versi&amp;oacute;n completa del c&amp;oacute;digo podr&amp;aacute;s bajarla de aqu&amp;iacute;. De todas formas d&amp;eacute;mosle un vistazo: &lt;/p&gt;
&lt;p&gt;Esta es la sentencia sql a ejecutar en la base de datos AdventureWorks: &lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;Select&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;HumanResources.Employee.EmployeeID, Person.Contact.FirstName,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Person.Contact.MiddleName, Person.Contact.LastName,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HumanResources.Employee.Title, HumanResources.Employee.BirthDate,&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;Person.Address.AddressLine1, Person.Address.AddressLine2,&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;Person.Address.City, Person.Address.PostalCode, Person.Contact.EmailAddress,&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;Person.Contact.Phone, HumanResources.Employee.MaritalStatus, HumanResources.Employee.Gender&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FROM &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;HumanResources.Employee&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;INNER JOIN &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;Person.Contact &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;ON &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;HumanResources.Employee.ContactID = Person.Contact.ContactID&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;INNER JOIN &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;HumanResources.EmployeeAddress &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;ON &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;HumanResources.Employee.EmployeeID = HumanResources.EmployeeAddress.EmployeeID&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;INNER JOIN &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;Person.Address &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;ON &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;HumanResources.EmployeeAddress.AddressID = Person.Address.AddressID&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AND &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;HumanResources.EmployeeAddress.AddressID = Person.Address.AddressID&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;La clase DataAccess &lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataAccess&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;static&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;readonly&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; _connString;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;static&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;readonly&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; _sqlCmd;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;static&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; DataAccess()&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; _connString = &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;Password=;User ID=sa;Initial Catalog=AdventureWorks;Data Source=WALZER3&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#008000;"&gt;&lt;span style="font-size:x-small;color:#008000;"&gt;//Obtengo la sentencia SQL que est&amp;aacute; en el archivo de texto Consulta.sql&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;StreamReader&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; sr = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;StreamReader&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;(&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;Assembly&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.GetExecutingAssembly().GetManifestResourceStream(&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;Walzer.Antipracticas.Consulta.sql&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _sqlCmd = sr.ReadToEnd();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataSet&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; TraerDataSet()&lt;br /&gt;&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataSet&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; ds = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; (&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlConnection&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; conn = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlConnection&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;(_connString))&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; {&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; conn.Open();&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlCommand&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; cmd = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlCommand&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&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; cmd.CommandText = &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;GetEmployees&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&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; cmd.Connection = conn;&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; cmd.CommandType = &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;CommandType&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.StoredProcedure;&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlDataAdapter&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; da = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlDataAdapter&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;(cmd);&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;ds = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataSet&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&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; da.Fill(ds);&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; }&lt;br /&gt;&amp;nbsp;&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;catch&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;{&lt;br /&gt;&amp;nbsp;&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; ds;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;List&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;Employee&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;gt; TraerEmployeesOptimizado()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;List&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;Employee&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;gt; employees = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;List&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;Employee&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;try&lt;br /&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; (&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlConnection&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; conn = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlConnection&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;(_connString))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlCommand&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; cmd = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlCommand&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;cmd.CommandText = &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;GetEmployees&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;cmd.Connection = conn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;cmd.CommandType = &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;CommandType&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.StoredProcedure;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;conn.Open();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; (&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlDataReader&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; dr = cmd.ExecuteReader())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="color:#000000;"&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; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; colEmployeeId = dr.GetOrdinal(&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;EmployeeId&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="color:#000000;"&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; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; colFirstName = dr.GetOrdinal(&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;FirstName&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&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; &lt;span style="font-size:x-small;color:#008000;"&gt;&lt;span style="font-size:x-small;color:#008000;"&gt;// Omito las l&amp;iacute;neas similares por cuesti&amp;oacute;n de lectura&lt;br /&gt;&lt;span style="color:#000000;"&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; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; colCount = dr.FieldCount;&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;object&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;[] values = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;object&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;[colCount];&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;while&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; (dr.Read())&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; {&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;Employee&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; employee = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;Employee&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&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;nbsp;&amp;nbsp; dr.GetValues(values);&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; employee.EmployeeID = &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;Convert&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.ToInt32(values[colEmployeeId]);&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; employee.FirstName = &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;Convert&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.ToString(values[colFirstName]);&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; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;employees.Add(employee);&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;}&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; }&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; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;catch&lt;br /&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; employees;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataTable&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; TraerDataTableOptimizado()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#008000;"&gt;&lt;span style="font-size:x-small;color:#008000;"&gt;//Este m&amp;eacute;todo est&amp;aacute; optimizado para cargar un DataTable con datos de SOLO LECTURA&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataTable&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; dt = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&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;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; (&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlConnection&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; conn = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlConnection&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;(_connString))&lt;/span&gt;&lt;span style="font-size:x-small;"&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;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; conn.Open();&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlCommand&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; cmd = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlCommand&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;();&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;cmd.CommandText = &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;GetEmployees&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.Connection = conn;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.CommandType = &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;CommandType&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.StoredProcedure;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlDataAdapter&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; da = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlDataAdapter&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;(cmd);&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;dt = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataTable&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;();&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; da.Fill(dt);&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;&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;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;catch&lt;span style="color:#000000;"&gt;&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;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;{&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;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; dt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;"&gt;El DataSet tipificado fue creado arrastrando la consulta SQL sobre la superficie de dise&amp;ntilde;o del DataSet, lo &amp;uacute;nico que escrib&amp;iacute; fue las siguientes l&amp;iacute;neas para cargar el DataSet tipificado:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-size:x-small;"&gt;DsEmployeesTableAdapters.&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;GetEmployeesTableAdapter&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; da = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; Walzer.Antipracticas.DsEmployeesTableAdapters.&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;GetEmployeesTableAdapter&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;();&lt;br /&gt;_dsEmployees = da.GetData();&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;Lectura del uso de Memoria&lt;/h3&gt;
&lt;p&gt;Vamos medir el uso de memoria de cada una de estas t&amp;eacute;cnicas de acceso a datos utilizando 3 herramientas: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.jetbrains.com/profiler/"&gt;JetBrains DotTrace 3.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://memprofiler.com/"&gt;.NET Memory Profiler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/Downloads/details.aspx?familyid=A362781C-3870-43BE-8926-862B40AA0CD0&amp;amp;displaylang=en"&gt;CLR Profiler 2.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El CLR Profiler nos revela en una primera lectura de 290 registros representados en memoria por cada una de las t&amp;eacute;cnicas.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/blogs/cwalzer/AP/APIV02.png"&gt;&lt;img border="0" width="922" src="http://msmvps.com/blogs/cwalzer/AP/APIV02.png" height="611" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img border="0" width="1" src="http://msmvps.com/controlpanel/blogs/posteditor.aspx/AP/APIV01.png" height="1" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;En este gr&amp;aacute;fico podemos observar que el objeto del tipo AntiPracticas.frmMemoria, que es nuestra ventana, y sus referenciados consumen 836 Kb. Aunque la variable que apunta a esta estructura es de solo 368 bytes. &lt;/p&gt;
&lt;p&gt;AntiPracticas.frmMemoria tiene cuatro campos privados que apuntan a: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un DataSet Tipado (DsEmployees.GetEmployeesDataTable): 313 Kb&lt;/li&gt;
&lt;li&gt;un DataSet (Data.DataSet): 185 Kb&lt;/li&gt;
&lt;li&gt;un DataTable (Data.DataTable ): 184 Kb&lt;/li&gt;
&lt;li&gt;una colecci&amp;oacute;n gen&amp;eacute;rica de objetos del tipo Employee (Generic.List&amp;lt;T&amp;gt;): 138 Kb&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aqu&amp;iacute; mismo podemos apreciar que el DataSetTipado es la estructura m&amp;aacute;s costosa en cuanto a consumo de memoria. Que no hay casi diferencia entre un DataSet y un DataTable, y que la colecci&amp;oacute;n de objetos es la m&amp;aacute;s barata. No est&amp;aacute; dem&amp;aacute;s destacar que todas las estructuras contienen &amp;ldquo;los mismos datos&amp;rdquo;. &lt;/p&gt;
&lt;p&gt;La misma informaci&amp;oacute;n podemos verla en JetBrains DotTrace.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/blogs/cwalzer/AP/APIV03.png"&gt;&lt;img border="0" width="1009" src="http://msmvps.com/blogs/cwalzer/AP/APIV03.png" height="519" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/blogs/cwalzer/WindowsLiveWriter/AntiPrcticas.NETDatosenMemoriaconADO.NET_A660/clip_image004_2.jpg"&gt;&lt;img border="0" width="1" src="http://msmvps.com/blogs/cwalzer/AP/APIV02.png" height="1" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Observen la columna &amp;ldquo;Held Memory, bytes&amp;rdquo;, que es la memoria referenciada por cada instancia: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;_dsEmployees (Walzer.Antipracticas.DsEmployees.GetEmployeesDataTable)&lt;/li&gt;
&lt;li&gt;_ds (System.Data.DataSet)&lt;/li&gt;
&lt;li&gt;_dt (System.Data.DataTable)&lt;/li&gt;
&lt;li&gt;_employees (System.Collection.Generic.List&amp;lt;Employee&amp;gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Estructura de Objetos en memoria&lt;/h3&gt;
&lt;p&gt;Comparemos en las siguientes dos capturas la complejidad de una y otra estructura, las cuales almacenan los mismos datos, de solo lectura en nuestro caso. &lt;/p&gt;
&lt;p&gt;La primera figura nos muestra la lista gen&amp;eacute;rica _employees, la cual est&amp;aacute; implementada internamente por un vector de _items, que contiene un conjunto de objetos Employee, la cual contiene finalmente los datos. &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/blogs/cwalzer/AP/APIV04.png"&gt;&lt;img border="0" width="1009" src="http://msmvps.com/blogs/cwalzer/AP/APIV04.png" height="636" alt="" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Observemos ahora la estructura de un DataSet tipificado, y el camino para llegar al dato final. &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/blogs/cwalzer/AP/APIV05.png"&gt;&lt;img border="0" width="1009" src="http://msmvps.com/blogs/cwalzer/AP/APIV05.png" height="720" alt="" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;La estructura es mucho m&amp;aacute;s compleja, pero no perdamos de vista que un DataSet fue dise&amp;ntilde;ado con la premisa de prop&amp;oacute;sito general, y mucho de su funcionalidad es &amp;uacute;til. Debemos usar nuestro criterio a la hora de decidir que es mejor para nuestro sistema. &lt;/p&gt;
&lt;h3&gt;Inspeccionado contenido de las variables&lt;/h3&gt;
&lt;p&gt;Usemos ahora la herramienta .NET Memory Profiler para ver el contenido de un objeto del tipo Employee. Esta figura nos muestra las referencias a la que hace este objeto, que son System.String. &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/blogs/cwalzer/AP/APIV06.png"&gt;&lt;img border="0" width="1000" src="http://msmvps.com/blogs/cwalzer/AP/APIV06.png" height="543" alt="" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Pero, &amp;iquest;d&amp;oacute;nde est&amp;aacute; el campo _idEmployee que es del tipo int o _birthDate que es de tipo DateTime? Bien, estos est&amp;aacute;n contenidos en el mismo espacio de memoria que el objeto del tipo Employee ya que son tipos b&amp;aacute;sicos, int y ulong respectivamente. En cambio System.String es una referencia al espacio de memoria donde est&amp;aacute; guardada la cadena de caracteres. La solapa Field Values nos muestra el contenido de la instancia #12,729 del objeto del tipo Employee. Adem&amp;aacute;s de esta informaci&amp;oacute;n podemos apreciar, cuales son los caminos al Root de este objeto, y cu&amp;aacute;l fue el Call Stack que instanci&amp;oacute; este objeto en memoria. &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/blogs/cwalzer/AP/APIV07.png"&gt;&lt;img border="0" width="1000" src="http://msmvps.com/blogs/cwalzer/AP/APIV07.png" height="543" alt="" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3&gt;Cantidad de Objetos referenciados&lt;/h3&gt;
&lt;p&gt;Un dato que no es menor aqu&amp;iacute; es el que nos muestra la columna &amp;ldquo;Held Objects&amp;rdquo;. Esta nos dice cuantos objetos son referenciados en toda la estructura en memoria. &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/blogs/cwalzer/AP/APIV08.png"&gt;&lt;img border="0" width="1009" src="http://msmvps.com/blogs/cwalzer/AP/APIV08.png" height="500" alt="" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;En este caso la cantidad de filas en memoria para cada estructura es de 10, valor que se asemeja m&amp;aacute;s a la realidad, ya que no es buena pr&amp;aacute;ctica pasar todas las filas del resultado entre capas, sino usar t&amp;eacute;cnicas de paginaci&amp;oacute;n. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;_dsEmployees (Walzer.Antipracticas.DsEmployees.GetEmployeesDataTable): 320&lt;/li&gt;
&lt;li&gt;_ds (System.Data.DataSet): 213&lt;/li&gt;
&lt;li&gt;_dt (System.Data.DataTable): 206&lt;/li&gt;
&lt;li&gt;_employees (System.Collection.Generic.List&amp;lt;Employee&amp;gt;): 122&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;M&amp;aacute;s all&amp;aacute; de la cantidad de memoria en bytes, la cantidad de objetos referenciados nos da una idea del trabaj&amp;oacute; que tendr&amp;aacute; el Garbage Collector al momento de deshacerse de estos objetos. Cuantas m&amp;aacute;s referencias en memoria, m&amp;aacute;s recursos consumidos por este algoritmo. &lt;/p&gt;
&lt;h3&gt;Comparaci&amp;oacute;n de resultados&lt;/h3&gt;
&lt;p&gt;Veamos una serie de gr&amp;aacute;ficos que resumen las lecturas realizadas. Tom&amp;eacute; lecturas de 290 registros, 10 registros (que es el t&amp;iacute;pico caso del tama&amp;ntilde;o de una p&amp;aacute;gina cuando se realiza paginaci&amp;oacute;n) y 1 registro.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" style="MARGIN-LEFT:-0.9pt;WIDTH:291pt;BORDER-COLLAPSE:collapse;" class="MsoNormalTable"&gt;

&lt;tr style="height:15pt;"&gt;
&lt;td style="BORDER-RIGHT:windowtext 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:windowtext 1pt solid;PADDING-LEFT:5.4pt;BACKGROUND:#4f81bd 0% 50%;PADDING-BOTTOM:0in;BORDER-LEFT:windowtext 1pt solid;WIDTH:146pt;PADDING-TOP:0in;BORDER-BOTTOM:windowtext 1pt solid;HEIGHT:15pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;b&gt;&lt;span&gt;Bytes en Memoria&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:windowtext 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:windowtext 1pt solid;PADDING-LEFT:5.4pt;BACKGROUND:#4f81bd 0% 50%;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:49pt;PADDING-TOP:0in;BORDER-BOTTOM:windowtext 1pt solid;HEIGHT:15pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;b&gt;&lt;span&gt;290 reg&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:windowtext 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:windowtext 1pt solid;PADDING-LEFT:5.4pt;BACKGROUND:#4f81bd 0% 50%;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:48pt;PADDING-TOP:0in;BORDER-BOTTOM:windowtext 1pt solid;HEIGHT:15pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;b&gt;&lt;span&gt;10 reg&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:windowtext 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:windowtext 1pt solid;PADDING-LEFT:5.4pt;BACKGROUND:#4f81bd 0% 50%;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:48pt;PADDING-TOP:0in;BORDER-BOTTOM:windowtext 1pt solid;HEIGHT:15pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;b&gt;&lt;span&gt;1 reg&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:1pt solid;WIDTH:146pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span style="color:#000000;"&gt;DataSet&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:49pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span style="color:#000000;"&gt;189112&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:48pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span style="color:#000000;"&gt;19028&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:48pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span style="color:#000000;"&gt;14856&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:1pt solid;WIDTH:146pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span style="color:#000000;"&gt;DataTable&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:49pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span style="color:#000000;"&gt;188848&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:48pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span style="color:#000000;"&gt;18764&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:48pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span style="color:#000000;"&gt;14588&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:1pt solid;WIDTH:146pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span style="color:#000000;"&gt;List&amp;lt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:49pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span style="color:#000000;"&gt;141774&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:48pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span style="color:#000000;"&gt;4790&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:48pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span style="color:#000000;"&gt;514&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:15.75pt;"&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:1pt solid;WIDTH:146pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15.75pt;"&gt;&lt;b&gt;&lt;span style="color:#000000;"&gt;DataSet Tipado (wizard)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:49pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15.75pt;"&gt;&lt;b&gt;&lt;span style="color:#000000;"&gt;319478&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:48pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15.75pt;"&gt;&lt;b&gt;&lt;span style="color:#000000;"&gt;33114&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:48pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15.75pt;"&gt;&lt;b&gt;&lt;span style="color:#000000;"&gt;28902&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;i&gt;Fig1: Tabla Comparativa de Bytes en Memoria&lt;/i&gt; &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/blogs/cwalzer/AP/APIV09.png"&gt;&lt;img border="0" width="500" src="http://msmvps.com/blogs/cwalzer/AP/APIV09.png" height="300" alt="" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;i&gt;Fig2: Bytes en memoria para 290 registros&lt;/i&gt; &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/blogs/cwalzer/AP/APIV010.png"&gt;&lt;img border="0" width="500" src="http://msmvps.com/blogs/cwalzer/AP/APIV010.png" height="300" alt="" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;i&gt;Fig3: Bytes en memoria de 10 y 1 registro.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" style="MARGIN-LEFT:-0.9pt;WIDTH:291pt;BORDER-COLLAPSE:collapse;" class="MsoNormalTable"&gt;

&lt;tr style="height:15pt;"&gt;
&lt;td style="BORDER-RIGHT:windowtext 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:windowtext 1pt solid;PADDING-LEFT:5.4pt;BACKGROUND:#4f81bd 0% 50%;PADDING-BOTTOM:0in;BORDER-LEFT:windowtext 1pt solid;WIDTH:146pt;PADDING-TOP:0in;BORDER-BOTTOM:windowtext 1pt solid;HEIGHT:15pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;b&gt;&lt;span&gt;Referencias&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:windowtext 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:windowtext 1pt solid;PADDING-LEFT:5.4pt;BACKGROUND:#4f81bd 0% 50%;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:49pt;PADDING-TOP:0in;BORDER-BOTTOM:windowtext 1pt solid;HEIGHT:15pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;b&gt;&lt;span&gt;290 reg&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:windowtext 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:windowtext 1pt solid;PADDING-LEFT:5.4pt;BACKGROUND:#4f81bd 0% 50%;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:48pt;PADDING-TOP:0in;BORDER-BOTTOM:windowtext 1pt solid;HEIGHT:15pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;b&gt;&lt;span&gt;10 reg&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:windowtext 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:windowtext 1pt solid;PADDING-LEFT:5.4pt;BACKGROUND:#4f81bd 0% 50%;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:48pt;PADDING-TOP:0in;BORDER-BOTTOM:windowtext 1pt solid;HEIGHT:15pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;b&gt;&lt;span&gt;1 reg&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:1pt solid;WIDTH:146pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span&gt;DataSet&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:49pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span&gt;3581&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:48pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span&gt;213&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:48pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span&gt;105&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:1pt solid;WIDTH:146pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span&gt;DataTable&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:49pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span&gt;3574&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:48pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span&gt;206&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:48pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span&gt;98&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:15pt;"&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:1pt solid;WIDTH:146pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span&gt;List&amp;lt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:49pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span&gt;3477&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:48pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span&gt;122&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:48pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15pt;"&gt;&lt;b&gt;&lt;span&gt;13&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:15.75pt;"&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:1pt solid;WIDTH:146pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15.75pt;"&gt;&lt;b&gt;&lt;span&gt;DataSet Tipado (wizard)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:49pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15.75pt;"&gt;&lt;b&gt;&lt;span&gt;3788&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:48pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15.75pt;"&gt;&lt;b&gt;&lt;span&gt;300&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT:1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:48pt;PADDING-TOP:0in;BORDER-BOTTOM:1pt solid;HEIGHT:15.75pt;"&gt;&lt;b&gt;&lt;span&gt;192&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;&lt;i&gt;Fig4: Tabla Comparativa de Objetos Referenciados&lt;/i&gt; &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/blogs/cwalzer/AP/APIV011.png"&gt;&lt;img border="0" width="502" src="http://msmvps.com/blogs/cwalzer/AP/APIV011.png" height="300" alt="" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;i&gt;Fig5: Instancias referenciadas para 290 registros&lt;/i&gt; &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/blogs/cwalzer/AP/APIV012.png"&gt;&lt;img border="0" width="500" src="http://msmvps.com/blogs/cwalzer/AP/APIV012.png" height="300" alt="" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;i&gt;Fig6: Instancias referenciadas para 10 y 1 registro&lt;/i&gt; &lt;/p&gt;
&lt;p&gt;Estos gr&amp;aacute;ficos muestran claramente que la t&amp;eacute;cnica m&amp;aacute;s econ&amp;oacute;mica es pasar entre capas una lista gen&amp;eacute;rica de un tipo espec&amp;iacute;fico. Y que la ferreter&amp;iacute;a utilizada por las estructuras del tipo DataSet se puede despreciar cuanto mayor es el volumen que contienen. &lt;/p&gt;
&lt;h3&gt;Conclusi&amp;oacute;n&lt;/h3&gt;
&lt;p&gt;Hemos comprobado que el uso correcto de las t&amp;eacute;cnicas de acceso a datos en ADO.NET nos permite lograr un mayor rendimiento en nuestras aplicaciones. Tambi&amp;eacute;n hemos aprendido algo de c&amp;oacute;mo funciona internamente ADO.NET, y como son las estructuras en memoria y el uso que se hace de ellas. &lt;/p&gt;
&lt;p&gt;Siempre es bueno conocer c&amp;oacute;mo funcionan internamente los frameworks que utilizamos para construir nuestras aplicaciones para poner en la balanza, facilidad y agilidad de uso contra rendimiento y consumo de recursos.&lt;/p&gt;
&lt;p&gt;
&lt;script src="http://feeds.feedburner.com/~s/cWalzer?i=http://msmvps.com/blogs/cwalzer/archive/2008/05/21/performance_5F00_memoria_5F00_ado_5F00_net.aspx" type="text/javascript"&gt;&lt;/script&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1608472" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/Performance/default.aspx">Performance</category><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/ADO.NET/default.aspx">ADO.NET</category><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/Anti+Practicas/default.aspx">Anti Practicas</category><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/Cazador+de+Mitos+.NET/default.aspx">Cazador de Mitos .NET</category><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/Rendimiento/default.aspx">Rendimiento</category></item><item><title>Anti Prácticas .NET: Lectura de Datos con ADO.NET III</title><link>http://msmvps.com/blogs/cwalzer/archive/2007/11/12/antipracticaslecturadatosnet3.aspx</link><pubDate>Mon, 12 Nov 2007 17:26:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1304246</guid><dc:creator>cwalzer</dc:creator><slash:comments>11</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/cwalzer/rsscomments.aspx?PostID=1304246</wfw:commentRss><comments>http://msmvps.com/blogs/cwalzer/archive/2007/11/12/antipracticaslecturadatosnet3.aspx#comments</comments><description>&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Esta es la &amp;uacute;ltima entrega de esta zaga. En este art&amp;iacute;culo har&amp;eacute; un resumen de lo investigado, las mejoras que hemos encontrado para mejorar el rendimiento de Lectura de Datos con ADO.NET, y haremos algunos gr&amp;aacute;ficos comparativos que siempre ayudan a visualizar mejor la comparaci&amp;oacute;n.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Este art&amp;iacute;culo es una continuaci&amp;oacute;n de los art&amp;iacute;culos anteriores:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;color:#800080;font-family:Calibri;"&gt;&lt;a target="_blank" href="http://msmvps.com/blogs/cwalzer/archive/2007/09/24/anti-pr-225-cticas-i-acceso-a-datos-con-ado-net.aspx"&gt;Anti Pr&amp;aacute;cticas .NET: Lectura de Datos con ADO.NET&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a target="_blank" href="http://msmvps.com/blogs/cwalzer/archive/2007/10/30/antipracticasnetlecturaadonet2.aspx"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;color:#800080;font-family:Calibri;"&gt;Anti Pr&amp;aacute;cticas .NET: Lectura de Datos con ADO.NET&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt; II&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 style="MARGIN:10pt 0in 0pt;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:medium;"&gt;&lt;span style="color:#4f81bd;"&gt;&lt;span style="font-family:Cambria;"&gt;Presentaci&amp;oacute;n del escenario&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Este es el contexto en el que estoy haciendo las mediciones:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Una aplicaci&amp;oacute;n Windows Forms, que utiliza 4 mecanismos para recuperar datos &amp;ldquo;de solo lectura&amp;rdquo; de la base de datos AdvertureWorks alojada en SQL Server 2005:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;DataReader cargado en una lista gen&amp;eacute;rica de objetos de entidad&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;DataSet&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;DataTable&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Dataset tipificado creado con el asistente de Visual Studio 2005&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Aqu&amp;iacute; subrayo &amp;ldquo;&lt;span style="text-decoration:underline;"&gt;solo lectura&lt;/span&gt;&amp;rdquo; porque, justamente solo quiero recuperar los datos, y no hacer ninguna operaci&amp;oacute;n sobre ellos.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;En realidad las 3 primeras t&amp;eacute;cnicas fueron descriptas en los art&amp;iacute;culos anteriores.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;En este se agrega la carga del DataSet tipificado. Por lo menos mi experiencia me dice que los Asistentes crean c&amp;oacute;digo no muy optimizado que digamos.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;As&amp;iacute; que llamemos de nuevo al &amp;ldquo;&lt;b style="mso-bidi-font-weight:normal;"&gt;Cazador de Mitos .NET&lt;/b&gt;&amp;rdquo;, que nos dir&amp;aacute;:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Vamos a la caza del mito: &amp;ldquo;&lt;b style="mso-bidi-font-weight:normal;"&gt;El c&amp;oacute;digo generado por un asistente no desempe&amp;ntilde;a un buen rendimiento&lt;/b&gt;&amp;rdquo;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="MARGIN:10pt 0in 0pt;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:medium;"&gt;&lt;span style="color:#4f81bd;"&gt;&lt;span style="font-family:Cambria;"&gt;El C&amp;oacute;digo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;La versi&amp;oacute;n completa del c&amp;oacute;digo podr&amp;aacute;s &lt;a href="http://msmvps.com/blogs/cwalzer/Posts/AntiPrac/CarlosWalzer_AntiPracIII.zip"&gt;bajarla de aqu&amp;iacute;&lt;/a&gt;.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;De todas formas d&amp;eacute;mosle un vistazo:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Esta es la sentencia sql a ejecutar en la base de datos AdventureWorks:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;Select &lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;HumanResources.Employee.EmployeeID, Person.Contact.FirstName&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Person.Contact.MiddleName, Person.Contact.LastName,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;HumanResources.Employee.Title, HumanResources.Employee.BirthDate,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Person.Address.AddressLine1, Person.Address.AddressLine2,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Person.Address.City, Person.Address.PostalCode, Person.Contact.EmailAddress,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Person.Contact.Phone, HumanResources.Employee.MaritalStatus, HumanResources.Employee.Gender&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;FROM &lt;/span&gt;HumanResources.Employee&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;INNER JOIN &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;Person.Contact&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;ON &lt;/span&gt;HumanResources.Employee.ContactID = Person.Contact.ContactID&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;INNER JOIN &lt;/span&gt;HumanResources.EmployeeAddress&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;ON &lt;/span&gt;HumanResources.Employee.EmployeeID = HumanResources.EmployeeAddress.EmployeeID&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;INNER JOIN &lt;/span&gt;Person.Address&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;ON &lt;/span&gt;HumanResources.EmployeeAddress.AddressID = Person.Address.AddressID&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;AND &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;HumanResources.EmployeeAddress.AddressID = Person.Address.AddressID&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;El DataSet tipificado fue creado arrastrando la consulta SQL sobre la superficie de dise&amp;ntilde;o del DataSet, lo &amp;uacute;nico que escrib&amp;iacute; fue las siguientes l&amp;iacute;neas para cargar el DataSet tipificado:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;private&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; button1_Click(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af;"&gt;EventArgs&lt;/span&gt; e)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:#2b91af;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;DsEmployees&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;.&lt;span style="color:#2b91af;"&gt;GetEmployeesDataTable&lt;/span&gt; dsEmployees;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;DsEmployeesTableAdapters.&lt;span style="color:#2b91af;"&gt;GetEmployeesTableAdapter&lt;/span&gt; da = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; DsEmployeesTableAdapters.&lt;span style="color:#2b91af;"&gt;GetEmployeesTableAdapter&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;dsEmployees = da.GetData();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="MARGIN:10pt 0in 0pt;"&gt;&lt;span style="mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="font-size:medium;"&gt;&lt;span style="color:#4f81bd;"&gt;&lt;span style="font-family:Cambria;"&gt;Lectura del DataSet tipificado&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Vamos a medir el tiempo que consume la carga del DataSet tipificado. Para ello recordemos que la consulta devuelve 290 regitros y que la ejecuto 10 veces.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;a target="_blank" href="http://msmvps.com/blogs/cwalzer/AP/APIII001.png"&gt;&lt;img border="0" width="886" src="http://msmvps.com/blogs/cwalzer/AP/APIII001.png" height="519" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;El tiempo consumido es de 7618,5 ms. Recuerda que la lectura anterior del DataSet era 2386 ms, para el DataTable 2369 ms y para el List&amp;lt;&amp;gt; 1883 ms.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Creo que realmente no vale la pena hacer un estudio para saber internamente d&amp;oacute;nde est&amp;aacute; el mayor consumo, puesto que el uso de asistentes nunca fue una pr&amp;aacute;ctica recomendada.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="MARGIN:10pt 0in 0pt;"&gt;&lt;span style="font-size:medium;"&gt;&lt;span style="color:#4f81bd;"&gt;&lt;span style="font-family:Cambria;"&gt;&amp;iexcl;Mito cazado! &lt;/span&gt;&lt;span style="font-family:Wingdings;mso-ascii-font-family:Cambria;mso-ascii-theme-font:major-latin;mso-hansi-font-family:Cambria;mso-hansi-theme-font:major-latin;mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;&lt;span style="mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;J&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Cambria;"&gt;. El c&amp;oacute;digo generado por un asistente no desempe&amp;ntilde;a un buen rendimiento.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="MARGIN:10pt 0in 0pt;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:medium;"&gt;&lt;span style="color:#4f81bd;"&gt;&lt;span style="font-family:Cambria;"&gt;Comparaci&amp;oacute;n de resultados&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Veamos una serie de gr&amp;aacute;ficos que resumen las lecturas realizadas.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Tom&amp;eacute; lecturas de 290 registros, 10 registros (que es el t&amp;iacute;pico caso del tama&amp;ntilde;o de una p&amp;aacute;gina cuando se realiza paginaci&amp;oacute;n) y 1 registro.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;a target="_blank" href="http://msmvps.com/blogs/cwalzer/AP/APIII001.png"&gt;&lt;/a&gt;&amp;nbsp;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;img border="0" width="487" src="http://msmvps.com/blogs/cwalzer/AP/APIII002.png" height="101" alt="" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Fig1: Tabla Comparativa&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;img border="0" src="http://msmvps.com/blogs/cwalzer/AP/APIII003.png" alt="" /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Fig2: Lectura de 290 registros&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt; &lt;/p&gt;
&lt;p&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;img border="0" src="http://msmvps.com/blogs/cwalzer/AP/APIII004.png" alt="" /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Fig3: Lectura de 10 y 1 registro.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Estos gr&amp;aacute;ficos muestran claramente que la t&amp;eacute;cnica m&amp;aacute;s r&amp;aacute;pida es la carga de una lista gen&amp;eacute;rica List&amp;lt;&amp;gt; de objetos de Entidades; t&amp;eacute;cnica utilizada en capas de acceso a datos DALs (Data Access Layers), y la encontraremos por varios sitios como mejor pr&amp;aacute;ctica.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="MARGIN:10pt 0in 0pt;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:medium;"&gt;&lt;span style="color:#4f81bd;"&gt;&lt;span style="font-family:Cambria;"&gt;Resumen de las mejoras realizadas&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;La primera mejora realizada fue respecto de la carga de un DataTable. En ese caso hab&amp;iacute;amos detectado que la carga de un DataTable StandAlone era m&amp;aacute;s lento que la de un DataSet. Para mejorar el tiempo hab&amp;iacute;amos reemplazado la llamada DataTable.Load() por el uso de un DataAdapter.Fill(dataTable). El DataAdapter est&amp;aacute; optimizado para solo lectura de manera predeterminada.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;La segunda mejora tiene que ver con la carga del List&amp;lt;&amp;gt;.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;All&amp;iacute; hab&amp;iacute;amos detectado que llamadas a GetOrdinal() dentro del bucle que pod&amp;iacute;an obviarse, justamente obteniendo el ordinal de la columna antes de lanzar el bucle. Y la otra mejora era obtener todos los valores de la columnas de una fila con el m&amp;eacute;todo GetValues(vector), y luego tomar los datos del vector.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:medium;"&gt;&lt;span style="color:#4f81bd;"&gt;&lt;span style="font-family:Cambria;"&gt;LINQ to SQL&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:medium;"&gt;&lt;span style="color:#4f81bd;"&gt;&lt;span style="font-family:Cambria;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Me hubiese gustado poder comparar en esta serie de art&amp;iacute;culos el uso de LINQ to SQL y Entity Data Framework, pero no ser&amp;iacute;a muy preciso hacerlo con un c&amp;oacute;digo beta.&amp;nbsp;Como dec&amp;iacute;a no podemos comparar, pero si ver que es lo m&amp;aacute;s optimo dentro de LINQ to SQL. Para ello, te recomiendo un art&amp;iacute;culo del maestro&amp;nbsp;&lt;a href="http://blogs.solidq.com/ES/dseara/Lists/Posts/Post.aspx?ID=47"&gt;Daniel Seara&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="MARGIN:10pt 0in 0pt;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:medium;"&gt;&lt;span style="color:#4f81bd;"&gt;&lt;span style="font-family:Cambria;"&gt;Conclusi&amp;oacute;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Hemos comprobado que el uso correcto de las t&amp;eacute;cnicas de acceso a datos en ADO.NET nos permite lograr un mayor rendimiento en nuestras aplicaciones.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Tambi&amp;eacute;n hemos aprendido algo de c&amp;oacute;mo funciona internamente ADO.NET, ejercicio que nos va a servir para tomar buenas decisiones al momento de elegir nuestra estrategia de acceso a datos.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;La pr&amp;oacute;xima entrega tendr&amp;aacute; que ver con el consumo de memoria que est&amp;aacute;s t&amp;eacute;cnicas hacen.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;script src="http://feeds.feedburner.com/~s/cWalzer?i=http://msmvps.com/blogs/cwalzer/archive/2007/11/12/antipracticaslecturadatosnet3.aspx" type="text/javascript"&gt;&lt;/script&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1304246" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/Performance/default.aspx">Performance</category><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/ADO.NET/default.aspx">ADO.NET</category><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/Anti+Practicas/default.aspx">Anti Practicas</category><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/Cazador+de+Mitos+.NET/default.aspx">Cazador de Mitos .NET</category><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/Rendimiento/default.aspx">Rendimiento</category></item><item><title>Anti Prácticas .NET: Lectura de Datos con ADO.NET II</title><link>http://msmvps.com/blogs/cwalzer/archive/2007/10/30/antipracticasnetlecturaadonet2.aspx</link><pubDate>Tue, 30 Oct 2007 10:21:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1274542</guid><dc:creator>cwalzer</dc:creator><slash:comments>11</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/cwalzer/rsscomments.aspx?PostID=1274542</wfw:commentRss><comments>http://msmvps.com/blogs/cwalzer/archive/2007/10/30/antipracticasnetlecturaadonet2.aspx#comments</comments><description>&lt;h1 style="MARGIN:24pt 0in 0pt;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:large;"&gt;&lt;span style="color:#365f91;"&gt;&lt;span style="font-family:Cambria;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;Dada la sugerencia de &lt;/span&gt;&lt;/span&gt;&lt;a href="http://geeks.ms/blogs/sergiotarrillo" title="Sergio Tarrillo"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;Sergio Tarrillo&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;, en este art&amp;iacute;culo mediremos la lectura de datos de una base de datos con ADO.NET, incluyendo la carga de una lista gen&amp;eacute;rica List&amp;lt;&amp;gt; de objetos de entidad.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;Este art&amp;iacute;culo es una continuaci&amp;oacute;n del art&amp;iacute;culo anterior &lt;/span&gt;&lt;/span&gt;&lt;a href="http://msmvps.com/blogs/cwalzer/archive/2007/09/24/anti-pr-225-cticas-i-acceso-a-datos-con-ado-net.aspx"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;color:#800080;font-family:Calibri;"&gt;Anti Pr&amp;aacute;cticas .NET: Lectura de Datos con ADO.NET&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="MARGIN:10pt 0in 0pt;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:medium;"&gt;&lt;span style="color:#4f81bd;"&gt;&lt;span style="font-family:Cambria;"&gt;Presentaci&amp;oacute;n del escenario&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Este es el contexto en el que estoy haciendo las mediciones:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Una aplicaci&amp;oacute;n Windows Forms, que utiliza 3 mecanismos para recuperar datos &amp;ldquo;de solo lectura&amp;rdquo; de la base de datos AdvertureWorks alojada en SQL Server 2005:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;DataReader cargado en una lista gen&amp;eacute;rica de objetos de entidad&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;DataSet&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;DataTable&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Aqu&amp;iacute; subrayo &amp;ldquo;&lt;span style="text-decoration:underline;"&gt;solo lectura&lt;/span&gt;&amp;rdquo; porque, justamente solo quiero recuperar los datos, y no hacer ninguna operaci&amp;oacute;n sobre ellos.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style="MARGIN:10pt 0in 0pt;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:medium;"&gt;&lt;span style="color:#4f81bd;"&gt;&lt;span style="font-family:Cambria;"&gt;El C&amp;oacute;digo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;La versi&amp;oacute;n completa del c&amp;oacute;digo podr&amp;aacute;s &lt;a target="_blank" href="http://msmvps.com/blogs/cwalzer/Posts/AntiPrac/CarlosWalzer_AntiPracII.zip"&gt;bajarla de aqu&amp;iacute;&lt;/a&gt;.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;De todas formas d&amp;eacute;mosle un vistazo:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Esta es la sentencia sql a ejecutar en la base de datos AdventureWorks:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;br /&gt;Select &lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;HumanResources.Employee.EmployeeID, Person.Contact.FirstName&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Person.Contact.MiddleName, Person.Contact.LastName,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;HumanResources.Employee.Title, HumanResources.Employee.BirthDate,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;Person.Address.AddressLine1, Person.Address.AddressLine2,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Person.Address.City, Person.Address.PostalCode, Person.Contact.EmailAddress,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Person.Contact.Phone, HumanResources.Employee.MaritalStatus, HumanResources.Employee.Gender&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;FROM &lt;/span&gt;HumanResources.Employee&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;INNER JOIN &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;Person.Contact&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;ON &lt;/span&gt;HumanResources.Employee.ContactID = Person.Contact.ContactID&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;INNER JOIN &lt;/span&gt;HumanResources.EmployeeAddress&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;ON &lt;/span&gt;HumanResources.Employee.EmployeeID = HumanResources.EmployeeAddress.EmployeeID&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;INNER JOIN &lt;/span&gt;Person.Address&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;ON &lt;/span&gt;HumanResources.EmployeeAddress.AddressID = Person.Address.AddressID&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;AND &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;HumanResources.EmployeeAddress.AddressID = Person.Address.AddressID&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:8pt;LINE-HEIGHT:115%;"&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;y &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;la clase DataAccess:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;namespace&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt; Walzer.Antipracticas&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DataAccess&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;readonly&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; _connString;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;readonly&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; _sqlCmd;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; DataAccess()&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_connString = &lt;span style="color:#a31515;"&gt;&amp;quot;Password=;User ID=;Initial Catalog=AdventureWorks;Data Source=WALZER3&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//Obtengo la sentencia SQL que est&amp;aacute; en el archivo de texto Consulta.sql&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:#2b91af;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;StreamReader&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; sr = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;StreamReader&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;Assembly&lt;/span&gt;.GetExecutingAssembly().GetManifestResourceStream(&lt;span style="color:#a31515;"&gt;&amp;quot;Walzer.Antipracticas.Consulta.sql&amp;quot;&lt;/span&gt;));&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_sqlCmd = sr.ReadToEnd();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DataSet&lt;/span&gt; TraerDataSet()&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;DataSet&lt;/span&gt; ds = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;try&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;SqlConnection&lt;/span&gt; conn = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlConnection&lt;/span&gt;(_connString))&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;conn.Open();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt; cmd = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;cmd.CommandText = _sqlCmd;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;cmd.Connection = conn;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;cmd.CommandType = &lt;span style="color:#2b91af;"&gt;CommandType&lt;/span&gt;.Text;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&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;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SqlDataAdapter&lt;/span&gt; da = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlDataAdapter&lt;/span&gt;(cmd);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;ds = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DataSet&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;da.Fill(ds);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;catch &lt;/span&gt;{}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; ds;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Employee&lt;/span&gt;&amp;gt; TraerEmployees()&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Employee&lt;/span&gt;&amp;gt; employees = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Employee&lt;/span&gt;&amp;gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;try&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;SqlConnection&lt;/span&gt; conn = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlConnection&lt;/span&gt;(_connString))&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt; cmd = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;cmd.CommandText = _sqlCmd;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;cmd.Connection = conn;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;cmd.CommandType = &lt;span style="color:#2b91af;"&gt;CommandType&lt;/span&gt;.Text;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;conn.Open();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;SqlDataReader&lt;/span&gt; dr = cmd.ExecuteReader())&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;while&lt;/span&gt; (dr.Read())&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Employee&lt;/span&gt; employee = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Employee&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;employee.EmployeeID = &lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ToInt32(dr[&lt;span style="color:#a31515;"&gt;&amp;quot;EmployeeId&amp;quot;&lt;/span&gt;]);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;employee.FirstName = &lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ToString(dr[&lt;span style="color:#a31515;"&gt;&amp;quot;FirstName&amp;quot;&lt;/span&gt;]);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:#008000;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;//Por motivos de espacio obvi&amp;eacute; las lineas restantes&amp;hellip;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;employees.Add(employee);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;catch &lt;/span&gt;{}&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; employees;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DataTable&lt;/span&gt; TraerDataTableOptimizado()&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//Este m&amp;eacute;todo est&amp;aacute; optimizado para cargar un DataTable con datos de SOLO LECTURA&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:#2b91af;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;DataTable&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; dt = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;try&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;SqlConnection&lt;/span&gt; conn = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlConnection&lt;/span&gt;(_connString))&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;conn.Open();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt; cmd = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;cmd.CommandText = _sqlCmd;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;cmd.Connection = conn;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;cmd.CommandType = &lt;span style="color:#2b91af;"&gt;CommandType&lt;/span&gt;.Text;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SqlDataAdapter&lt;/span&gt; da = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlDataAdapter&lt;/span&gt;(cmd);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;dt = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DataTable&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;da.Fill(dt);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;catch &lt;/span&gt;{}&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; dt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;}&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="MARGIN:10pt 0in 0pt;"&gt;&lt;span style="mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="font-size:medium;"&gt;&lt;span style="color:#4f81bd;"&gt;&lt;span style="font-family:Cambria;"&gt;Comparaci&amp;oacute;n de T&amp;eacute;cnicas&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Lo que primero vamos a medir es el tiempo que consume cada uno de las t&amp;eacute;cnicas de lectura de datos. Para ello recordemos que la consulta devuelve 290 regitros y que ejecuto 10 veces cada m&amp;eacute;todo.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;a target="_blank" href="http://msmvps.com/photos/cwalzer/images/1262269/original.aspx"&gt;&lt;img border="0" width="886" src="http://msmvps.com/photos/cwalzer/images/1262269/original.aspx" height="519" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Podemos observar entonces que no hay mayor diferencia entre las t&amp;eacute;cnicas.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Claro que ya hemos optimizado en el art&amp;iacute;culo anterior la lectura del DataTable.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="MARGIN:10pt 0in 0pt;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:medium;"&gt;&lt;span style="color:#4f81bd;"&gt;&lt;span style="font-family:Cambria;"&gt;Optimizaci&amp;oacute;n de la carga de una lista gen&amp;eacute;rica de objetos de entidad con DataReader&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;De todas formas ser&amp;iacute;a bueno revisar el m&amp;eacute;todo TraerEmployees, que carga una List&amp;lt;Employee&amp;gt; para ver si le cabe alguna optimizaci&amp;oacute;n.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;a target="_blank" href="http://msmvps.com/photos/cwalzer/images/1262266/original.aspx"&gt;&lt;img border="0" width="886" src="http://msmvps.com/photos/cwalzer/images/1262266/original.aspx" height="519" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;Encontramos aqu&amp;iacute; que tenemos 446 ms. + 74 ms. en 34800 + 5800 invocaciones a GetOrdinal() debido a la forma en que recuperamos el valor de la columna &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;dr[&lt;span style="color:#a31515;"&gt;&amp;quot;nombreCampo&amp;quot;&lt;/span&gt;]&lt;/span&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;. GetOrdinal devuelve la posici&amp;oacute;n de la columna para ese nombre campo, y esto es muy conveniente.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;No es recomendable reemplazar el nombre de la columna por el n&amp;uacute;mero de la misma al recuperar el dato, ya que cualquier cambio en la consulta SQL invalidar&amp;iacute;a nuestro c&amp;oacute;digo.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Lo que debemos hacer entonces es minimizar la cantidad de llamadas. &lt;/span&gt;Quitemos la invocaciones a GetOrdinal() de adentro del bucle.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;static&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Employee&lt;/span&gt;&amp;gt; TraerEmployeesOptimizado1()&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Employee&lt;/span&gt;&amp;gt; employees = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Employee&lt;/span&gt;&amp;gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;try&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;SqlConnection&lt;/span&gt; conn = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlConnection&lt;/span&gt;(_connString))&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt; cmd = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cmd.CommandText = _sqlCmd;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cmd.Connection = conn;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cmd.CommandType = &lt;span style="color:#2b91af;"&gt;CommandType&lt;/span&gt;.Text;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;conn.Open();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;SqlDataReader&lt;/span&gt; dr = cmd.ExecuteReader())&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; colEmployeeId = dr.GetOrdinal(&lt;span style="color:#a31515;"&gt;&amp;quot;EmployeeId&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; colFirstName = dr.GetOrdinal(&lt;span style="color:#a31515;"&gt;&amp;quot;FirstName&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:#008000;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;//Por motivos de espacio obvi&amp;eacute; las lineas restantes&amp;hellip;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;while&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; (dr.Read())&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Employee&lt;/span&gt; employee = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Employee&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;employee.EmployeeID = &lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ToInt32(dr[colEmployeeId]);&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;employee.FirstName = &lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ToString(dr[colFirstName]);&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:#008000;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;//Por motivos de espacio obvi&amp;eacute; las lineas restantes&amp;hellip;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;employees.Add(employee);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;catch &lt;/span&gt;{}&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; employees;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Revisemos el profiling de c&amp;oacute;digo del c&amp;oacute;digo optimizado:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;a target="_blank" href="http://msmvps.com/photos/cwalzer/images/1262267/original.aspx"&gt;&lt;img border="0" width="886" src="http://msmvps.com/photos/cwalzer/images/1262267/original.aspx" height="519" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Hemos bajado el tiempo de 2631 ms. a 2132 ms. y reducido las invocaciones a GetOrdinal() a las necesarias: 14 invocaciones -&amp;gt; 14 campos.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;La segunda reducci&amp;oacute;n que podr&amp;iacute;amos hacer corresponde con get_MetaData(), la cual se invoca por registro y por columna. La intenci&amp;oacute;n de minimizar esta llamada es la siguiente: &amp;iquest;Para qu&amp;eacute; leer la &amp;ldquo;metadata&amp;rdquo; una y otra vez si el esquema de los datos no var&amp;iacute;a en un set de resultados de solo lectura como es el DataReader? &amp;iquest;C&amp;oacute;mo podemos hacer para reducir la cantidad de invocaciones?. Bien, mi sugerencia es tratando de reducir las invocaciones a GetValue() que internamente llama a get_MetaData(), reemplaz&amp;aacute;ndola por GetValues(object[]), la cual lee los datos del registro de una vez y devuelve un vector con los resultados.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;static&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Employee&lt;/span&gt;&amp;gt; TraerEmployeesOptimizado2()&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Employee&lt;/span&gt;&amp;gt; employees = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Employee&lt;/span&gt;&amp;gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;try&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;SqlConnection&lt;/span&gt; conn = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlConnection&lt;/span&gt;(_connString))&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt; cmd = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cmd.CommandText = _sqlCmd;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cmd.Connection = conn;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cmd.CommandType = &lt;span style="color:#2b91af;"&gt;CommandType&lt;/span&gt;.Text;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;conn.Open();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;SqlDataReader&lt;/span&gt; dr = cmd.ExecuteReader())&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; colEmployeeId = dr.GetOrdinal(&lt;span style="color:#a31515;"&gt;&amp;quot;EmployeeId&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; colFirstName = dr.GetOrdinal(&lt;span style="color:#a31515;"&gt;&amp;quot;FirstName&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:#008000;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;//Por motivos de espacio obvi&amp;eacute; las lineas restantes&amp;hellip;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:8pt;color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;int&lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; colCount = dr.FieldCount;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;[] values = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;[colCount];&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;while&lt;/span&gt; (dr.Read())&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Employee&lt;/span&gt; employee = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Employee&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;dr.GetValues(values);&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;employee.EmployeeID = &lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ToInt32(values[colEmployeeId]);&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;employee.FirstName = &lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ToString(values[colFirstName]);&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:#008000;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;//Por motivos de espacio obvi&amp;eacute; las lineas restantes&amp;hellip;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;employees.Add(employee);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;catch &lt;/span&gt;{}&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; employees;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:ES;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Si observamos ahora el profiler vemos que las invocaciones a get_MetaData() se hacen por registro y no por columna.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;a target="_blank" href="http://msmvps.com/photos/cwalzer/images/1262268/original.aspx"&gt;&lt;img border="0" width="886" src="http://msmvps.com/photos/cwalzer/images/1262268/original.aspx" height="519" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Con esta segunda optimizaci&amp;oacute;n, hemos logrado reducir el tiempo 2631 ms. a 1883 ms., disminuyendo las invocaciones a get_MetaData() de 4060 a 290. Logramos entonces una reducci&amp;oacute;n del 40%.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="MARGIN:10pt 0in 0pt;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:medium;"&gt;&lt;span style="color:#4f81bd;"&gt;&lt;span style="font-family:Cambria;"&gt;Conclusi&amp;oacute;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Hemos comprobado que el uso correcto de las t&amp;eacute;cnicas de acceso a datos en ADO.NET nos permite lograr un mayor rendimiento en nuestras aplicaciones.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Tambi&amp;eacute;n hemos aprendido algo de c&amp;oacute;mo funciona internamente ADO.NET, ejercicio que nos va a servir para tomar buenas decisiones al momento de elegir nuestra estrategia de acceso a datos.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Queda para una tercera entrega ver el costo de acceder a los datos usando los Asistentes de Visual Studio 2005.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;All&amp;iacute; har&amp;eacute; un resumen de lo investigado, para que tengan en cuenta al momento de dise&amp;ntilde;ar su estrategia de acceso a datos.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:medium;"&gt;&lt;span style="color:#4f81bd;"&gt;&lt;span style="font-family:Cambria;"&gt;Continuaci&amp;oacute;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-ansi-language:ES;"&gt;&lt;a href="http://msmvps.com/blogs/cwalzer/archive/2007/11/12/antipracticaslecturadatosnet3.aspx"&gt;Parte III&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;script src="http://feeds.feedburner.com/~s/cWalzer?i=http://msmvps.com/blogs/cwalzer/archive/2007/10/30/antipracticasnetlecturaadonet2.aspx" type="text/javascript"&gt;&lt;/script&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1274542" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/Performance/default.aspx">Performance</category><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/ADO.NET/default.aspx">ADO.NET</category><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/Anti+Practicas/default.aspx">Anti Practicas</category><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/Cazador+de+Mitos+.NET/default.aspx">Cazador de Mitos .NET</category><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/Rendimiento/default.aspx">Rendimiento</category></item><item><title>Anti Prácticas .NET: Lectura de Datos con ADO.NET</title><link>http://msmvps.com/blogs/cwalzer/archive/2007/09/24/anti-pr-225-cticas-i-acceso-a-datos-con-ado-net.aspx</link><pubDate>Mon, 24 Sep 2007 21:30:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1214042</guid><dc:creator>cwalzer</dc:creator><slash:comments>14</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/cwalzer/rsscomments.aspx?PostID=1214042</wfw:commentRss><comments>http://msmvps.com/blogs/cwalzer/archive/2007/09/24/anti-pr-225-cticas-i-acceso-a-datos-con-ado-net.aspx#comments</comments><description>&lt;p&gt;Estoy inaugurando secci&amp;oacute;n en mi Blog, con la intenci&amp;oacute;n de demostrar el costo que implica una mala codificaci&amp;oacute;n o error de dise&amp;ntilde;o en una aplicaci&amp;oacute;n .NET. Conversando sobre el tema con Adolfo Wiernik me sugiri&amp;oacute; el nombre &amp;quot;&lt;strong&gt;Anti Pr&amp;aacute;cticas .NET&lt;/strong&gt;&amp;quot;. Seguramente en cada una de estas entregas,&amp;nbsp;intentar&amp;eacute; confirmar o desmentir alguna de las leyendas urbanas respecto de .NET,&amp;nbsp;lo cual&amp;nbsp;tendremos merodeando por aqu&amp;iacute; al&amp;nbsp;&amp;quot;&lt;b&gt;Cazador de Mitos .NET&lt;/b&gt;&amp;quot;.&lt;/p&gt;
&lt;p&gt;En esta primera entrega quisiera demostrar cu&amp;aacute;l es el costo al momento de seleccionar la forma de leer datos con ADO.NET.Habremos escuchado infinidad de veces decir: Un &amp;quot;&lt;i&gt;DataReader es m&amp;aacute;s r&amp;aacute;pido que un DataSet&lt;/i&gt;&amp;quot;, o que &amp;quot;&lt;i&gt;el DataTable es m&amp;aacute;s liviano que el DataSet&lt;/i&gt;&amp;quot;. &lt;/p&gt;
&lt;p&gt;Pues vamos entonces a la caza del mito: &lt;b&gt;&amp;quot;El DataReader es el m&amp;eacute;todo m&amp;aacute;s eficiente de lectura de datos&amp;quot;.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;La intenci&amp;oacute;n de este art&amp;iacute;culo es cuantificar el uso de una u otra forma de acceder a los datos.&amp;nbsp; &amp;iquest;Ahora bien, porque nos interesar&amp;iacute;a conocer esto? &amp;iquest;Qu&amp;eacute; tienen que ver estos resultados con mi aplicaci&amp;oacute;n? &amp;iquest;Cu&amp;aacute;ndo debo prestarle atenci&amp;oacute;n al desempe&amp;ntilde;o de mi aplicaci&amp;oacute;n?&amp;nbsp; &amp;iquest;Porque es tan importante hacerlo? Te recomiendo la lectura del &lt;a target="_blank" href="http://blogs.solidq.com/ES/dseara/default.aspx"&gt;Blog de Daniel Seara&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Presentaci&amp;oacute;n del Escenario&lt;/h2&gt;
&lt;p&gt;Este es el contexto en el que estoy haciendo las mediciones:&lt;/p&gt;
&lt;p&gt;Una aplicaci&amp;oacute;n ASP.NET 2.0, que utiliza 3 mecanismos para recuperar datos &amp;quot;de solo lectura&amp;quot; de la base de datos AdvertureWorks alojada en SQL Server 2005:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DataReader&lt;/li&gt;
&lt;li&gt;DataSet&lt;/li&gt;
&lt;li&gt;DataTable&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aqu&amp;iacute; subrayo &amp;quot;&lt;span style="text-decoration:underline;"&gt;solo lectura&lt;/span&gt;&amp;quot; porque, justamente solo quiero mostrar los datos.&lt;/p&gt;
&lt;h2&gt;El C&amp;oacute;digo&lt;/h2&gt;
&lt;p&gt;La versi&amp;oacute;n completa del c&amp;oacute;digo podr&amp;aacute;s &lt;a target="_blank" href="http://msmvps.com/blogs/cwalzer/Posts/AntiPrac/CarlosWalzer_AntiPracI.zip"&gt;bajarla de aqu&amp;iacute;&lt;/a&gt;.&amp;nbsp; De todas formas d&amp;eacute;mosle un vistazo:&lt;/p&gt;
&lt;p&gt;Hay una clase DataAccess que ejecuta la misma consulta y que devuelve el resultado en 3 formatos distintos: DataSet, DataReader o DataTable.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;class&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataAccess&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;readonly&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; _connString;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;static&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;readonly&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; _sqlCmd;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;static&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; DataAccess()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _connString = &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;Password=permiso;User ID=sa;Initial Catalog=AdventureWorks;Data Source=WALZER3&amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _sqlCmd = &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;SELECT HumanResources.Employee.EmployeeID, Person.Contact.FirstName, &amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;Person.Contact.MiddleName, Person.Contact.LastName, &amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;HumanResources.Employee.Title, HumanResources.Employee.BirthDate, &amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;Person.Address.AddressLine1, Person.Address.AddressLine2, &amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;Person.Address.City, Person.Address.PostalCode, Person.Contact.EmailAddress, &amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;Person.Contact.Phone, HumanResources.Employee.MaritalStatus, HumanResources.Employee.Gender &amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;FROM HumanResources.Employee INNER JOIN &amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;Person.Contact ON HumanResources.Employee.ContactID = Person.Contact.ContactID INNER JOIN &amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;HumanResources.EmployeeAddress ON &amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;HumanResources.Employee.EmployeeID = HumanResources.EmployeeAddress.EmployeeID INNER JOIN &amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;Person.Address ON HumanResources.EmployeeAddress.AddressID = Person.Address.AddressID AND &amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;HumanResources.EmployeeAddress.AddressID = Person.Address.AddressID&amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;static&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataSet&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; TraerDataSet()&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataSet&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; ds = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;using&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; (&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlConnection&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; conn = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlConnection&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;(_connString))&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; {&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; conn.Open();&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlCommand&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; cmd = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlCommand&lt;/span&gt;&lt;span style="font-size:x-small;"&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; cmd.CommandText = _sqlCmd;&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; cmd.Connection = conn;&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; cmd.CommandType = &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;CommandType&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Text;&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlDataAdapter&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; da = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlDataAdapter&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;(cmd);&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; ds = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataSet&lt;/span&gt;&lt;span style="font-size:x-small;"&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; da.Fill(ds);&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; }&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;catch&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;{&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; ds;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size:x-small;color:#0000ff;"&gt;static&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;IDataReader&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; TraerDataReader()&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlDataReader&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; dr = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlConnection&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; conn = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;try&lt;br /&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&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; conn = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlConnection&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;(_connString);&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&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; conn.Open();&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlCommand&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; cmd = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlCommand&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;();&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&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; cmd.CommandText = _sqlCmd;&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; cmd.Connection = conn;&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; cmd.CommandType = &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;CommandType&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Text;&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; &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;dr = cmd.ExecuteReader(&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;CommandBehavior&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.CloseConnection);&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;br /&gt;&amp;nbsp;&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;catch&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:x-small;"&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; (conn != &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;)&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&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; conn.Close();&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;throw&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; dr;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataTable&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; TraerDataTable()&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataTable&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; dt = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;try&lt;br /&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;using&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; (&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlConnection&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; conn = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlConnection&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;(_connString))&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&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; {&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; conn.Open();&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlCommand&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; cmd = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlCommand&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;();&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&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; cmd.CommandText = _sqlCmd;&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; cmd.Connection = conn;cmd.CommandType = &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;CommandType&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Text;&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; &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;using&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; (&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlDataReader&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; dr = cmd.ExecuteReader())&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; &lt;/span&gt;&lt;span style="font-size:x-small;"&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;nbsp;&amp;nbsp; dt = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataTable&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;();&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&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;nbsp;&amp;nbsp; dt.Load(dr);&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; }&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; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&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; }&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; dt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Luego hay 3 p&amp;aacute;ginas aspx que muestran los datos obtenidos enlazando los datos con un DataRepeater:&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;asp&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;Repeater&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;=&amp;quot;dataReapeater&amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;HeaderTemplate&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;table&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#ff0000;"&gt;border&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;=&amp;quot;1&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; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;tr&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#ff0000;"&gt;bgcolor&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;=&amp;quot;crimson&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; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;EmployeeID&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;First Name&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;Middle Name&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;Last Name&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;Title&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;Birthdate&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;Adress Line 1&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;Adress Line 2&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;City&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;Zip&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;Email&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;Phone&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;MaritalStatus&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;Gender&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;th&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;tr&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;HeaderTemplate&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;ItemTemplate&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;tr&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;#&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataBinder&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Eval(Container.DataItem, &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;EmployeeId&amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;) %&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;#&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataBinder&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Eval(Container.DataItem, &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;FirstName&amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;) %&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;#&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataBinder&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Eval(Container.DataItem, &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;MiddleName&amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;) %&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;#&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataBinder&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Eval(Container.DataItem, &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;LastName&amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;) %&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;#&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataBinder&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Eval(Container.DataItem, &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;) %&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;#&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataBinder&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Eval(Container.DataItem, &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;Birthdate&amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;) %&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;#&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataBinder&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Eval(Container.DataItem, &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;AddressLine1&amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;) %&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;#&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataBinder&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Eval(Container.DataItem, &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;AddressLine2&amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;)%&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;#&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataBinder&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Eval(Container.DataItem, &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;City&amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;) %&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;#&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataBinder&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Eval(Container.DataItem, &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;PostalCode&amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;) %&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;#&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataBinder&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Eval(Container.DataItem, &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;EmailAddress&amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;) %&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;#&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataBinder&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Eval(Container.DataItem, &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;Phone&amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;) %&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;#&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataBinder&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Eval(Container.DataItem, &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;MaritalStatus&amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;) %&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;#&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataBinder&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Eval(Container.DataItem, &lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;&amp;quot;Gender&amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;) %&amp;gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;td&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;tr&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;ItemTemplate&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&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; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;FooterTemplate&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;table&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;FooterTemplate&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;asp&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="font-size:x-small;color:#a31515;"&gt;Repeater&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt; &lt;span style="font-size:x-small;color:#0000ff;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
Y este es el c&amp;oacute;digo correspondiente al PageLoad de cada p&amp;aacute;gina aspx:&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TraerDataSet.aspx&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;span style="font-size:x-small;color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;partial&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;class&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;TraerDataSet&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; : System.Web.UI.&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;Page&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; Page_Load(&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;object&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; sender, &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;EventArgs&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; e)&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; MostrarDataSet();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; MostrarDataSet()&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; dataReapeater.DataSource = &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataAccess&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.TraerDataSet().Tables[0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataReapeater.DataBind();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-size:x-small;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TraerDataReader.aspx&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;span style="font-size:x-small;color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;partial&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;class&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;TraerDataReader&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; : System.Web.UI.&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;Page&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; Page_Load(&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;object&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; sender, &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;EventArgs&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; e)&lt;br /&gt;&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; MostrarDataReader();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; MostrarDataReader()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; (&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;IDataReader&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; dr = &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataAccess&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.TraerDataReader())&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; dataReapeater.DataSource = dr;&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; dataReapeater.DataBind();&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; }&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;TraerDataTable.aspx&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;br /&gt;public&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;partial&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;class&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; TraerDataTable : System.Web.UI.Page&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; Page_Load(&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;object&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; sender, &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;EventArgs&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; e)&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; MostrarDataTable();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; MostrarDataTable()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataReapeater.DataSource = DataAccess.TraerDataTable();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataReapeater.DataBind();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Como ver&amp;aacute;s la prueba es sencilla y el c&amp;oacute;digo est&amp;aacute; centrado en la recuperaci&amp;oacute;n de los datos, y no en la forma en que esos datos se muestran.&amp;nbsp; Claro que es una parte muy importante tambi&amp;eacute;n, para conocer c&amp;oacute;mo hacerlo en ASP.NET te recomiendo el &lt;a target="_blank" href="http://blogs.solidq.com/ES/eserrano/default.aspx"&gt;Blog de Eugenio Serrano&lt;/a&gt;.&lt;/p&gt;
&lt;/p&gt;
&lt;h2&gt;Primeras Lecturas&lt;/h2&gt;
&lt;p&gt;Lo que primero vamos a medir es el tiempo que se toma cada una estas operaciones para mostrar los datos.&amp;nbsp; Para ello utilic&amp;eacute; la herramienta &lt;a target="_blank" href="http://www.jetbrains.com/profiler/"&gt;JetBrains DotTrace 3.0&lt;/a&gt;. Esta herramienta te permite mediante la t&amp;eacute;cnica de &amp;quot;code profiling&amp;quot; conocer el tiempo y cantidad de veces de cada una de las llamadas a los m&amp;eacute;todos de tu aplicaci&amp;oacute;n, incluido el c&amp;oacute;digo de .NET.&lt;/p&gt;
&lt;p&gt;Observemos entonces el tiempo consumido durante 5 llamadas de cada una de los m&amp;eacute;todos que acceden y muestran los datos. A prop&amp;oacute;sito, la consulta devuelve 232 registros.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/photos/cwalzer/images/1221466/original.aspx"&gt;&lt;img border="0" src="http://msmvps.com/photos/cwalzer/images/1221466/original.aspx" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mirando los recuadros rojos podremos observar que recuperar los datos con DataReader es lo m&amp;aacute;s r&amp;aacute;pido: 24% m&amp;aacute;s r&amp;aacute;pido que hacerlo con DataSet y 33% m&amp;aacute;s r&amp;aacute;pido que con DataTable.&lt;/p&gt;
&lt;p&gt;Sin embargo si miramos los n&amp;uacute;meros de la clase DataAccess (recuadro verde), no guardan relaci&amp;oacute;n con la vista anterior.&amp;nbsp; El m&amp;eacute;todo TraerDataReader consume un tiempo irrisorio frente a los otros.&amp;nbsp; Como bien me apunt&amp;oacute; &lt;a target="_blank" href="http://blogs.solidq.com/ES/jloria/default.aspx"&gt;Javier Lor&amp;iacute;a&lt;/a&gt;, hasta ese momento (en el cual el DataReader es devuelto por el m&amp;eacute;todo), solo hemos abierto la conexi&amp;oacute;n con las base de datos y enviado el comando sql, y hasta tanto no hayamos mostrado los datos, el cursor no se ha movido del BOF. Distinto es el caso del TraerDataSet o el TraerDataTable, en el cual, para poder pasarse entre capas levantan los datos de la base de datos y se desconectan.&lt;/p&gt;
&lt;p&gt;Con lo cual podemos sacar 2 conclusiones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El DataReader no es un objeto para pasar entre capas.&lt;/li&gt;
&lt;li&gt;Si solo queremos mostrar los datos con el DataSet o el DataTable, los habremos recorridos 2 veces, una vez para cargarlos en memoria y la segunda para mostrarlos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Claro que no siempre podemos decidir solo en funci&amp;oacute;n del mejor desempe&amp;ntilde;o.&amp;nbsp; &amp;iquest;Cu&amp;aacute;l es la forma apropiada de utilizar ADO.NET en una capa de acceso a datos?, lo puedes leer en el &lt;a target="_blank" href="http://awiernik.blogspot.com/"&gt;Blog de Adolfo Wiernik&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;&amp;iexcl;Mito cazado! El DataReader es el m&amp;eacute;todo m&amp;aacute;s eficiente de lectura de datos.&lt;/h2&gt;
&lt;p&gt;Pero lo del DataTable no tiene una explicaci&amp;oacute;n muy l&amp;oacute;gica. Recuperar el DataTable, en este caso, es 2 veces m&amp;aacute;s lento que el DataSet. Pong&amp;aacute;monos a investigarlo.&lt;br /&gt;Miremos ahora el enlace a los datos:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/photos/cwalzer/images/1221467/original.aspx"&gt;&lt;img border="0" src="http://msmvps.com/photos/cwalzer/images/1221467/original.aspx" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Esta vista muestra el tiempo consumido por el m&amp;eacute;todo System.Web.UI.WebControls.Repeater.DataBind() y quien lo ha invocado. Si observamos veremos que los tiempos son similares, las diferencias son despreciables. Aqu&amp;iacute; no est&amp;aacute; la diferencia...&lt;/p&gt;
&lt;h2&gt;Estudio interno de las formas de acceso a los datos&lt;/h2&gt;
&lt;p&gt;Veamos ahora como se consume el tiempo en cada uno de nuestros m&amp;eacute;todos de acceso a datos:&lt;/p&gt;
&lt;h3&gt;MostrarDataReader()&lt;/h3&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/photos/cwalzer/images/1221468/original.aspx"&gt;&lt;img border="0" src="http://msmvps.com/photos/cwalzer/images/1221468/original.aspx" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;En esta vista podemos observar el tiempo de las invocaciones realizadas dentro el m&amp;eacute;todo y el tiempo consumido por cada una de ellas.&lt;br /&gt;El 97% del tiempo lo ha consumido System.Web.UI.WebControls.Repeater.DataBind(), o sea recorrer los datos con el cursor de solo lectura y avance y mostrarlos. El resto se va en System.Data.SqlClient.SqlCommand.ExecuteReader(), que comprende la apertura de la conexi&amp;oacute;n y el env&amp;iacute;o del comando a la base de datos.&lt;/p&gt;
&lt;h3&gt;MostrarDataSet()&lt;/h3&gt;
&lt;p&gt;Observemos ahora el m&amp;eacute;todo que devuelve el DataSet, que nos servir&amp;aacute; para entender c&amp;oacute;mo trabaja ADO.NET por dentro.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/photos/cwalzer/images/1221469/original.aspx"&gt;&lt;img border="0" src="http://msmvps.com/photos/cwalzer/images/1221469/original.aspx" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;En el recuadro verde est&amp;aacute; resaltado System.Data.Common.DataAdapter.Fill(), m&amp;eacute;todo privado de la clase DataAdapter que realiza b&amp;aacute;sicamente 2 tareas: leer los datos y cargarlos en la colecci&amp;oacute;n de DataTables del DataSet. &lt;br /&gt;&amp;iquest;Como los lee?, mediante System.Data.Common.DbCommand.ExecuteReader() (recuadro rojo). S&amp;iacute;, internamente utiliza un cursor de solo lectura y avance (DataReader) para recuperar los datos. Y de paso vale la pena destacar que esa llamada consumi&amp;oacute; lo mismo (87 ms) que la llamada realizada en TraerDataReader() (87 ms). Entonces, &amp;iquest;donde est&amp;aacute; la diferencia en tiempo?, en el m&amp;eacute;todo System.Data.Common.DataAdapter.FillFromReader() que consumi&amp;oacute; 1164 ms. Este m&amp;eacute;todo es el que se encarga de cargar los datos en memoria (DataSet).&lt;/p&gt;
&lt;p&gt;El recuadro azul viene a colaci&amp;oacute;n del estudio que hagamos de TraerDataTable(), que si recuerdas tardaba el doble que TraerDataSet().&lt;/p&gt;
&lt;h3&gt;MostrarDataTable()&lt;/h3&gt;
&lt;p&gt;Trataremos de develar la inc&amp;oacute;gnita de porque, si aparentemente no deber&amp;iacute;a haber diferencia en cargar un DataTable y un DataSet, el primero es 2 veces m&amp;aacute;s lento que el segundo, cuando de hecho un DataSet contiene una colecci&amp;oacute;n de DataTable.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/photos/cwalzer/images/1221470/original.aspx"&gt;&lt;img border="0" src="http://msmvps.com/photos/cwalzer/images/1221470/original.aspx" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Antes que nada veamos que System.Data.Common.DbCommand.ExecuteReader() (recuadro rojo) es el mecanismo interno nuevamente utilizado para recuperar los datos, cuya llamada consumi&amp;oacute; 82 ms al igual que antes. Tambi&amp;eacute;n encontramos el mismo m&amp;eacute;todo System.Data.Common.DataAdapter.FillFromReader() (recuadro azul), pero que esta vez consumi&amp;oacute; 2986 ms, casi el triple del tiempo que en el caso del DataSet. Si revisamos las invocaciones realizadas por FillFromReader() vemos que System.Data.Common.DataAdapter.FillLoadDataRow() est&amp;aacute; presente con el mismo tiempo consumido (1157 ms) en la carga del DataSet y el DataTable. La gran diferencia est&amp;aacute; en las llamadas internas que realiza System.Data.DataTable.EndLoadData() (1607 ms), que como su nombre lo sugiere, realiza unas operaciones luego de que los datos ya est&amp;aacute;n memoria.&amp;nbsp; Veamos de que operaciones estamos hablando (para ello utilic&amp;eacute; la herramienta &lt;a target="_blank" href="http://www.aisto.com/roeder/dotnet/"&gt;Reflector&lt;/a&gt; que permite desensamblar el c&amp;oacute;digo .NET):&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#1000a0;"&gt;public&lt;/span&gt; &lt;span style="color:#006018;"&gt;void&lt;/span&gt; &lt;b&gt;&lt;span style="color:#000000;"&gt;EndLoadData&lt;/span&gt;&lt;/b&gt;()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:#006018;"&gt;IntPtr&lt;/span&gt; &lt;b&gt;ptr&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:#006018;"&gt;Bid&lt;/span&gt;.&lt;span style="color:#006018;"&gt;ScopeEnter&lt;/span&gt;(&lt;span style="color:#1000a0;"&gt;out&lt;/span&gt; &lt;span style="color:#006018;"&gt;ptr&lt;/span&gt;, &lt;span style="color:#800000;"&gt;&amp;quot;&amp;lt;ds.DataTable.EndLoadData|API&amp;gt; %d#\n&amp;quot;&lt;/span&gt;, &lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;ObjectID&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:#1000a0;"&gt;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:#1000a0;"&gt;if&lt;/span&gt; (&lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;inDataLoad&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&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; &amp;nbsp;&lt;span style="color:#1000a0;"&gt;if&lt;/span&gt; (&lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;loadIndex&lt;/span&gt; != &lt;span style="color:#800000;"&gt;null&lt;/span&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;{&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;&lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;loadIndex&lt;/span&gt;.&lt;span style="color:#006018;"&gt;RemoveRef&lt;/span&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;}&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;&lt;span style="color:#1000a0;"&gt;if&lt;/span&gt; (&lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;loadIndexwithOriginalAdded&lt;/span&gt; != &lt;span style="color:#800000;"&gt;null&lt;/span&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;{&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;&lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;loadIndexwithOriginalAdded&lt;/span&gt;.&lt;span style="color:#006018;"&gt;RemoveRef&lt;/span&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;}&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;&lt;span style="color:#1000a0;"&gt;if&lt;/span&gt; (&lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;loadIndexwithCurrentDeleted&lt;/span&gt; != &lt;span style="color:#800000;"&gt;null&lt;/span&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;{&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;&lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;loadIndexwithCurrentDeleted&lt;/span&gt;.&lt;span style="color:#006018;"&gt;RemoveRef&lt;/span&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;}&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;&lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;loadIndex&lt;/span&gt; = &lt;span style="color:#800000;"&gt;null&lt;/span&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;&lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;loadIndexwithOriginalAdded&lt;/span&gt; = &lt;span style="color:#800000;"&gt;null&lt;/span&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;&lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;loadIndexwithCurrentDeleted&lt;/span&gt; = &lt;span style="color:#800000;"&gt;null;&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;&lt;/span&gt;&lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;inDataLoad&lt;/span&gt; = &lt;span style="color:#800000;"&gt;false&lt;/span&gt;; &lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;RestoreIndexEvents&lt;/span&gt;(&lt;span style="color:#800000;"&gt;false&lt;/span&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; &lt;span style="color:#1000a0;"&gt;if&lt;/span&gt; (&lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;DataSet&lt;/span&gt; != &lt;span style="color:#800000;"&gt;null&lt;/span&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; {&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; &lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;DataSet&lt;/span&gt;.&lt;span style="color:#006018;"&gt;EnforceConstraints&lt;/span&gt; = &lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;savedEnforceConstraints&lt;/span&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; }&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; &lt;span style="color:#1000a0;"&gt;else&lt;/span&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; {&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; &lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;EnforceConstraints&lt;/span&gt; = &lt;span style="color:#800000;"&gt;true&lt;/span&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; }&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; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#1000a0;"&gt;finally&lt;/span&gt; { &lt;span style="color:#006018;"&gt;Bid&lt;/span&gt;.&lt;span style="color:#006018;"&gt;ScopeLeave&lt;/span&gt;(&lt;span style="color:#1000a0;"&gt;ref&lt;/span&gt; &lt;span style="color:#006018;"&gt;ptr&lt;/span&gt;); }&lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;Analizando esta secci&amp;oacute;n del c&amp;oacute;digo:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#1000a0;"&gt;if&lt;/span&gt; (&lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;DataSet&lt;/span&gt; != &lt;span style="color:#800000;"&gt;null&lt;/span&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; {&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; &lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;DataSet&lt;/span&gt;.&lt;span style="color:#006018;"&gt;EnforceConstraints&lt;/span&gt; = &lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;savedEnforceConstraints&lt;/span&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; }&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; &lt;span style="color:#1000a0;"&gt;else&lt;/span&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; {&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; &lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;EnforceConstraints&lt;/span&gt; = &lt;span style="color:#800000;"&gt;true&lt;/span&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; }&lt;/p&gt;
&lt;p&gt;vemos que si el objeto DataTable forma parte de un DataSet (this.DataSet) se verifican las restricciones (constraints) si es que la variable privada this.savedEnforceConstraints as&amp;iacute; lo indica, y sin embargo si el DataTable es un objeto aislado (&lt;i&gt;standalone&lt;/i&gt;)&amp;nbsp; que no depende de un DataSet las restricciones se verifican siempre.&amp;nbsp; Es as&amp;iacute; que cuando se asigna true a this.DataSet.EnforceConstraints, se realiza el proceso de verificaci&amp;oacute;n de las restricciones.&amp;nbsp; Volviendo al gr&amp;aacute;fico podr&amp;aacute;s ver las llamadas a System.Data.DataTable.set_EnforceConstrains y las invocaciones internas a System.Data.DataColumn.IsNotAllowDbNullViolated() y System.Data.DataColumn.IsMaxLengthViolated() que ambas consumen el 52% del tiempo total.&lt;/p&gt;
&lt;p&gt;La p&amp;aacute;gina VerPropiedadesColumnas.aspx del ejemplo nos da un indicio. Esta nos muestra las propiedades de los DataColumns del DataSet y del DataTable.&lt;br /&gt;All&amp;iacute; observamos que la propiedad AllowDbNull est&amp;aacute; marcada seg&amp;uacute;n las propiedades de la tabla en la base de datos solo para el DataTable.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;a target="_blank" href="http://msmvps.com/photos/cwalzer/images/1221471/original.aspx"&gt;&lt;img border="0" src="http://msmvps.com/photos/cwalzer/images/1221471/original.aspx" alt="" /&gt;&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;De ah&amp;iacute; se explica entonces las llamadas a System.Data.DataColumn.IsNotAllowDbNullViolated() por ejemplo:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#1000a0;"&gt;internal&lt;/span&gt; &lt;span style="color:#006018;"&gt;void&lt;/span&gt; &lt;b&gt;&lt;span style="color:#000000;"&gt;EnableConstraints&lt;/span&gt;&lt;/b&gt;()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#006018;"&gt;IntPtr&lt;/span&gt; &lt;b&gt;ptr&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#006018;"&gt;Bid&lt;/span&gt;.&lt;span style="color:#006018;"&gt;ScopeEnter&lt;/span&gt;(&lt;span style="color:#1000a0;"&gt;out&lt;/span&gt; &lt;span style="color:#006018;"&gt;ptr&lt;/span&gt;, &lt;span style="color:#800000;"&gt;&amp;quot;&amp;lt;ds.DataSet.EnableConstraints|INFO&amp;gt; %d#\n&amp;quot;&lt;/span&gt;, &lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;ObjectID&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#1000a0;"&gt;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#006018;"&gt;bool&lt;/span&gt; &lt;b&gt;flag&lt;/b&gt; = &lt;span style="color:#800000;"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#006018;"&gt;ConstraintEnumerator&lt;/span&gt; &lt;b&gt;enumerator3&lt;/b&gt; = &lt;span style="color:#1000a0;"&gt;new&lt;/span&gt; &lt;span style="color:#006018;"&gt;ConstraintEnumerator&lt;/span&gt;(&lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#1000a0;"&gt;while&lt;/span&gt; (&lt;span style="color:#006018;"&gt;enumerator3&lt;/span&gt;.&lt;span style="color:#006018;"&gt;GetNext&lt;/span&gt;())&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; &lt;span style="color:#006018;"&gt;Constraint&lt;/span&gt; &lt;b&gt;constraint&lt;/b&gt; = &lt;span style="color:#006018;"&gt;enumerator3&lt;/span&gt;.&lt;span style="color:#006018;"&gt;GetConstraint&lt;/span&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;&lt;span style="color:#006018;"&gt;flag&lt;/span&gt; |= &lt;span style="color:#006018;"&gt;constraint&lt;/span&gt;.&lt;span style="color:#006018;"&gt;IsConstraintViolated&lt;/span&gt;();&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;&lt;span style="color:#1000a0;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#006018;"&gt;DataTable&lt;/span&gt; &lt;b&gt;table&lt;/b&gt; &lt;span style="color:#1000a0;"&gt;in&lt;/span&gt; &lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;Tables&lt;/span&gt;)&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;&lt;span style="color:#1000a0;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#006018;"&gt;DataColumn&lt;/span&gt; &lt;b&gt;column&lt;/b&gt; &lt;span style="color:#1000a0;"&gt;in&lt;/span&gt; &lt;span style="color:#006018;"&gt;table&lt;/span&gt;.&lt;span style="color:#006018;"&gt;Columns&lt;/span&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;{&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;&lt;span style="color:#1000a0;"&gt;if&lt;/span&gt; (!&lt;span style="color:#006018;"&gt;column&lt;/span&gt;.&lt;span style="color:#006018;"&gt;AllowDBNull&lt;/span&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;{&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;&lt;span style="color:#006018;"&gt;flag&lt;/span&gt; |= &lt;span style="color:#006018;"&gt;column&lt;/span&gt;.&lt;span style="color:#006018;"&gt;IsNotAllowDBNullViolated&lt;/span&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;}&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; &lt;span style="color:#1000a0;"&gt;if&lt;/span&gt; (&lt;span style="color:#006018;"&gt;column&lt;/span&gt;.&lt;span style="color:#006018;"&gt;MaxLength&lt;/span&gt; &amp;gt;= &lt;span style="color:#800000;"&gt;0&lt;/span&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;{&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; &lt;span style="color:#006018;"&gt;flag&lt;/span&gt; |= &lt;span style="color:#006018;"&gt;column&lt;/span&gt;.&lt;span style="color:#006018;"&gt;IsMaxLengthViolated&lt;/span&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;}&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; }&lt;br /&gt;&amp;nbsp;&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; &lt;span style="color:#1000a0;"&gt;if&lt;/span&gt; (&lt;span style="color:#006018;"&gt;flag&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&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;&amp;nbsp; &lt;span style="color:#1000a0;"&gt;this&lt;/span&gt;.&lt;span style="color:#006018;"&gt;FailedEnableConstraints&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&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;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:#1000a0;"&gt;finally&lt;/span&gt; { &lt;span style="color:#006018;"&gt;Bid&lt;/span&gt;.&lt;span style="color:#006018;"&gt;ScopeLeave&lt;/span&gt;(&lt;span style="color:#1000a0;"&gt;ref&lt;/span&gt; &lt;span style="color:#006018;"&gt;ptr&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;Ahora que conocemos que es lo que realmente sucede tratemos de encontrar una explicaci&amp;oacute;n l&amp;oacute;gica de porque se verifican las restricciones en el caso del&lt;br /&gt;DataTable aislado y no as&amp;iacute; en el DataSet. La respuesta est&amp;aacute; documentada: &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://support.microsoft.com/kb/310373/es"&gt;&lt;strong&gt;El m&amp;eacute;todo DataAdapter.Fill no establece todas las propiedades de los objetos DataTable y DataColumn&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;S&amp;iacute;ntomas&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Despu&amp;eacute;s de que utiliza el m&amp;eacute;todo DataAdapter.Fill, no se establecen varias propiedades del DataTable y objetos DataColumn (como clave principal, campos autom&amp;aacute;ticos de incremento, campos anulables, &amp;iacute;ndice &amp;uacute;nico y etc.)&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Causa&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;El objeto DataAdapter est&amp;aacute; optimizado para s&amp;oacute;lo lectura de manera predeterminada. El m&amp;eacute;todo Fill s&amp;oacute;lo recupera la cantidad de esquema que es necesario mostrar los datos. Debe seguir pasos adicionales que obtienen el esquema adicional que es necesario actualizar o validar un objeto.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Soluci&amp;oacute;n&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Para obtener informaci&amp;oacute;n adicional acerca del objeto DataSet, utilice uno de los m&amp;eacute;todos siguientes:&lt;/i&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Llame al m&amp;eacute;todo DataAdapter.FillSchema para obtener informaci&amp;oacute;n de esquema ampliado. &lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Establezca el valor de DataAdapter.MissingSchemaAction a MissingSchemaAction.AddWithKey antes de llamar al m&amp;eacute;todo Fill&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Optimizaci&amp;oacute;n de lectura de datos con DataTable&lt;/h2&gt;
&lt;p&gt;Pues hagamos caso de lo que el art&amp;iacute;culo dice: el que est&amp;aacute; optimizado para lectura de datos es el m&amp;eacute;todo DataAdapter.Fill(). Veamos que sucede si cargamos el DataTable con este mecanismo.&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;
&lt;p&gt;static&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataTable&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; TraerDataTableOptimizado()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#008000;"&gt;//Este m&amp;eacute;todo est&amp;aacute; optimizado para cargar un DataTable con datos de SOLO LECTURA&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataTable&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; dt = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;using&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; (&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlConnection&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; conn = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlConnection&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;(_connString))&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;conn.Open();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlCommand&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; cmd = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlCommand&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.CommandText = _sqlCmd;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.Connection = conn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.CommandType = &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;CommandType&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Text;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlDataAdapter&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; da = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;SqlDataAdapter&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;(cmd);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dt = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#2b91af;"&gt;DataTable&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; da.Fill(dt);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;catch&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; dt;&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;"&gt;&lt;a target="_blank" href="http://msmvps.com/photos/cwalzer/images/1221472/original.aspx"&gt;&lt;img border="0" src="http://msmvps.com/photos/cwalzer/images/1221472/original.aspx" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;iexcl;Ahora s&amp;iacute;! el tiempo consumido por la recuperaci&amp;oacute;n del DataTable se asemeja al del DataSet.&lt;/p&gt;
&lt;p&gt;Ahora que ya sabes interpretar los informes del profiler de c&amp;oacute;digo, revisa las llamadas internas de TraerDataTableOptimizado().&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/photos/cwalzer/images/1221473/original.aspx"&gt;&lt;img border="0" src="http://msmvps.com/photos/cwalzer/images/1221473/original.aspx" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Podr&amp;aacute;s apreciar que las llamadas a EndLoadData bajaron del 1607 ms a 0.4. Y este n&amp;uacute;mero podr&amp;iacute;a haber sido m&amp;aacute;s grande si la cantidad de datos registros y columnas fuese mayor.&lt;/p&gt;
&lt;h2&gt;Conclusi&amp;oacute;n&lt;/h2&gt;
&lt;p&gt;Hemos comprobado que el uso correcto de las t&amp;eacute;cnicas de acceso a datos en ADO.NET nos permite lograr un mayor rendimiento en nuestras aplicaciones. &amp;nbsp;Tambi&amp;eacute;n hemos aprendido algo de c&amp;oacute;mo funciona internamente ADO.NET, ejercicio que nos va a servir para tomar buenas decisiones al momento de elegir nuestra estrategia de acceso a datos.&lt;/p&gt;
&lt;h2&gt;Continuaci&amp;oacute;n&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/cwalzer/archive/2007/10/30/antipracticasnetlecturaadonet2.aspx"&gt;Parte II&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msmvps.com/blogs/cwalzer/archive/2007/11/12/antipracticaslecturadatosnet3.aspx"&gt;Parte III&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;script src="http://feeds.feedburner.com/~s/cWalzer?i=http://msmvps.com/blogs/cwalzer/archive/2007/09/24/anti-pr-225-cticas-i-acceso-a-datos-con-ado-net.aspx" type="text/javascript"&gt;&lt;/script&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1214042" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/Performance/default.aspx">Performance</category><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/ADO.NET/default.aspx">ADO.NET</category><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/Anti+Practicas/default.aspx">Anti Practicas</category><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/Cazador+de+Mitos+.NET/default.aspx">Cazador de Mitos .NET</category><category domain="http://msmvps.com/blogs/cwalzer/archive/tags/Rendimiento/default.aspx">Rendimiento</category></item></channel></rss>