<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-27440916</id><updated>2012-01-22T12:28:55.741-06:00</updated><title type='text'>Lobyte --Julio César SP--</title><subtitle type='html'>Un sitio de referencias y casos en el desarrollo de software.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>92</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-27440916.post-9181068776716711387</id><published>2011-10-28T21:45:00.005-05:00</published><updated>2011-10-28T21:57:16.588-05:00</updated><title type='text'>Modelo Entidad Relación Direcciones México</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-7L0hexe3_eU/Tqtrb3q_0YI/AAAAAAAAAJ0/TzQ1tJUOfO8/s1600/Diagrama+EntidadRelacion+DireccionesMexico.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="388" src="http://4.bp.blogspot.com/-7L0hexe3_eU/Tqtrb3q_0YI/AAAAAAAAAJ0/TzQ1tJUOfO8/s640/Diagrama+EntidadRelacion+DireccionesMexico.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ZYNbuThzWuI/TqtqpZ4-AJI/AAAAAAAAAJs/wqFQNJv5rzQ/s1600/Diagrama+EntidadRelacion+DireccionesMexico.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-mSxBrGHKVQE/TqtqAQkbcgI/AAAAAAAAAJk/qTVjKsTGYeg/s1600/Diagrama+EntidadRelacion+DireccionesMexico.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-HVT01wWDOGQ/TqtoJSKNrzI/AAAAAAAAAJc/civlr3cAqio/s1600/Diagrama+EntidadRelacion+DireccionesMexico.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-9181068776716711387?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/9181068776716711387/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=9181068776716711387' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/9181068776716711387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/9181068776716711387'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/10/modelo-entidad-relacion-direcciones.html' title='Modelo Entidad Relación Direcciones México'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-7L0hexe3_eU/Tqtrb3q_0YI/AAAAAAAAAJ0/TzQ1tJUOfO8/s72-c/Diagrama+EntidadRelacion+DireccionesMexico.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-6695696507731422872</id><published>2011-02-24T16:30:00.001-06:00</published><updated>2011-02-24T21:12:48.047-06:00</updated><title type='text'>Manejo de excepciones en SQL Server</title><content type='html'>&lt;b&gt;Dos formas&lt;/b&gt; de manejar los errores con SQL Server, sólo que con el uso de Try-Catch únicamente se puede implementar en versiones 2005 o superior y con el uso de GOTO desde la 2000.&lt;br /&gt;&lt;br /&gt;Ambas formas funcionan, pero es más practica y segura (por si se omite validar alguna instruccion que provoque excepción) la que protege todo el bloque que es propenso a excepción.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-&lt;span style="color: #660000;"&gt;--- &lt;/span&gt;&lt;b style="color: #660000;"&gt;Uso clásico con uso de marcadores y GOTO&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Declare @Msj nvarchar(200)&lt;br /&gt;--Comienza la transacción&lt;br /&gt;BEGIN TRANSACTION&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --UPDATE 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --DELETE 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --Insert 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --para simular error&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select 1/0 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --Verificar si hubo errores&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;IF @@Error != 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GOTO ERROR_HANDLER&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;--Finalizar la Transacción&lt;br /&gt;COMMIT TRANSACTION&lt;br /&gt;print 'OK fin transacción' &lt;br /&gt;SET NOCOUNT OFF&lt;br /&gt;RETURN&lt;br /&gt;&lt;br /&gt;--Manejador de Error.&lt;br /&gt;&lt;b&gt;ERROR_HANDLER:&lt;/b&gt;&lt;br /&gt;ROLLBACK TRANSACTION&lt;br /&gt;--Imprimir msj de error&lt;br /&gt;set @Msj = 'Tenemos el error # ' + CONVERT(VARCHAR(10), Error_number()) + ' ' + &lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Error_message() + ' en la linea: ' + convert(varchar(10), ERROR_LINE()) &lt;br /&gt;RAISERROR 13000 @Msj&lt;br /&gt;RETURN &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #660000;"&gt;&lt;b&gt;-----Uso con Try-Catch de SQL Server 2005 o superior&lt;/b&gt;&lt;/div&gt;Declare @Msj nvarchar(200)&lt;br /&gt;--Comienza la transacción&lt;br /&gt;BEGIN TRANSACTION&lt;br /&gt;&lt;b&gt;BEGIN Try&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --UPDATE 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --DELETE 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --Insert 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --para simular error&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select 1/0 &lt;br /&gt;COMMIT TRANSACTION&lt;br /&gt;&lt;b&gt;END Try&lt;br /&gt;&lt;br /&gt;BEGIN Catch&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ROLLBACK TRANSACTION&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --Imprimir msj de error&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; set @Msj = 'Tenemos el error # ' + CONVERT(VARCHAR(10), Error_number()) + ' ' + &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Error_message() + ' en la linea: ' + convert(varchar(10), ERROR_LINE()) &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; --PRINT @Msj&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Raiserror 13000&amp;nbsp; @Msj &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;END Catch&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-6695696507731422872?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/6695696507731422872/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=6695696507731422872' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/6695696507731422872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/6695696507731422872'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/02/manejo-de-excepciones-en-sql-server.html' title='Manejo de excepciones en SQL Server'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-3468401833212387295</id><published>2011-02-17T22:49:00.001-06:00</published><updated>2011-02-17T22:49:47.951-06:00</updated><title type='text'>Desarrollo de Software en 3 capas (los objetos Entity son transportadores entre las capas)</title><content type='html'>Los objetos Entity o también llamados: ValueObject son objetos que estan disponibles como transportadores entre las capas.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/--Qg4lo_wSdI/TV36LmJ02EI/AAAAAAAAAHQ/Sb-K-kOlTBE/s1600/entitysEnlasCapas.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="484" src="http://2.bp.blogspot.com/--Qg4lo_wSdI/TV36LmJ02EI/AAAAAAAAAHQ/Sb-K-kOlTBE/s640/entitysEnlasCapas.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-3468401833212387295?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/3468401833212387295/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=3468401833212387295' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/3468401833212387295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/3468401833212387295'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/02/desarrollo-de-software-en-3-capas-los.html' title='Desarrollo de Software en 3 capas (los objetos Entity son transportadores entre las capas)'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/--Qg4lo_wSdI/TV36LmJ02EI/AAAAAAAAAHQ/Sb-K-kOlTBE/s72-c/entitysEnlasCapas.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-1778814191144414970</id><published>2011-02-16T17:40:00.007-06:00</published><updated>2011-07-15T17:44:31.410-05:00</updated><title type='text'>Modelo Entidad Relación para Control de Acceso en las Aplicaciones (Roles por Aplicación)</title><content type='html'>Tenemos la necesidad de un modelo de base de datos que nos permita el control de acceso a los objetos de nuestra aplicacion, es así que tenemos una tabla de Aplicaciones o Sistemas que se compone de objetos, por ejemplo formas o paginas, botones etc. luego definimos los roles que tendrán acceso a nuestro sistema o aplicacion, por ejemplo Administradores, invitados (lectores) , operadores etc y éstos tendrán determinados derechos para Consultar, Insertar, Actualizar u Eliminar (CRUD), definidos los roles y sus derechos a los obejtos de nuestras aplicaciones, asociamos éstos a nuestros Usuarios, así que tenemos un sólo Usuario que podra accesar a las diferentes aplicaciones o sistemas que tengamos a través de la definición de un rol para cada aplicación.&lt;br /&gt;A continuación les muestro el modelo E/R propuesto, espero les pueda servir! &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-jOsW9bL2hHM/Th28Og6mPgI/AAAAAAAAAJA/M4zYNys6pTM/s1600/ER_AccesoUsr.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="370" src="http://1.bp.blogspot.com/-jOsW9bL2hHM/Th28Og6mPgI/AAAAAAAAAJA/M4zYNys6pTM/s640/ER_AccesoUsr.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-txm0RPe4ASs/TVxgZTas59I/AAAAAAAAAHM/LsCNKljHLZM/s1600/ModeloER_DerechosAccesoObjetoApp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Asi se veria un query con la información del rol que tiene un usuario vs. una aplicación, con el que podrimos hacer un objeto que este presente durante toda la session que tenga el usuario ante una aplicación:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-dIC4RWkNYSg/TiDCva0onrI/AAAAAAAAAJE/9mPkXfakPYI/s1600/queryAccesoUsr.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="379" src="http://3.bp.blogspot.com/-dIC4RWkNYSg/TiDCva0onrI/AAAAAAAAAJE/9mPkXfakPYI/s640/queryAccesoUsr.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-aSMpZaH9nHw/TWFSPSi76aI/AAAAAAAAAHU/7-fl1kF30Qg/s1600/query.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-1778814191144414970?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/1778814191144414970/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=1778814191144414970' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/1778814191144414970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/1778814191144414970'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/02/modelo-entidad-relacion-para-control-de.html' title='Modelo Entidad Relación para Control de Acceso en las Aplicaciones (Roles por Aplicación)'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-jOsW9bL2hHM/Th28Og6mPgI/AAAAAAAAAJA/M4zYNys6pTM/s72-c/ER_AccesoUsr.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-9152563082678848927</id><published>2011-02-15T12:10:00.000-06:00</published><updated>2011-02-15T12:10:21.369-06:00</updated><title type='text'>Como manejar los bloqueos en SQL Server</title><content type='html'>Hace un tiempo tuve el problema de la concurrencia y como efecto de ésta tenia muchos bloqueos y quejas de los usuarios porque el aplicativo no les confirmaba sus operciones. Me puse a buscar en Internet de que hacer ya que los bloqueos no tenia forma de como evitarlos, pero necesitaba al menos hacer algo para manejarlos y miren este buen articulo que encontre:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/database/SQLServer_deadlock.aspx"&gt;http://www.codeproject.com/KB/database/SQLServer_deadlock.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-9152563082678848927?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/9152563082678848927/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=9152563082678848927' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/9152563082678848927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/9152563082678848927'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/02/como-manejar-los-bloqueos-en-sql-server.html' title='Como manejar los bloqueos en SQL Server'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-2452661206345949341</id><published>2011-01-30T12:03:00.001-06:00</published><updated>2011-01-30T12:03:47.475-06:00</updated><title type='text'>Cómo enviar correo electrónico por código usando cuentas de GMail</title><content type='html'>Requeria enviar programaticamente emails, &amp;nbsp;pero no cuento con un servidor de email (SMTP), así que busque si se podia hacer a través de mi cuenta de GMAIL y encontré este fabuloso post con un ejemplo, lo probé y funciona a la perfección.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://geeks.ms/blogs/jalarcon/archive/2007/06/23/c-243-mo-enviar-correo-electr-243-nico-por-c-243-digo-usando-cuentas-de-gmail.aspx"&gt;http://geeks.ms/blogs/jalarcon/archive/2007/06/23/c-243-mo-enviar-correo-electr-243-nico-por-c-243-digo-usando-cuentas-de-gmail.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-2452661206345949341?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/2452661206345949341/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=2452661206345949341' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/2452661206345949341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/2452661206345949341'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/01/como-enviar-correo-electronico-por.html' title='Cómo enviar correo electrónico por código usando cuentas de GMail'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-8028605832876428876</id><published>2011-01-29T15:32:00.002-06:00</published><updated>2011-01-29T15:34:47.315-06:00</updated><title type='text'>Auditoria de instrucciones DDL</title><content type='html'>&lt;span style="color: black;"&gt;Con DDL Triggers apartir de SQL Server 2005 podemos auditar todos las operaciones de DDL a la BD&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;USE pruebas&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;span style="background-color: white;"&gt;&lt;span style="color: #6aa84f;"&gt;--La tabla de auditoria&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;span style="background-color: white;"&gt;&lt;strong&gt;Create Table&lt;/strong&gt; DDL_Auditoria(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;Id int Not Null identity,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;FechaEvento datetime not null,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;TipoEvento SYSNAME not null,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;UsuarioEvento SYSNAME not null,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;NombreObjeto SYSNAME not null,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;NombreObjetoObjetivo SYSNAME not null&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #6aa84f;"&gt;--disparador &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;span style="background-color: white;"&gt;&lt;strong&gt;Create TRIGGER&lt;/strong&gt; DDL_AuditoriaDML ON DATABASE FOR DDL_DATABASE_LEVEL_EVENTS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;As&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;span style="background-color: white;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;Declare @EV as XML&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;SET @EV = EVENTDATA()&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;INSERT INTO DDL_Auditoria &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;VALUES(&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;CAST(@EV.query('data(//PostTime)') as varchar(23)),&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;CAST(@EV.query('data(//EventType)') as Sysname),&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;CAST(@EV.query('data(//LoginName)') as Sysname),&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;CAST(@EV.query('data(//ObjectName)') as Sysname),&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;CAST(@EV.query('data(//TargetObjectName)') as Sysname)&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;go&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #6aa84f;"&gt;--Probamos el disparador con 2 operaciones DDL y consultamos las&amp;nbsp;entradas de auditoria en nuestra tabla&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;&lt;strong&gt;Create Table&lt;/strong&gt; TablaNueva (Cve int)&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;go&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;&lt;strong&gt;Alter Table&lt;/strong&gt; TablaNueva ADD Col2 int&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;go&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;Select * FROM DDL_Auditoria&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;go&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-8028605832876428876?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/8028605832876428876/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=8028605832876428876' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/8028605832876428876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/8028605832876428876'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/01/auditoria-de-instrucciones-ddl.html' title='Auditoria de instrucciones DDL'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-5002804234143775015</id><published>2011-01-29T14:46:00.002-06:00</published><updated>2011-01-29T14:50:35.059-06:00</updated><title type='text'>DDL Triggers apartir de SQL Server 2005</title><content type='html'>En versiones anteriores sólo existian disparadores para operaciones DML para intrucciones INSERT, UPDATE y DELETE apartir de SQL Server 2005 es posible implementar disparadores para DDL&lt;br /&gt;&lt;br /&gt;Por ejemplo:&lt;br /&gt;&lt;span style="color: blue;"&gt;USE pruebas&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #6aa84f;"&gt;--Disparador que impediara modificar cualquier&amp;nbsp;tabla de la BD.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;Create &lt;strong&gt;Trigger&lt;/strong&gt; DDL_1 ON &lt;strong&gt;DATABASE&lt;/strong&gt; FOR &lt;strong&gt;ALTER_TABLE&lt;/strong&gt; AS&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RAISERROR('No se puede alterar tablas en esta Base de Datos', 16, 1)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;ROLLBACK&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;Go&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #6aa84f;"&gt;--Para probar que no se puede alterar la tabla, intentaremos una intrucción DDL a la tabla.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;Alter table&lt;/strong&gt; T1 ADD COLUMNA3 Varchar(10)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;go&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-5002804234143775015?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/5002804234143775015/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=5002804234143775015' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/5002804234143775015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/5002804234143775015'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/01/ddl-triggers-en-sql-server-2005.html' title='DDL Triggers apartir de SQL Server 2005'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-6683403217660346544</id><published>2011-01-28T16:01:00.001-06:00</published><updated>2011-03-25T16:29:30.844-06:00</updated><title type='text'>Funcionalidad de CDC (Change Data Capture) en SQL Server 2008</title><content type='html'>SQL Server 2008 incluye una nueva configuración que nos sirve muy bien para el control de la auditoria sobre las operaciones DML (Update, Insert y Delete)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jcgonzalezmartin.wordpress.com/2008/04/21/sql-server-2008-change-data-capture-o-cdc/"&gt;http://jcgonzalezmartin.wordpress.com/2008/04/21/sql-server-2008-change-data-capture-o-cdc/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/%20http://weblogs.sqlteam.com/derekc/archive/2008/01/28/60469.aspx"&gt;&amp;nbsp; http://weblogs.sqlteam.com/derekc/archive/2008/01/28/60469.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-6683403217660346544?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/6683403217660346544/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=6683403217660346544' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/6683403217660346544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/6683403217660346544'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/01/funcionalidad-de-cdc-change-data.html' title='Funcionalidad de CDC (Change Data Capture) en SQL Server 2008'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-7224594763515432294</id><published>2011-01-17T18:11:00.005-06:00</published><updated>2011-01-18T13:11:47.557-06:00</updated><title type='text'>Patrón de diseño: Estrategia</title><content type='html'>Utilizaremos el patrón stretegy porque se requiere implementar un mecanismo dinámico para el calculo de impuesto de acuerdo al país a donde se va a&amp;nbsp;facturar, por ejemplo Europa, EE.UU y&amp;nbsp; México y quizás otros paises más.&lt;br /&gt;&lt;br /&gt;Proposito: De comportamiento&lt;br /&gt;Alcance: Objeto&lt;br /&gt;A continuación el diagrama de clases que representa a este patrón.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_o4stxlzNpWc/TTTV9aFzSRI/AAAAAAAAAGE/Lx01jGk121c/s1600/strategy.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="290" n4="true" src="http://1.bp.blogspot.com/_o4stxlzNpWc/TTTV9aFzSRI/AAAAAAAAAGE/Lx01jGk121c/s640/strategy.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;Ahora el diagrama de clases del calculo de impuestos de acuerdo al país&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_o4stxlzNpWc/TTTW6RbqMKI/AAAAAAAAAGI/UD2Yg_9ylGg/s1600/taxcalc.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="230" n4="true" src="http://2.bp.blogspot.com/_o4stxlzNpWc/TTTW6RbqMKI/AAAAAAAAAGI/UD2Yg_9ylGg/s640/taxcalc.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;El código en C#&lt;br /&gt;La clase contexto:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_o4stxlzNpWc/TTTXqaanRgI/AAAAAAAAAGM/c3HMKSszLfU/s1600/ordenCompra.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="430" n4="true" src="http://4.bp.blogspot.com/_o4stxlzNpWc/TTTXqaanRgI/AAAAAAAAAGM/c3HMKSszLfU/s640/ordenCompra.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;La interface que de acuerdo al tipo de objeto selecciona la clase concreta para realizar el calculo del impuesto.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_o4stxlzNpWc/TTTYndRvcMI/AAAAAAAAAGQ/RCMQ4A9KiZI/s1600/interface.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="138" n4="true" src="http://3.bp.blogspot.com/_o4stxlzNpWc/TTTYndRvcMI/AAAAAAAAAGQ/RCMQ4A9KiZI/s400/interface.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;las clases concretas, que implementan a la interface con el calculo del impuesto correspondiente a cada país&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_o4stxlzNpWc/TTTZVsVKqtI/AAAAAAAAAGU/M3NQizC8AKQ/s1600/concretasTAX.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" n4="true" src="http://1.bp.blogspot.com/_o4stxlzNpWc/TTTZVsVKqtI/AAAAAAAAAGU/M3NQizC8AKQ/s640/concretasTAX.jpg" width="492" /&gt;&lt;/a&gt;&lt;/div&gt;y finalmente el cliente&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_o4stxlzNpWc/TTTZ8Z-NXjI/AAAAAAAAAGY/iMQCDJB2ouI/s1600/cte_compraTAX.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="182" n4="true" src="http://3.bp.blogspot.com/_o4stxlzNpWc/TTTZ8Z-NXjI/AAAAAAAAAGY/iMQCDJB2ouI/s640/cte_compraTAX.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;Asi si en el futuro de factura a otro país, sólo tenemos que implementar la interface con una clase concreta que realice el calculo correspondiente.&lt;br /&gt;&lt;a href="http://es.wikipedia.org/wiki/Strategy_(patr%C3%B3n_de_dise%C3%B1o"&gt;http://es.wikipedia.org/wiki/Strategy_(patr%C3%B3n_de_dise%C3%B1o&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-7224594763515432294?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/7224594763515432294/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=7224594763515432294' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/7224594763515432294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/7224594763515432294'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/01/patron-estrategia.html' title='Patrón de diseño: Estrategia'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_o4stxlzNpWc/TTTV9aFzSRI/AAAAAAAAAGE/Lx01jGk121c/s72-c/strategy.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-5581469038134265268</id><published>2011-01-17T15:40:00.009-06:00</published><updated>2011-01-17T18:21:23.969-06:00</updated><title type='text'>Patrón de diseño: Método Plantilla</title><content type='html'>Utilizaremos el patrón &lt;span style="color: green;"&gt;Template Method &lt;/span&gt;&lt;span style="color: black;"&gt;porque q&lt;/span&gt;ueremos crear una clase que nos permita trabajar&amp;nbsp;cierta funcionalidad independientemente del manjeador de base de datos&lt;span style="color: green;"&gt;&lt;span style="color: green;"&gt;&lt;span style="color: black;"&gt;, acontinuación veremos su representación en el diagrama de clases:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="justify" class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_o4stxlzNpWc/TTSwP1_9tmI/AAAAAAAAAFs/z_kd0LXgiXo/s1600/TM.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="465" n4="true" src="http://4.bp.blogspot.com/_o4stxlzNpWc/TTSwP1_9tmI/AAAAAAAAAFs/z_kd0LXgiXo/s640/TM.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="color: green;"&gt;&lt;span style="color: green;"&gt;&lt;span style="color: black;"&gt;Ahora el diagrama de clases de lo que nosotros queremos (ejecución de operaciones independientes del manejador de base datos).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_o4stxlzNpWc/TTSxC3ATF0I/AAAAAAAAAFw/vBnrUQii7wQ/s1600/TM_RDMS.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="372" n4="true" src="http://1.bp.blogspot.com/_o4stxlzNpWc/TTSxC3ATF0I/AAAAAAAAAFw/vBnrUQii7wQ/s640/TM_RDMS.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: green;"&gt;&lt;span style="color: green;"&gt;&lt;span style="color: black;"&gt;Y ahora el código en C#&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: green;"&gt;&lt;span style="color: green;"&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Esta es&amp;nbsp;la clase que contiene el método plantilla. Observemos que los&amp;nbsp;métodos que&amp;nbsp;tienen que ver con el manejador de base de datos se han definido&amp;nbsp;abstractos (sin implementar) pues estos deberán ser implementados por cada clase que represente al manejador de base de datos que queremos trabajar.&lt;br /&gt;&lt;span style="color: green;"&gt;&lt;span style="color: green;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_o4stxlzNpWc/TTS1vRg-WEI/AAAAAAAAAF0/-BvWOXPrzQ8/s1600/conectividad.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="368" n4="true" src="http://1.bp.blogspot.com/_o4stxlzNpWc/TTS1vRg-WEI/AAAAAAAAAF0/-BvWOXPrzQ8/s640/conectividad.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Las clases concretas que se casan con el manejador de Base de Datos&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_o4stxlzNpWc/TTS2MsU-5kI/AAAAAAAAAF4/5qyZ3RUMUwo/s1600/sqlserver.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="368" n4="true" src="http://2.bp.blogspot.com/_o4stxlzNpWc/TTS2MsU-5kI/AAAAAAAAAF4/5qyZ3RUMUwo/s640/sqlserver.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="color: black;"&gt;Otra clase concreta que implementa a la clase ConectividadBD, ahora para Oracle &lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_o4stxlzNpWc/TTS2rH8M-uI/AAAAAAAAAF8/TfFSRwrgDt0/s1600/oracle.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="386" n4="true" src="http://2.bp.blogspot.com/_o4stxlzNpWc/TTS2rH8M-uI/AAAAAAAAAF8/TfFSRwrgDt0/s640/oracle.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="color: black;"&gt;Y el código cliente:&lt;/span&gt; &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_o4stxlzNpWc/TTS3F0tHuyI/AAAAAAAAAGA/XGU10aO4shc/s1600/cte.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="190" n4="true" src="http://4.bp.blogspot.com/_o4stxlzNpWc/TTS3F0tHuyI/AAAAAAAAAGA/XGU10aO4shc/s640/cte.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;﻿Y así si queremos utilizar Informix, DB2 y los que sean.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Template_method_pattern"&gt;http://en.wikipedia.org/wiki/Template_method_pattern&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-5581469038134265268?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/5581469038134265268/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=5581469038134265268' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/5581469038134265268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/5581469038134265268'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/01/patron-metodo-plantilla.html' title='Patrón de diseño: Método Plantilla'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_o4stxlzNpWc/TTSwP1_9tmI/AAAAAAAAAFs/z_kd0LXgiXo/s72-c/TM.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-8603163167766253946</id><published>2011-01-16T14:52:00.000-06:00</published><updated>2011-01-16T14:52:42.698-06:00</updated><title type='text'>Herencia entre Interfaces</title><content type='html'>Las interfaces no pueden heredar de clases, pero si de otras interfaces. En la siguiente imagen vemos como IVehiculoVolador hereda de IVehiculo, porque un VehiculoVolador también es un Vehiculo y al implementar la interface IVehiculoVolador tenemos que implementar las dos interfaces.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_o4stxlzNpWc/TTNZ-vxnp9I/AAAAAAAAAFk/OwNEu3mjpXs/s1600/HerenciaI1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="524" n4="true" src="http://2.bp.blogspot.com/_o4stxlzNpWc/TTNZ-vxnp9I/AAAAAAAAAFk/OwNEu3mjpXs/s640/HerenciaI1.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Ahora el mismo diagrama, pero con los métodos implementados de las interfaces que utilizan:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_o4stxlzNpWc/TTNae2anaoI/AAAAAAAAAFo/CmCMZExoi9E/s1600/HerenciaI2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="440" n4="true" src="http://1.bp.blogspot.com/_o4stxlzNpWc/TTNae2anaoI/AAAAAAAAAFo/CmCMZExoi9E/s640/HerenciaI2.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-8603163167766253946?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/8603163167766253946/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=8603163167766253946' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/8603163167766253946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/8603163167766253946'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/01/herencia-entre-interfaces.html' title='Herencia entre Interfaces'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_o4stxlzNpWc/TTNZ-vxnp9I/AAAAAAAAAFk/OwNEu3mjpXs/s72-c/HerenciaI1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-6760500850444403573</id><published>2011-01-15T21:52:00.001-06:00</published><updated>2011-01-15T21:54:08.932-06:00</updated><title type='text'>Escenarios que pueden implementarse para el manejo de excepciones</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_o4stxlzNpWc/TTJr18l3jNI/AAAAAAAAAFg/iIUAnNKjUgc/s1600/callbackError.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="392" n4="true" src="http://1.bp.blogspot.com/_o4stxlzNpWc/TTJr18l3jNI/AAAAAAAAAFg/iIUAnNKjUgc/s640/callbackError.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-6760500850444403573?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/6760500850444403573/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=6760500850444403573' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/6760500850444403573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/6760500850444403573'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/01/escenarios-que-pueden-implementarse.html' title='Escenarios que pueden implementarse para el manejo de excepciones'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_o4stxlzNpWc/TTJr18l3jNI/AAAAAAAAAFg/iIUAnNKjUgc/s72-c/callbackError.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-2975151761726418968</id><published>2011-01-15T21:29:00.003-06:00</published><updated>2011-01-15T21:30:58.058-06:00</updated><title type='text'>Tipos de errores en la programacion del software</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_o4stxlzNpWc/TTJl2XQo5jI/AAAAAAAAAFY/WRsn6-KEGrY/s1600/errores.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="210" n4="true" src="http://3.bp.blogspot.com/_o4stxlzNpWc/TTJl2XQo5jI/AAAAAAAAAFY/WRsn6-KEGrY/s640/errores.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;Excepción: errores en tiempo de ejecución que no son fatales (uso de Try-catch)﻿&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-2975151761726418968?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/2975151761726418968/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=2975151761726418968' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/2975151761726418968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/2975151761726418968'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/01/tipos-de-errores-en-la-programacion-del.html' title='Tipos de errores en la programacion del software'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_o4stxlzNpWc/TTJl2XQo5jI/AAAAAAAAAFY/WRsn6-KEGrY/s72-c/errores.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-5873079913538273421</id><published>2011-01-14T16:19:00.002-06:00</published><updated>2011-01-14T16:25:21.309-06:00</updated><title type='text'>Invocar al Constructor de la clase Base en C#</title><content type='html'>Tenemos una clase que hereda de otra y sabemos que los constructores no son heredados, entonces podemos desde la clase que hereda invocar&amp;nbsp;al constructor de la clase base, en este caso para no volver a escribirlo o quizas en su cuerpo agregar alguna otra inicialización.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_o4stxlzNpWc/TTDNNH2_ZtI/AAAAAAAAAFU/UWv8r2a0arE/s1600/herencia.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="390" n4="true" src="http://2.bp.blogspot.com/_o4stxlzNpWc/TTDNNH2_ZtI/AAAAAAAAAFU/UWv8r2a0arE/s640/herencia.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-5873079913538273421?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/5873079913538273421/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=5873079913538273421' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/5873079913538273421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/5873079913538273421'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/01/llamando-al-constructor-de-la-clase.html' title='Invocar al Constructor de la clase Base en C#'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_o4stxlzNpWc/TTDNNH2_ZtI/AAAAAAAAAFU/UWv8r2a0arE/s72-c/herencia.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-8765932038713056203</id><published>2011-01-14T14:06:00.001-06:00</published><updated>2011-01-14T14:08:05.142-06:00</updated><title type='text'>Lista de parámetros dinámica a una función C#</title><content type='html'>Requerimos hacer una función que reciba un número de parámetros desconcido desde 1 hasta N valores para tratarlos a todos.&lt;br /&gt;&lt;br /&gt;//Los parámetros dinámicos se definene en la firma del método como un arreglo sin tamaño.&lt;br /&gt;public static int Suma(&lt;strong&gt;&lt;span style="font-size: large;"&gt;params int[]&lt;/span&gt;&lt;/strong&gt; argumentosN)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int total = 0;//el acumulador&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = 0; i &amp;lt; argumentosN.Length; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; total += argumentosN[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return total;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Al llamar a la funcion pasamos el # de parametros que queramos, en este caso siempre los sumara todos&lt;br /&gt;&lt;br /&gt;Console.WriteLine("valor : " + Suma (&lt;span style="font-size: large;"&gt;4,5,5,5,6&lt;/span&gt;)); &lt;br /&gt;Console.WriteLine("valor : " + Suma (&lt;span style="font-size: large;"&gt;4,5,5,5,6,3,4,5,33,45,2,3,44,5,1,12,4&lt;/span&gt;));&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-8765932038713056203?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/8765932038713056203/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=8765932038713056203' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/8765932038713056203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/8765932038713056203'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/01/lista-de-parametros-dinamica-una.html' title='Lista de parámetros dinámica a una función C#'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-2689665240184284019</id><published>2011-01-14T00:09:00.003-06:00</published><updated>2011-01-14T15:19:20.301-06:00</updated><title type='text'>Algunas Consideraciones en el Uso de las Variables: Locales, de Instancia y Estáticas en .NET</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_o4stxlzNpWc/TS_oZxIYOSI/AAAAAAAAAFI/2fmiHKFnGh0/s1600/variables.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="257" n4="true" src="http://4.bp.blogspot.com/_o4stxlzNpWc/TS_oZxIYOSI/AAAAAAAAAFI/2fmiHKFnGh0/s640/variables.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;Así, las variables locales siempre deberan ser inicializadas antes de utilizarlas sino el compilador marcará un error. Los campos o variables de clase sino so inicializadas, éstas serán inicialzadas a sus valores defaul correspondientes, los tipo númericos a cero y los tipos de datos referencia a null para ello tenga presente el uso de constructores.﻿&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-2689665240184284019?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/2689665240184284019/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=2689665240184284019' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/2689665240184284019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/2689665240184284019'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/01/blog-post_14.html' title='Algunas Consideraciones en el Uso de las Variables: Locales, de Instancia y Estáticas en .NET'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_o4stxlzNpWc/TS_oZxIYOSI/AAAAAAAAAFI/2fmiHKFnGh0/s72-c/variables.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-2475747194153472096</id><published>2011-01-13T15:24:00.004-06:00</published><updated>2011-01-13T15:28:53.088-06:00</updated><title type='text'>Clasificación de tamaño de los proyectos en el desarrollo sistemas</title><content type='html'>Comenzaremos por la definición de proyecto que por ahi encontré.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Proyecto&lt;/strong&gt;: Conjunto o secuencia de actividades que se desarrollan durante un tiempo por&amp;nbsp;un equipo de personas para obtener un resultado u objetivo concreto. Así un proyecto siempre tendrá:&lt;br /&gt;&lt;br /&gt;* Un objetivo concreto por alcanzar&lt;br /&gt;* Una linea de tiempo con un principio y un final&lt;br /&gt;* Un equipo de personas&lt;br /&gt;* Recursos limitados (dinero, equipos, licencias...)&lt;br /&gt;&lt;br /&gt;Y cómo podemos clasificar a los proyectos de software&amp;nbsp;de acuerdo a su tamaño? bueno considero que n función de dos factores: tiempo y número de personas:&lt;br /&gt;&lt;br /&gt;* &lt;strong&gt;&lt;u&gt;Chicos&lt;/u&gt;&lt;/strong&gt;: tienen una duración menor o igual a 6 meses con la participación de un equipo de personas de 1-5&lt;br /&gt;&lt;br /&gt;* &lt;strong&gt;&lt;u&gt;Medianos&lt;/u&gt;&lt;/strong&gt;: tienen una duración mayor a 6 meses y menor o igual 36 meses con la participación de un equipo de personas de 5 a 15&lt;br /&gt;&lt;br /&gt;* &lt;strong&gt;&lt;u&gt;Grandes&lt;/u&gt;&lt;/strong&gt;: tienen una duración de más de 36 meses y con un equipo de personas mayor a 15&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-2475747194153472096?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/2475747194153472096/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=2475747194153472096' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/2475747194153472096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/2475747194153472096'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/01/clasificacion-de-tamano-de-los.html' title='Clasificación de tamaño de los proyectos en el desarrollo sistemas'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-6241680876042638165</id><published>2011-01-13T10:55:00.002-06:00</published><updated>2011-01-13T10:56:20.548-06:00</updated><title type='text'>¿Cuáles son hoy las habilidades necesarias para la construcción del Software?</title><content type='html'>* Análisis de Requisitos&lt;br /&gt;* Análisis y Diseño Orientado a Objetos&lt;br /&gt;* Programación Orientada a Objetos&lt;br /&gt;* Ingenieria de usabilidad&lt;br /&gt;* Diseño de Interfaces de usuario&lt;br /&gt;* Diseño de Base&amp;nbsp;de Datos&lt;br /&gt;(Referencia: UML y Patrones. Craig Larman)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-6241680876042638165?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/6241680876042638165/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=6241680876042638165' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/6241680876042638165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/6241680876042638165'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/01/cuales-son-hoy-las-habilidades.html' title='¿Cuáles son hoy las habilidades necesarias para la construcción del Software?'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-34208019039756210</id><published>2011-01-09T15:53:00.022-06:00</published><updated>2011-01-13T10:57:09.243-06:00</updated><title type='text'>Múltiples referencias al mismo objeto (Referencias entre objetos)</title><content type='html'>Definción de referencia: Una referencia es un valor en tiempo de ejecución que está: o vacío o conectado.&lt;br /&gt;&lt;br /&gt;Caso ejemplo:&lt;br /&gt;Tenemos una clase que nos permite almacenar libros, es así que un libro se compone de la siguiente información:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-Titulo&lt;br /&gt;-Año de publicación&lt;br /&gt;-No paginas&lt;br /&gt;-Autor&lt;br /&gt;-Fecha Nacimiento&lt;br /&gt;-Pais de Origen&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;De tal modo que cuando necesitamos crear más de un objeto Libro para los cuales se trata del mismo autor se veria de la siguiente forma:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_o4stxlzNpWc/TSpAJ3DFFrI/AAAAAAAAAEA/KLlp8h2oSJg/s1600/librosconAutor.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5560327228082165426" src="http://1.bp.blogspot.com/_o4stxlzNpWc/TSpAJ3DFFrI/AAAAAAAAAEA/KLlp8h2oSJg/s400/librosconAutor.jpg" style="cursor: hand; display: block; height: 304px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;Asi que por ello es la referencia entre objetos, es decir; en el objeto Libro habrá un apuntador que referncia al objeto Autor:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_o4stxlzNpWc/TSpBmOqnmoI/AAAAAAAAAEQ/TJdbx581TvA/s1600/librosconRefAutor.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5560328814969985666" src="http://4.bp.blogspot.com/_o4stxlzNpWc/TSpBmOqnmoI/AAAAAAAAAEQ/TJdbx581TvA/s320/librosconRefAutor.jpg" style="cursor: hand; display: block; height: 202px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En el Diagrama de Clases lo podemos ver en la navegación, en donde la clase Libro tiene un apuntador a la case Autor:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_o4stxlzNpWc/TSpCfynCbFI/AAAAAAAAAEY/lV7yBYZF_H4/s1600/DC.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5560329803871186002" src="http://2.bp.blogspot.com/_o4stxlzNpWc/TSpCfynCbFI/AAAAAAAAAEY/lV7yBYZF_H4/s320/DC.jpg" style="cursor: hand; display: block; height: 194px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;Y en la implemantación en C# como una aplicación de consola:&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;class &lt;strong&gt;Libro&lt;/strong&gt;&lt;br /&gt;{&lt;br /&gt;public string Titulo;&lt;br /&gt;public Int16 AñoPublicacion;&lt;br /&gt;public Int16 NoPaginas;&lt;br /&gt;public Autor AutorLibro; &lt;strong&gt;&lt;span style="font-size: 85%;"&gt;//esta es la variable para hacer la refencia la objeto Autor&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;class &lt;strong&gt;Autor&lt;/strong&gt;&lt;br /&gt;{&lt;br /&gt;public string Nombre;&lt;br /&gt;public string FechaNacimiento;&lt;br /&gt;public string PaisOrigen;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Y el programa cliente que hace uso de las clases y las relaciona através de referencias entre objetos:&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;class &lt;strong&gt;Program&lt;/strong&gt;&lt;br /&gt;{&lt;br /&gt;static void Main(string[] args)&lt;br /&gt;{&lt;br /&gt;//creamos 2 libros que tienen mismo autor&lt;br /&gt;Libro &lt;strong&gt;Libro1&lt;/strong&gt; = new Libro();&lt;br /&gt;Libro1.Titulo = "Ensayo de la ceguera";&lt;br /&gt;Libro1.AñoPublicacion = 1998;&lt;br /&gt;Libro1.NoPaginas = 234; &lt;br /&gt;&lt;br /&gt;Libro &lt;strong&gt;Libro2&lt;/strong&gt; = new Libro();&lt;br /&gt;Libro2.Titulo = "El Evangelio Segun Jesucristo";&lt;br /&gt;Libro2.AñoPublicacion = 1992;&lt;br /&gt;Libro2.NoPaginas = 334;&lt;br /&gt;&lt;br /&gt;//genereamos el autor&lt;br /&gt;//Cuando se realiza una instancia de una clase (mediante new) se reserva en la memoria un espacio&lt;br /&gt;//para un conjunto de datos como el que definen los atributos de la clase que se indica en la instanciación.&lt;br /&gt;//A este conjunto de variables se le denomina variables de instancia.&lt;br /&gt;Autor &lt;strong&gt;Autorlibro&lt;/strong&gt; = new Autor();&lt;br /&gt;Autorlibro.Nombre = "José Saramago";&lt;br /&gt;Autorlibro.FechaNacimiento = "22/07/1948";&lt;br /&gt;Autorlibro.PaisOrigen = "Portugal"; &lt;br /&gt;&lt;br /&gt;//Los 2 libros los escribió el mismo autor de tal modo que la referencia es al mismo objeto autor.&lt;br /&gt;//las variables AutorLibro de cada Libro apuntan ambas al mismo Autor que es la variable de instancia creada arriba con new.&lt;br /&gt;&lt;strong&gt;Libro1.AutorLibro = Autorlibro;&lt;br /&gt;Libro2.AutorLibro = Autorlibro;&lt;/strong&gt;&lt;br /&gt;//Ahora vamos a imprimir los libros con su respectivo autor para identificar que se trata del mismo.&lt;br /&gt;Console.WriteLine("Impresión del libro 1:");&lt;br /&gt;Console.WriteLine("Titulo: " + Libro1.Titulo);&lt;br /&gt;Console.WriteLine("Año de PublicaciÃ³n: " + Libro1.AñoPublicacion);&lt;br /&gt;//ahora exponemos los datos del autor que apuntan desde el objeto libro al objeto autor.&lt;br /&gt;Console.WriteLine("Autor : " + Libro1.AutorLibro.Nombre);&lt;br /&gt;Console.WriteLine("Fecha de Nacimiento : " + Libro1.AutorLibro.FechaNacimiento);&lt;br /&gt;Console.WriteLine("Pais de Origen: : " + Libro1.AutorLibro.PaisOrigen);&lt;br /&gt;&lt;br /&gt;Console.WriteLine("");&lt;br /&gt;Console.WriteLine("Impresión del libro 2:");&lt;br /&gt;Console.WriteLine("Titulo: " + Libro2.Titulo);&lt;br /&gt;Console.WriteLine("Año de Publicación: " + Libro2.AñoPublicacion);&lt;br /&gt;//ahora exponemos los datos del autor que apuntan desde el objeto libro al objeto autor.&lt;br /&gt;Console.WriteLine("Autor : " + Libro2.AutorLibro.Nombre);&lt;br /&gt;Console.WriteLine("Fecha de Nacimiento : " + Libro2.AutorLibro.FechaNacimiento);&lt;br /&gt;Console.WriteLine("Pais de Origen: : " + Libro2.AutorLibro.PaisOrigen);&lt;br /&gt;Console.WriteLine("");&lt;br /&gt;Console.WriteLine("Enter para terminar");&lt;br /&gt;Console.ReadLine();//espera un Enter para continuar.&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;La salida:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_o4stxlzNpWc/TSpGCL4O2dI/AAAAAAAAAEg/iVG-xKmudhE/s1600/salidaConsola.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5560333693304625618" src="http://3.bp.blogspot.com/_o4stxlzNpWc/TSpGCL4O2dI/AAAAAAAAAEg/iVG-xKmudhE/s320/salidaConsola.jpg" style="cursor: hand; display: block; height: 206px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;Y asi, si el mismo autor tiene 100 libros todos los objetos Libro tendrán una refencia al mimo objeto Autor. Y este mismo esquema aplica para muchos casos por ejemplo tenemos muchas Facturas expedidas al mismo Cliente, no tenderemos un objeto Cliente por cada objeto Factura, habrá muchas Facturas todas apuntando al mismo Cliente.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-34208019039756210?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/34208019039756210/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=34208019039756210' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/34208019039756210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/34208019039756210'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/01/multiples-referencias-al-mismo-objeto.html' title='Múltiples referencias al mismo objeto (Referencias entre objetos)'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_o4stxlzNpWc/TSpAJ3DFFrI/AAAAAAAAAEA/KLlp8h2oSJg/s72-c/librosconAutor.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-8433613741319205616</id><published>2011-01-04T20:22:00.003-06:00</published><updated>2011-01-04T20:27:43.562-06:00</updated><title type='text'>Cursores FAST-FORWARD en SQL Server</title><content type='html'>If you have no choice but to use a server-side cursor in your application, try to use a FORWARD-ONLY or FAST-FORWARD, READ-ONLY cursor. When working with unidirectional, read-only data, use the FAST_FORWARD option instead of the FORWARD_ONLY option, as it has some internal performance optimizations to speed performance. This type of cursor produces the least amount of overhead on SQL Server.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sql-server-performance.com/tips/cursors_p1.aspx"&gt;http://www.sql-server-performance.com/tips/cursors_p1.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;EJEMPLO de uso:&lt;br /&gt;--Declaramos las variables&lt;br /&gt;Declare @cod as int&lt;br /&gt;&lt;strong&gt;Declare CURSOR1 cursor FAST_FORWARD for&lt;br /&gt;&lt;/strong&gt;select Valor from tabla1&lt;br /&gt;Open CURSOR1&lt;br /&gt;&lt;br /&gt;-- Avanzamos un registro y cargamos en las variables los valores encontrados en el primer registro&lt;br /&gt;fetch next from CURSOR1&lt;br /&gt;into @cod&lt;br /&gt;while @@fetch_status = 0&lt;br /&gt;Begin&lt;br /&gt;    --intruccion: la necesidad de implementar el cursor.&lt;br /&gt;     print convert(varchar(10), @cod)&lt;br /&gt;&lt;br /&gt;     -- Avanzamos otro registro&lt;br /&gt;    fetch next from CURSOR1&lt;br /&gt;    into @cod&lt;br /&gt;End&lt;br /&gt;&lt;br /&gt;-- cerramos el cursor&lt;br /&gt;close CURSOR1&lt;br /&gt;deallocate CURSOR1&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-8433613741319205616?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/8433613741319205616/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=8433613741319205616' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/8433613741319205616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/8433613741319205616'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/01/if-you-have-no-choice-but-to-use-server.html' title='Cursores FAST-FORWARD en SQL Server'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-3368960592494559735</id><published>2011-01-04T16:30:00.002-06:00</published><updated>2011-01-04T16:34:44.658-06:00</updated><title type='text'>Store Procedure con lecturas sucias</title><content type='html'>Ventajas: no hay bloqueos.&lt;br /&gt;&lt;br /&gt;Desventajas: los select no obtienen valores al 100% vs lo que inserta, actualiza o elimina la concurrencia.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SET ANSI_NULLS ON&lt;br /&gt;GO&lt;br /&gt;SET QUOTED_IDENTIFIER ON&lt;br /&gt;GO&lt;br /&gt;CREATE PROCEDURE dbo.spuX&lt;br /&gt;AS&lt;br /&gt;BEGIN&lt;br /&gt;     SET NOCOUNT ON;&lt;br /&gt;     --especiifcacion de nivel de aislamiento (equivalente a usar NoLock&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;    &lt;strong&gt;SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;    SELECT 1&lt;br /&gt;END&lt;br /&gt;GO&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-3368960592494559735?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/3368960592494559735/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=3368960592494559735' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/3368960592494559735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/3368960592494559735'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/01/store-procedure-con-lecturas-sucias.html' title='Store Procedure con lecturas sucias'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-8853583526495666884</id><published>2011-01-04T16:27:00.002-06:00</published><updated>2011-01-04T16:30:24.693-06:00</updated><title type='text'>¿Cuando usar Cursores?</title><content type='html'>Los cursores son buenos cuando estamos hablando de menos de 300 registros, las tablas temporales seria la mejor opción, pero si sabemos que la tabal temporal podria tener unos 1000 registros mejor utilecemos una variable de tipo table en lugar de la tabla temporal que se crea en el disco en la bd de Tempdb.&lt;br /&gt;&lt;br /&gt;Los cursores reservan recursos en el servidor, como por ejemplo locks, packages,&lt;br /&gt;procesos, almacenamiento temporal, etc. Por ejemplo, Microsoft SQL Server implementa los cursores creando una tabla temporal y rellenándola con los datos de la consulta.&lt;br /&gt;Si un cursor no se cierra de manera correcta, el recurso no será liberado hasta que la sesión SQL (conexión) sea cerrada. Este desperdicio de recursos en el servidor puede llevar no sólo a una degradación del rendimiento, sino también a fallos más graves.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-8853583526495666884?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/8853583526495666884/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=8853583526495666884' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/8853583526495666884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/8853583526495666884'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/01/cuando-usar-cursores.html' title='¿Cuando usar Cursores?'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-470720692801354913</id><published>2011-01-04T16:18:00.003-06:00</published><updated>2011-01-04T16:27:10.850-06:00</updated><title type='text'>Variables Tabla (CursorLess) SQL Server</title><content type='html'>Un ejemplo de utilizar variables tabla en SQL Server&lt;br /&gt;&lt;a href="http://www.eggheadcafe.com/articles/20010823.asp"&gt;http://www.eggheadcafe.com/articles/20010823.asp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Algunas ventajas: son que todo se trabaja en memoria no hay I/O como es el caso de tablas temporal.&lt;br /&gt;&lt;br /&gt;USE NORTHWIND&lt;br /&gt;--1. Declaracion de la variable tabla&lt;br /&gt;declare @SpecialCustomers TABLE (&lt;br /&gt;CustomerID nchar (5) NOT NULL ,&lt;br /&gt;OrderID int NOT NULL ,&lt;br /&gt;ShipVia int NOT NULL,&lt;br /&gt;Freight money NOT NULL)&lt;br /&gt;&lt;br /&gt;--2. poblamos la variable tabla con la informacion de la tabla Orders&lt;br /&gt;insert into @SPecialCustomers select CustomerID, OrderID, ShipVia, Freight&lt;br /&gt;from dbo.Orders where ShipVia =1 AND Freight &gt;50.25&lt;br /&gt;&lt;br /&gt;--3. Actualizamos datos con el uso de la informacion en la variable tabla&lt;br /&gt;UPDATE ORDERS SET ShipVia=4, Freight =21.00&lt;br /&gt;where ORDERS.OrderID IN (SELECT ORDERID FROM @SpecialCustomers)es o cursores.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-470720692801354913?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/470720692801354913/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=470720692801354913' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/470720692801354913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/470720692801354913'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2011/01/varaibles-tabla-cursorless-sql-server.html' title='Variables Tabla (CursorLess) SQL Server'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-8615845109222052739</id><published>2009-08-05T14:12:00.002-05:00</published><updated>2009-08-05T15:18:54.492-05:00</updated><title type='text'>Útil Link sobre Triggers en SQL Server</title><content type='html'>En algún momento estaba haciendo un disparador al update en la tabla y necesitaba comparar el valor anterior vs. el nuevo valor del update y no sabia como y bueno santa solución en el podoroso Internet. Este es el link con la explicación y ejemplos:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.devjoker.com/contenidos/Tutorial-de-Transact-SQL/278/Triggers-en-Transact-SQL.aspx"&gt;http://www.devjoker.com/contenidos/Tutorial-de-Transact-SQL/278/Triggers-en-Transact-SQL.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-8615845109222052739?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/8615845109222052739/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=8615845109222052739' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/8615845109222052739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/8615845109222052739'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2009/08/util-link-sobre-triggers-en-sql-server.html' title='Útil Link sobre Triggers en SQL Server'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-3326194291318111134</id><published>2009-08-05T14:06:00.002-05:00</published><updated>2009-08-05T14:09:48.161-05:00</updated><title type='text'>Excelente Link con util script SQLServer2k y diccionario de tablas de Sistema</title><content type='html'>Buscando información para obtener en modo SQL los resultados de ejecución de jobs en SQL Server 2000 -Jobs History- me entontre este últil script y el mapa correspondiente al diccionario de las tablas de sistema de SQL Server!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dbagroup.cl/blog/?p=66"&gt;http://dbagroup.cl/blog/?p=66&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-3326194291318111134?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/3326194291318111134/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=3326194291318111134' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/3326194291318111134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/3326194291318111134'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2009/08/excelente-link-con-util-script.html' title='Excelente Link con util script SQLServer2k y diccionario de tablas de Sistema'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-3598428689874600907</id><published>2009-03-04T11:41:00.002-06:00</published><updated>2009-03-04T11:43:58.376-06:00</updated><title type='text'>Query Triggers asociados a que Tabla SQL Server</title><content type='html'>&lt;p&gt;SELECT po.name as Tabla, tr.name as [Trigger Name] &lt;/p&gt;&lt;p&gt;FROM sysobjects po&lt;/p&gt;&lt;p&gt;JOIN sysobjects tr ON tr.parent_obj = po.id&lt;/p&gt;&lt;p&gt;WHERE tr.xtype = 'TR'AND po.xtype = 'U'&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-3598428689874600907?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/3598428689874600907/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=3598428689874600907' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/3598428689874600907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/3598428689874600907'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2009/03/query-triggers-asociados-que-tabla.html' title='Query Triggers asociados a que Tabla SQL Server'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-4159042435034628210</id><published>2008-09-12T10:47:00.002-05:00</published><updated>2008-09-12T11:03:22.073-05:00</updated><title type='text'>Hotkeys en un DataGridView</title><content type='html'>En un formulario Windows agregar un DataGridView cargarlo con datos para implementar la funcionalidad de teclas calientes, por ejemplo al Ctrl+F aplica un calculo al Ctrl+R refresca la rejilla, etc.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1.&lt;/strong&gt; Agregar métodos que responden a la combinación de teclas&lt;br /&gt;&lt;br /&gt;Private Sub &lt;strong&gt;ctrl_KeyUp&lt;/strong&gt;(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)&lt;br /&gt;Dim ctrl As Control = DirectCast(sender, Control)&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub InitializeEvents()&lt;br /&gt;'AddHandler Me.DataGridView1.KeyPress, AddressOf txt_KeyPress&lt;br /&gt;'AddHandler Me.DataGridView1.KeyDown, AddressOf txt_KeyDown&lt;br /&gt;AddHandler Me.DataGridView1.KeyUp, AddressOf &lt;strong&gt;ctrl_KeyUp&lt;/strong&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2.&lt;/strong&gt; Funcionalidad a ejecutar al detectar la combinación de teclas sobre un renglon de la rejilla al evento KeyUp&lt;br /&gt;&lt;br /&gt;Private Sub DataGridView1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.&lt;strong&gt;KeyUp&lt;/strong&gt;&lt;br /&gt;     Select Case e.KeyData&lt;br /&gt;               Case e.KeyCode.Control + e.KeyCode.F 'Aplica Calcluo&lt;br /&gt;                              MessageBox.Show("Ejecutar AplicaCaluloX())&lt;br /&gt;               Case e.KeyCode.Control + e.KeyCode.R 'Refrescar contenido-Databinding-&lt;br /&gt;                             MessageBox.Show("Ejecutar RefrescarRejilla()")&lt;br /&gt;&lt;br /&gt;     End Select&lt;br /&gt;End Sub&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-4159042435034628210?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/4159042435034628210/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=4159042435034628210' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/4159042435034628210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/4159042435034628210'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2008/09/hotkeys-en-un-datagridview.html' title='Hotkeys en un DataGridView'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-7224472503112272975</id><published>2008-09-12T10:40:00.003-05:00</published><updated>2008-09-12T10:45:22.096-05:00</updated><title type='text'>Leer entrada de app.config VS.NET 2005</title><content type='html'>&lt;strong&gt;1. Agregar archivo app.config&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5245161052369580706" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_o4stxlzNpWc/SMqOL-Qz8qI/AAAAAAAAAC0/zqF_0FEbhjs/s400/appconfig.png" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2--Leer de app.config&lt;/strong&gt;&lt;br /&gt;Configuration.ConfigurationManager.AppSettings.Item("AplicarFactorDiseñoPaq").ToString.Length&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-7224472503112272975?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/7224472503112272975/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=7224472503112272975' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/7224472503112272975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/7224472503112272975'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2008/09/leer-entrada-de-appconfig-vsnet-2005.html' title='Leer entrada de app.config VS.NET 2005'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_o4stxlzNpWc/SMqOL-Qz8qI/AAAAAAAAAC0/zqF_0FEbhjs/s72-c/appconfig.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-928426600622873783</id><published>2008-09-11T11:23:00.005-05:00</published><updated>2008-09-11T11:33:54.720-05:00</updated><title type='text'>Referencia de Uso de la herramienta: JetBrains DotTrace con ADO.NET</title><content type='html'>Esta herramienta ayuda a medir es el tiempo que se toma cada una estas operaciones para mostrar los datos. Esta herramienta te permite mediante la técnica de "code profiling" conocer el tiempo y cantidad de veces de cada una de las llamadas a los métodos de tu aplicación, incluido el código de .NET.&lt;br /&gt;&lt;br /&gt;En este pagina se describe el uso de esta interesante herramienta, yo la utilice porque al poblar un GridView de asp.net con un sqldatareader se tardaba muchisimo al solicitar unos 20,000 registros y con esta herramienta encntré en donde se hacia el cuello de botella.&lt;br /&gt;&lt;br /&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;http://msmvps.com/blogs/cwalzer/archive/2007/09/24/anti-pr-225-cticas-i-acceso-a-datos-con-ado-net.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La referencia es parte de un conjunto de articulos muy interesantes relacionados con la utilización de la herramienta con uso de objetos ADO.NET&lt;br /&gt;&lt;br /&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;br /&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;br /&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;br /&gt;Performance: Datos en Memoria con ADO.NET IV&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-928426600622873783?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/928426600622873783/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=928426600622873783' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/928426600622873783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/928426600622873783'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2008/09/referencia-de-uso-de-la-herramienta.html' title='Referencia de Uso de la herramienta: JetBrains DotTrace con ADO.NET'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-2567134640534005243</id><published>2008-09-11T09:49:00.004-05:00</published><updated>2008-09-11T09:59:33.679-05:00</updated><title type='text'>Store Procedure devuelve Información de Tablas de BD en SQL Server</title><content type='html'>&lt;strong&gt;create procedure dbo.p_sizetablesas&lt;/strong&gt;&lt;br /&gt;Begin transaction&lt;br /&gt;/***Procedimiento creado por KM para ver el tamaño de las tablas de una base de datos*/&lt;br /&gt;SET NOCOUNT ON&lt;br /&gt;declare @nombre_tabla varchar(100)&lt;br /&gt;declare @propietario varchar(40)&lt;br /&gt;declare @uid int&lt;br /&gt;declare @nombre_completo varchar(150)&lt;br /&gt;declare @nombre_db varchar(256)&lt;br /&gt;&lt;br /&gt;create table #resultados&lt;br /&gt;(nombre varchar(50), filas decimal(12,0), reservado varchar(40),&lt;br /&gt;data varchar(40), tamaño_indice varchar(20),&lt;br /&gt;no_usado varchar(20))&lt;br /&gt;&lt;br /&gt;declare tablas cursor&lt;br /&gt;for select a.uid , propietario = left( b.name,40), tabla =  a.name&lt;br /&gt; from sysobjects a, sysusers b&lt;br /&gt; where type = 'U' and a.uid = b.uid  order by tabla&lt;br /&gt;&lt;br /&gt;select @nombre_db = db_name()&lt;br /&gt;&lt;br /&gt;OPEN tablas&lt;br /&gt;FETCH NEXT FROM tablas&lt;br /&gt;into @uid, @propietario, @nombre_tabla&lt;br /&gt;WHILE @@FETCH_STATUS = 0&lt;br /&gt;BEGIN &lt;br /&gt;  if @uid = 1   &lt;br /&gt;  begin      &lt;br /&gt;          insert #resultados           &lt;br /&gt;          exec sp_spaceused @nombre_tabla   &lt;br /&gt; end  &lt;br /&gt; else    &lt;br /&gt;   begin       &lt;br /&gt;        SET @nombre_completo = rtrim(ltrim(@nombre_db))+'.' + ltrim(rtrim(@propietario))  +'.'+ @nombre_tabla         &lt;br /&gt;       insert #resultados             &lt;br /&gt;       exec sp_spaceused @nombre_completo&lt;br /&gt;  end   &lt;br /&gt;FETCH NEXT FROM tablas INTO @uid, @propietario, @nombre_tabla&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;CLOSE tablas&lt;br /&gt;DEALLOCATE tablas&lt;br /&gt;&lt;br /&gt;select * from #resultadosorder by filas desc&lt;br /&gt;Commit Transaction&lt;br /&gt; go&lt;br /&gt;&lt;br /&gt;--ejecutarlo en query analizer&lt;br /&gt;&lt;strong&gt;exec p_sizetables&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Referencia&lt;br /&gt;&lt;a href="http://www.lawebdelprogramador.com/codigo/codigo.php?idp=794&amp;amp;id=89&amp;amp;texto=SQL"&gt;http://www.lawebdelprogramador.com/codigo/codigo.php?idp=794&amp;amp;id=89&amp;amp;texto=SQL&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-2567134640534005243?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/2567134640534005243/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=2567134640534005243' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/2567134640534005243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/2567134640534005243'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2008/09/store-procedure-devuelve-informacin-de.html' title='Store Procedure devuelve Información de Tablas de BD en SQL Server'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-8200552326078746497</id><published>2008-09-11T09:37:00.006-05:00</published><updated>2008-09-11T10:28:54.026-05:00</updated><title type='text'>Query a cadena XML</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;div&gt;Crear:&lt;br /&gt;1. El esqueleto de la tabla para poder hacer el select&lt;br /&gt;2. El store procedure que hace el query de la cadeana XML basado en el esqueleto de la tabla&lt;br /&gt;3. Ejecutar el Store Procedure con la cadena XML (probar en el query analizer)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;1--La Tabla -Esqueleto&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;CREATE TABLE [dbo].[&lt;strong&gt;SKUsCARGA&lt;/strong&gt;] ( [CveProducto] [varchar] (20) NOT NULL , [DescProductoTerrSub] [varchar] (150) NOT NULL , [Territorio] [varchar] (20) NOT NULL , [SubTerritorio] [varchar] (20) NOT NULL , [Tecnica] [varchar] (50) NOT NULL , [Precio] [varchar] (10) NOT NULL , [Tamanio] [varchar] (50) NOT NULL , [Pocision] [varchar] (50) NOT NULL , [Apoyo] [varchar] (50) NOT NULL , [FechaAlta] [datetime] NOT NULL , [UsrAlta] [varchar] (20) NOT NULL )&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;--2. El Store Procedure&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;CREATE PROCEDURE &lt;strong&gt;dbo.PruebaXML&lt;/strong&gt;&lt;br /&gt;@xmlCargaSKUs text&lt;br /&gt;as&lt;br /&gt;Declare @idoc int&lt;br /&gt;--Ejecutar el sp que carga en memoria el docuemnto XML.&lt;br /&gt;EXEC sp_xml_preparedocument @idoc OUTPUT, @xmlCargaSKUs&lt;br /&gt;--El Query al docto XML&lt;br /&gt;SELECT CveProducto, Territorio, SubTerritorio, Tecnica, Precio, Tamanio, Pocision, Apoyo&lt;br /&gt;FROM &lt;strong&gt;OPENXML&lt;/strong&gt; (@idoc, '/SKUsCARGA/SKU')&lt;br /&gt;WITH SKUsCARGA&lt;br /&gt;--Descargar documento XML de la memoria.&lt;br /&gt;EXEC sp_xml_removedocument @idoc&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;--3. La ejecucion del store procedure con el paso de la cadena XML&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;skuscarga&gt;&lt;sku apoyo="''NINGUNO''/" pocision="''DERECHA''" tamanio="''1" precio="''60''" tecnica="''GRATIS''" subterritorio="''FCA''" territorio="''FCA''" cveproducto="''832''"&gt;&lt;sku apoyo="''NINGUNO''/" pocision="''DERECHA''" tamanio="''1" precio="''60''" tecnica="''GRATIS''" subterritorio="''FCA''" territorio="''FCA''" cveproducto="''805''"&gt;&lt;sku apoyo="''NINGUNO''/" pocision="''DERECHA''" tamanio="''1" precio="''52.9''" tecnica="''A" subterritorio="''FCA''" territorio="''FCA''" cveproducto="''824''"&gt;&lt;/skuscarga&gt;&lt;/div&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5244785851028463410" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_o4stxlzNpWc/SMk48YWL3zI/AAAAAAAAACs/ypwWVZYILMk/s400/xmlexec.png" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-8200552326078746497?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/8200552326078746497/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=8200552326078746497' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/8200552326078746497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/8200552326078746497'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2008/09/query-cadena-xml.html' title='Query a cadena XML'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_o4stxlzNpWc/SMk48YWL3zI/AAAAAAAAACs/ypwWVZYILMk/s72-c/xmlexec.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-1387199564369359233</id><published>2008-08-10T11:04:00.001-05:00</published><updated>2008-08-10T11:06:24.227-05:00</updated><title type='text'>Requerimiento implementacion Gestión de Facturas</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Implantación de la Base de Datos (Back-End)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;-Deberá ser con el manejador de base de datos Access o SQL Server 2000&lt;br /&gt;-Deberá diseñar una base de datos bajo los conceptos de normalización y su respectiva integración referencial de la información.&lt;br /&gt;-Deberá modelar la entidad Cliente, Empleado, Producto y Factura. Para cada entidad definirás los atributos básicos para poder operar la factura.&lt;br /&gt;-Si decide utilizar SQL Server 2K puedes usar Store Procedures o Vistas en la implantación o cadenas SQL en el Front-End&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Implementación de la GUI (Front-End)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;-Deberá ser utilizando Visual Basic NET 2005 o 2008 con el lenguaje Visual Basic .NET&lt;br /&gt;-El tipo de aplicación puede ser ASP.NET -Web- o aplicación de escritorio&lt;br /&gt;-Puedes hacerlo en capas, con objetos, etc. como tú desees.&lt;br /&gt;-Sólo deberá implementar la interfaz GUI para la factura.&lt;br /&gt;&lt;br /&gt;¿Qué debe permitir la aplicación para trabajar con las facturas?&lt;br /&gt;-    El sistema deberá permitir al usuario gestionar facturas: dar de alta, eliminar y hacer modificaciones a facturas existentes.&lt;br /&gt;-    El sistema deberá permitir seleccionar de una fuente de datos los productos -su descripción- que la empresa tiene a disposición para su venta y que se exponen en la factura (la factura deberá permitir contener de 1 a N productos sin repetir).&lt;br /&gt;-    El sistema deberá permitir seleccionar de una fuente de datos los clientes -su nombre o denominación social- registrados a los que se expide una factura.&lt;br /&gt;-    El sistema deberá permitir modificar los productos incluidos en la factura; es decir cambiar la cantidad o el producto.&lt;br /&gt;-    El sistema deberá calcular automáticamente el importe de cada producto de acuerdo a la cantidad solicitada, el subtotal, importe de IVA -manejarlo al 15%- y gran total.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Entrega de Fuentes :&lt;br /&gt;&lt;br /&gt;-    El archivo de la base de datos de Access o el archivo de respaldo de la Base de datos si decidiste implementar con SQL Server 2K.&lt;br /&gt;&lt;br /&gt;-    El proyecto de Visual Basic NET 2005 con el código fuente de la operación de la factura.&lt;br /&gt;&lt;br /&gt;Aspectos principales a evaluar:&lt;br /&gt;&lt;br /&gt;-    Con respecto a la base datos el modelo Entidad-Relación implementado&lt;br /&gt;-    Con respecto a la GUI de la gestión de la factura, facilidad de uso al usuario, forma de interactuar con la base de datos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-1387199564369359233?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/1387199564369359233/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=1387199564369359233' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/1387199564369359233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/1387199564369359233'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2008/08/requerimiento-implementacion-gestin-de.html' title='Requerimiento implementacion Gestión de Facturas'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-2868863922733562820</id><published>2008-08-10T10:10:00.002-05:00</published><updated>2008-08-10T11:04:06.109-05:00</updated><title type='text'>Formato separador miles a número en SQL Server</title><content type='html'>DECLARE @val float&lt;br /&gt;SET @val = '12456.00'&lt;br /&gt;SELECT CONVERT(varchar(50), CONVERT(money, @val), 1)&lt;br /&gt;&lt;br /&gt;--Salida&lt;br /&gt;12,456.00&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-2868863922733562820?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/2868863922733562820/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=2868863922733562820' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/2868863922733562820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/2868863922733562820'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2008/08/formato-separador-miles-nmero-en-sql.html' title='Formato separador miles a número en SQL Server'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-4145386234554959810</id><published>2008-02-14T13:10:00.002-06:00</published><updated>2008-02-14T13:20:04.078-06:00</updated><title type='text'>Uso de pwdencrypt y pwdcompare en SQL Server 2K</title><content type='html'>Estás dos funciones en SQL Server permiten cifrar y descifrar valores y que son muy últiles para guardar información no legible en la base de datos.&lt;br /&gt;&lt;br /&gt;Ejemplo de uso:&lt;br /&gt;&lt;br /&gt;--Devuelve la cadena cifrada.&lt;br /&gt;select &lt;strong&gt;pwdencrypt&lt;/strong&gt;('abcde')&lt;br /&gt;--el resultado es: 0x0100841F6D61428B6A7C1E497428DA4F77201E9C15CE03B39414324ADFC9BEDF7C73FCEC7120D2AEEEACA1732737&lt;br /&gt;--Este valor es el que almacenamos en nuestra tabla, por ejemplo un numero de cuenta o una contraseña, de esta manera si alguien ingresa a esta tabla no sabrá a que valor pertenece.&lt;br /&gt;&lt;br /&gt;--Ahora comparamos el texto en claro con lo que se almacena en la BD, regresa 1 si son iguales, sino cero.&lt;br /&gt;&lt;br /&gt;select &lt;strong&gt;pwdcompare&lt;/strong&gt;('abcde',0x0100841F6D61428B6A7C1E497428DA4F77201E9C15CE03B39414324ADFC9BEDF7C73FCEC7120D2AEEEACA1732737)&lt;br /&gt;&lt;br /&gt;Ahora veremos un store procedure en donde recibe el texto en claro -un password- y lo compara&lt;br /&gt;con el que esta en la BD cifrado.&lt;br /&gt;&lt;br /&gt;CREATE PROCEDURE dbo.spu_SelectUsr&lt;br /&gt;@Usuario varchar(15),&lt;br /&gt;@Passwd varchar(15)&lt;br /&gt;AS&lt;br /&gt;&lt;br /&gt;Set nocount on;&lt;br /&gt;&lt;br /&gt;Declare @ExisteCta bit&lt;br /&gt;set @ExisteCta = 0&lt;br /&gt;&lt;br /&gt;SELECT    @ExisteCta = 1&lt;br /&gt;FROM         USUARIO&lt;br /&gt;WHERE     (Usuario = @Usuario) AND (&lt;strong&gt;pwdcompare&lt;/strong&gt;(@Passwd, PasswdCifrado)=1)&lt;br /&gt;if @ExisteCta = 0&lt;br /&gt;begin&lt;br /&gt;       Raiserror 13000 'No existe la cuenta de acceso proporcionada.'            &lt;br /&gt;       Return&lt;br /&gt;end&lt;br /&gt;Go&lt;br /&gt;&lt;br /&gt;Link otros ejemplos&lt;br /&gt;&lt;a href="http://msmvps.com/blogs/gladchenko/archive/2005/04/06/41083.aspx"&gt;http://msmvps.com/blogs/gladchenko/archive/2005/04/06/41083.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-4145386234554959810?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/4145386234554959810/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=4145386234554959810' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/4145386234554959810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/4145386234554959810'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2008/02/uso-de-pwdencrypt-y-pwdcompare-en-sql.html' title='Uso de pwdencrypt y pwdcompare en SQL Server 2K'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-228305925297745914</id><published>2008-02-14T12:30:00.002-06:00</published><updated>2008-02-14T12:34:41.145-06:00</updated><title type='text'>Control para graficar en asp.net</title><content type='html'>Recientemente tuve la necesidad de graficar unos datos en el web, y mi sorpresa fue que visual studio net 2005 no incluye un control para ello, mi otra opción era sacarlo con Crystal Reports o un control y encontré este gratuito que me parecio muy bueno y además free.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.carlosag.net/Tools/WebChart/Default.aspx"&gt;http://www.carlosag.net/Tools/WebChart/Default.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La guía de uso rápido o tutorial:&lt;br /&gt;&lt;a href="http://www.carlosag.net/Articles/WebChartTutorial.aspx"&gt;http://www.carlosag.net/Articles/WebChartTutorial.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-228305925297745914?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/228305925297745914/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=228305925297745914' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/228305925297745914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/228305925297745914'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2008/02/control-para-graficar-en-aspnet.html' title='Control para graficar en asp.net'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-4551478985123177821</id><published>2008-02-14T12:28:00.001-06:00</published><updated>2008-02-14T12:29:41.760-06:00</updated><title type='text'>Herramientas gratis para SQL Server</title><content type='html'>Excelente link en donde podrán encontrar útiles herramientas para SQL Server 2k-2005&lt;br /&gt;&lt;br /&gt;&lt;a href="http://weblogs.sqlteam.com/mladenp/archive/2007/11/20/Free-SQL-Server-tools-that-might-make-your-life-a.aspx"&gt;http://weblogs.sqlteam.com/mladenp/archive/2007/11/20/Free-SQL-Server-tools-that-might-make-your-life-a.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-4551478985123177821?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/4551478985123177821/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=4551478985123177821' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/4551478985123177821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/4551478985123177821'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2008/02/herramientas-gratis-para-sql-server.html' title='Herramientas gratis para SQL Server'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-4627437225148083798</id><published>2007-09-27T17:23:00.001-05:00</published><updated>2011-01-11T10:54:36.843-06:00</updated><title type='text'>row-locks en operaciones SQL-Insert/Update/Delete</title><content type='html'>Este es un tip que me paso un cuate llamado Christian que es DBA en SQL Server. Para no poner de rodillas a su servidor de base de datos SQL Server&lt;br /&gt;&lt;br /&gt;Un link de referencia adicional es:&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/323630"&gt;http://support.microsoft.com/kb/323630&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;"A veces por cuestiones de performance o necesidad de trabajar con un conjunto de registros grandes, es conveniente hacerlo parcialmente, es decir, en "pedazos". Esto puede suceder porque al trabajar con millones de registros se generen demasiados row-locks y consuman toda la memoria y el query falle en su ejecución."&lt;br /&gt;&lt;br /&gt;Aquí un query de ejemplo:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;SET NOCOUNT ON&lt;/strong&gt; --QUITAMOS LOS MENSAJES DE CONTEO DE REGISTROS AFECTADOS YA QUE LO PERSONALIZAMOS&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DECLARE @Afectados bigint&lt;/strong&gt; --DECLARAMOS UNA VARIABLE PARA ACUMULAR LOS REGISTROS AFECTADOS&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DECLARE @Afec bigint&lt;/strong&gt; --DECLARAMOS UNA VARIABLE PARA SABER CUANTOS ACUMULO EN CADA PASO&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;SET @Afectados = 0&lt;/strong&gt; --INICIALIZAMOS EL ACUMULADO&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Borra:&lt;/strong&gt; --ETIQUETA PARA SALTO&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;SET Rowcount 1000&lt;/strong&gt; --ESTA SENTENCIA ES LA MAS IMPORTANTE: LE DECIMOS AL SQL QUE LA SIGUIENTE SENTENCIA SOLO AFECTARÁ A 1000 REGISTROS (AUNQUE EXISTAN MÁS)!!!!!!.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DELETE Facturas&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;WHERE Fecha_factura &amp;lt; '2007/01/01'&lt;/strong&gt; --EJECUTAMOS NUESTRA SENTENCIA, ESTA ES SOLO UN EJEMPLO Y SUPONDREMOS QUE LA SENTENCIA POR SÍ SOLA AFECTARÍA MILLONES DE REGISTROS.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;SET @Afec = @@Rowcount&lt;/strong&gt; --OBTENEMOS CUANTOS REGISTROS AFECTO (SOLAMENTE AL FINAL QUE YA NO HAYA REGISTROS POR AFECTAR DEVOLVERÁ CERO, DE LO CONTRARIO DEVOLVERÁ LOS 1000 QUE CONFIGURAMOS)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;SET @Afectados = @Afectados + @Afec&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;print 'Afectados: ' + CONVERT(varchar,@Afectados)&lt;/strong&gt; --AQUÍ VAMOS IMPRIMIENDO EL ACUMULADO DE LOS REGISTROS QUE VA AFECTANDO PARA DARNOS UNA IDEA DE CUANTO LEVA. (Ver pantalla resultado al final)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;if @Afec &amp;gt; 0 goto borra&lt;/strong&gt; --SI EL NUMERO DE REGISTROS QUE AFECTO EL DELETE ES MAYOR A CERO (ES DECIR QUE AUN HAY MÁS REGISTROS POR BORRAR) REGRESA A EJECUTAR EL DELETE.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;set rowcount 0&lt;/strong&gt; --RESETEAMOS EL ROWNCOUNT PARA QUE YA AFECTE NORMAL&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;El resultado se vería como la siguiente imágen:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5115015629440224722" src="http://bp2.blogger.com/_o4stxlzNpWc/RvwvnU1bDdI/AAAAAAAAABs/kzc4eSqdzww/s400/row-locks.JPG" style="cursor: hand; display: block; margin: 0px auto 10px; text-align: center;" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-4627437225148083798?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/4627437225148083798/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=4627437225148083798' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/4627437225148083798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/4627437225148083798'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2007/09/row-locks-en-operacione-sql.html' title='row-locks en operaciones SQL-Insert/Update/Delete'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_o4stxlzNpWc/RvwvnU1bDdI/AAAAAAAAABs/kzc4eSqdzww/s72-c/row-locks.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-4481607136471226156</id><published>2007-09-27T16:20:00.000-05:00</published><updated>2007-09-27T16:43:45.169-05:00</updated><title type='text'>Tipos Nulables para valores NULL en Bases de Datos</title><content type='html'>Hace unos días hice una clase de tipo Entity que la poblabla con registros de una tabla de una Base de Datos y la mayoría de sus valores eran opcionales, es decir nulos así que utilice el concepto de tipos nulables del framework 2.0. Con esta clasecilla insertaba regsitros con valores nulos.&lt;br /&gt;&lt;br /&gt;Public Class Cuestionario  &lt;br /&gt;'Los miembros privados nulables&lt;br /&gt;Private _otroIdiomaHabla As Nullable(Of Byte)   &lt;br /&gt;Private bolv1 As Nullable(Of Boolean)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--los métodos públicos de acceso a los miembros privados.&lt;br /&gt; Public Property OtroIdiomaHabla() As Nullable(Of Byte)     &lt;br /&gt;  Get      &lt;br /&gt;     Return Me._otroIdiomaHabla       &lt;br /&gt;  End Get       &lt;br /&gt;&lt;br /&gt; Set(ByVal value As Nullable(Of Byte))            &lt;br /&gt;     Me._otroIdiomaHabla = value       &lt;br /&gt; End Set   &lt;br /&gt;&lt;br /&gt;End Property&lt;br /&gt;End Class&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'El uso de la clase&lt;br /&gt;Dim objCuestionario as new Cuestionario  &lt;br /&gt;'Asigno nada a su miembro&lt;br /&gt;objCuestionario.OtroIdiomaHabla = Nothing&lt;br /&gt;'Verifico el valor&lt;br /&gt;If objCuestionario.OtroIdiomaHabla.HasValue then&lt;br /&gt;      'Existe valor&lt;br /&gt;Else&lt;br /&gt;      'Sin valor&lt;br /&gt;End if&lt;br /&gt;&lt;br /&gt;'Cuando asigno valor a un comando como parametro a la ejecución de un store procedure 'pasamos el valor o un nothing implicito por el tipo nulable y  que equivale a un null en la columna de la tabla de la BD.&lt;br /&gt;cmd.Parameters.Add("@OtroIdiomaHabla", Data.SqlDbType.Bit, 1).Value = objCuestionario.OtroIdiomaHabla&lt;br /&gt;&lt;br /&gt;'En el store procedure asignamos un default al parametro y cuando pasamos el valor a través del parametro a nuestro objeto esteremos pasando un nothing que va equivaler al Null.&lt;br /&gt;CREATE PROCEDURE spuInserta&lt;br /&gt;   @OtroIdiomaHabla tinyint=NULL&lt;br /&gt;As&lt;br /&gt;Insert Into Tabla (OtroIdiomaHabla, ValorX)&lt;br /&gt;Values(@OtroIdiomaHabla, Default)&lt;br /&gt;Go&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-4481607136471226156?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/4481607136471226156/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=4481607136471226156' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/4481607136471226156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/4481607136471226156'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2007/09/tipos-nulables-para-valores-null-en.html' title='Tipos Nulables para valores NULL en Bases de Datos'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-3958917396854968355</id><published>2007-09-27T16:16:00.000-05:00</published><updated>2007-09-27T16:19:15.430-05:00</updated><title type='text'>Links a páginas de iconos</title><content type='html'>Como desarrolladores de aplicaciones WEB y de escritorio siempre necesitamos de iconos de todo tipo recientemente consulté dos páginas de iconos simpre utiles para que las agreguen a susu favoritos.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.iconfinder.net/"&gt;http://www.iconfinder.net/&lt;/a&gt;&lt;br /&gt;El siguiente link me lo paso mi cuate Gerardo Hdz.&lt;br /&gt;&lt;a href="http://www.iconarchive.com/"&gt;http://www.iconarchive.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-3958917396854968355?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/3958917396854968355/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=3958917396854968355' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/3958917396854968355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/3958917396854968355'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2007/09/links-pginas-de-iconos.html' title='Links a páginas de iconos'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-3579094999296155299</id><published>2007-09-27T16:14:00.000-05:00</published><updated>2007-09-27T16:15:59.380-05:00</updated><title type='text'>Los 7 pecados mortales de Ajax</title><content type='html'>un buen link teórico de lo bueno y malo de usar Ajax!&lt;br /&gt;&lt;a href="http://www.tufuncion.com/errores-ajax"&gt;http://www.tufuncion.com/errores-ajax&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-3579094999296155299?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/3579094999296155299/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=3579094999296155299' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/3579094999296155299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/3579094999296155299'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2007/09/los-7-pecados-mortales-de-ajax.html' title='Los 7 pecados mortales de Ajax'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-5391112194685871738</id><published>2007-05-02T17:09:00.000-05:00</published><updated>2007-05-02T17:27:39.509-05:00</updated><title type='text'>Serialización con .NET 2.0</title><content type='html'>Hace unos días tuve la necesidad de serializar un objeto y esto es lo que encontré para el Framework 2.0&lt;br /&gt;&lt;br /&gt;Imports System.Xml.Serialization&lt;br /&gt;Imports System.IO&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Private Sub SerilizarObj()&lt;/strong&gt;       &lt;br /&gt;      Dim serializar As XmlSerializer = New XmlSerializer(GetType(AreaBLL))     &lt;br /&gt;      'Creamos el objeto a serializar     &lt;br /&gt;      Dim objArea As New AreaBLL()       &lt;br /&gt;      objArea.IdArea = 1       &lt;br /&gt;      objArea.NombreArea = "MKT"       &lt;br /&gt;      objArea.AreaPadre = "Presidencia"      &lt;br /&gt;      'Archivo en donde vamos a colocar el objeto deshidratado.&lt;br /&gt;      Dim stream1 As New FileStream("C:\area.xml", FileMode.Create)    &lt;br /&gt;     'Serilizar &lt;br /&gt;      serializar.Serialize(stream1, objArea)      &lt;br /&gt;      stream1.Close()   &lt;br /&gt;&lt;strong&gt;End Sub&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Private Sub DesSerializarObj()&lt;/strong&gt;&lt;br /&gt;       'Obtener a memoria el archivo XML&lt;br /&gt;       Dim FileXML As FileStream = New FileStream("C:\area.xml", FileMode.Open) &lt;br /&gt;      'Crear un XMLSerializer para manejar la deserialización    &lt;br /&gt;       Dim serialize As XmlSerializer = New XmlSerializer(GetType(AreaBLL))  &lt;br /&gt;       'Crear el objeto que se va a rehidratar.     &lt;br /&gt;       Dim objArea As New AreaBLL      &lt;br /&gt;       'Deserializar el obj.     &lt;br /&gt;       objArea = serialize.Deserialize(FileXML)       &lt;br /&gt;       FileXML.Close()  &lt;br /&gt; &lt;strong&gt;End Sub&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-5391112194685871738?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/5391112194685871738/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=5391112194685871738' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/5391112194685871738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/5391112194685871738'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2007/05/serializacin-con-net-20.html' title='Serialización con .NET 2.0'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-157873316789096808</id><published>2007-04-17T14:11:00.000-05:00</published><updated>2007-04-27T16:18:35.474-05:00</updated><title type='text'>Ejemplo de Aplicación ASP.NET 2.0 en capas con DataSet Tipado</title><content type='html'>Para el desarrollo de esta aplicación utilizamos Visual Basic .NET con Visual Studio .NET 2005.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Estrucutura del proyecto ASP.NET&lt;br /&gt;&lt;/strong&gt;- Una carpeta App_Code con:&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://bp2.blogger.com/_o4stxlzNpWc/RjJjZtXgLwI/AAAAAAAAABM/fhyrIbpJYkY/s1600-h/ProyectoDataSet.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5058214624816541442" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://bp2.blogger.com/_o4stxlzNpWc/RjJjZtXgLwI/AAAAAAAAABM/fhyrIbpJYkY/s400/ProyectoDataSet.JPG" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="justify"&gt;Una clase Area. Que hace uso de los métodos de la Clase del tipo Business Entities representada por un TableAdapter de un DataSet.&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;div align="justify"&gt;Una clase DataSet. Contiene un DataSet tipado el cual contiene los TableAdapter que representan a cada uno de los objetos Entitie con sus respectivos métodos de Acceso a Datos.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p align="justify"&gt; &lt;/p&gt;&lt;p align="justify"&gt;&lt;br /&gt;- La forma Web “Area.aspx” representa a la capa GUI.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Las 3 capas&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;En una arquitectura en 3 capas tenemos la capa de presentación o GUI, en nuestro ejemplo son los archivos aspx. La capa de Negocio que en nuestro ejemplo la representan nuestras clases Entity ubicados en el DataSet Tipado y para cada objeto entidad existe un TableAdapter con los métodos necesarios para el Acceso a Datos. Y la clase Area que representa como una clase Control que se comunica con las clases Entity y sus metodos de acceso a datos para luego hacer DataBinding con controles en la GUI.&lt;/p&gt;&lt;strong&gt;Detalles de la Implementación&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Tenemos una tabla llamada Area para la cual queremos implementar una forma de mantenimiento. La pantalla a la que queremos dar funcionalidad con la arquitectura en 3 capas es:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5058215445155294994" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp1.blogger.com/_o4stxlzNpWc/RjJkJdXgLxI/AAAAAAAAABU/6aIujqARTd0/s400/FormaWebDS.JPG" border="0" /&gt;&lt;br /&gt;Esta es la estructura de la tabla de la base de datos correspondiente al Area y los datos que regresa el store procedure que estaremos ejecutando.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;img id="BLOGGER_PHOTO_ID_5058216853904568098" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp1.blogger.com/_o4stxlzNpWc/RjJlbdXgLyI/AAAAAAAAABc/V0r3x1-xcc4/s400/QueryDS.JPG" border="0" /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Implementación del DataSet que contiene a los TableAdapters que representan a nuestros objetos Business Entities.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Algunas de las formas de representar a los Business Entities en la apicación son:&lt;br /&gt;· XML&lt;br /&gt;· DataSet Genericos&lt;br /&gt;· DataSet Tipados&lt;br /&gt;· Componentes Business Entities personaizados&lt;br /&gt;· Componentes Business Entities con comportamiento CRUD&lt;br /&gt;&lt;br /&gt;Para nuestro ejemplo utiizaremos el caso de DataSet Tipados. En la siguiente imagen podemos observar como se representa nuestro Business Entiy Area y en la parte baja observamos los métodos de acceso a datos que nos permiten poblar al Businness Entity representado como un DataTable.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5058217231861690162" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp1.blogger.com/_o4stxlzNpWc/RjJlxdXgLzI/AAAAAAAAABk/dsqmhfGtLG4/s400/DataSetTipado.JPG" border="0" /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Implementación del Objeto Area.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Este objeto es como un objeto control que invoca a los métodos de acceso a datos definidos para cada TableAdapter&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#990000;"&gt;Imports Microsoft.VisualBasic&lt;br /&gt;&lt;br /&gt;Public Class Area&lt;br /&gt;&lt;br /&gt;Public Function ObtenerAreas() As DataSet1.AREADataTable&lt;br /&gt;Dim AreasAdapter As New DataSet1TableAdapters.AREATableAdapter()&lt;br /&gt;Dim Areas As DataSet1.AREADataTable = AreasAdapter.GetData&lt;br /&gt;Return Areas&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#990000;"&gt;End Class&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;Podemos observar que esta clase crea una instacia del adaptador correspondiente al objeto Entity que deseamos trabajar en este caso: “AreaTableAdapter” luego invocamos su método de acceso a datos llamado GetData que nos regresa un DataTable con cada una de las áreas y que retornamos a la capa GUI para hacer DataBinding con un GridView.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Implementación de la capa de Presentación GUI&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;En esta capa es en donde vamos a poblar los controles visuales. El GridView se carga durante el evento Load de la página aquí crea una instancia del objeto Control Area y éste expone un método público que obtiene las Area que nos regresa en un objeto DataTable con el cual hacemos DataBinding al GridView.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;Partial Class Default2&lt;br /&gt;Inherits System.Web.UI.Page&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;Dim objArea As New Area&lt;br /&gt;&lt;br /&gt;Protected Sub &lt;strong&gt;Page_Load&lt;/strong&gt;(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load&lt;br /&gt;If Not Page.IsPostBack Then&lt;br /&gt;&lt;br /&gt;Dim objArea As New Area&lt;br /&gt;Me.GridView1.DataSource = objArea.ObtenerAreas&lt;br /&gt;Me.GridView1.DataBind()&lt;br /&gt;&lt;br /&gt;End If&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'Implementación del Pagineo la Grid&lt;br /&gt;Protected Sub &lt;strong&gt;GridView1_PageIndexChanging&lt;/strong&gt;(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.PageIndexChanging&lt;br /&gt;Me.GridView1.PageIndex = e.NewPageIndex&lt;br /&gt;Me.GridView1.DataSource = objArea.ObtenerAreas()&lt;br /&gt;Me.GridView1.DataBind()&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'Borrar el registro seleccionado en el Grid&lt;br /&gt;Protected Sub &lt;strong&gt;GridView1_RowDeleting&lt;/strong&gt;(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView1.RowDeleting&lt;br /&gt;'Para detectar el segundo postback generado por el ButtonField del tipo Image se verifican sus coordenadas x y.&lt;br /&gt;If (Me.Request("x") Is Nothing) AndAlso (Me.Request("y") Is Nothing) Then&lt;br /&gt;&lt;br /&gt;Dim iAffect As Int16&lt;br /&gt;objArea = New Area&lt;br /&gt;iAffect = objArea.DeleteArea(Me.GridView1.Rows(e.RowIndex).Cells.Item(0).Text)&lt;br /&gt;Else&lt;br /&gt;Me.GridView1.DataSource = objArea.ObtenerAreas()&lt;br /&gt;Me.GridView1.DataBind()&lt;br /&gt;End If&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'Al seleccionar un área se muestra en los controles independientes.&lt;br /&gt;Protected Sub &lt;strong&gt;GridView1_SelectedIndexChanged&lt;/strong&gt;(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged&lt;br /&gt;Me.LabelIdArea.Text = Me.GridView1.Rows(Me.GridView1.SelectedIndex).Cells.Item(0).Text&lt;br /&gt;Me.TextBox2.Text = Me.GridView1.Rows(Me.GridView1.SelectedIndex).Cells.Item(1).Text&lt;br /&gt;Me.TextBox1.Text = Me.GridView1.Rows(Me.GridView1.SelectedIndex).Cells.Item(2).Text&lt;br /&gt;Me.CheckBox1.Text = Me.GridView1.Rows(Me.GridView1.SelectedIndex).Cells.Item(3).Text&lt;br /&gt;End Sub &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;&lt;br /&gt;End Class&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Conclusión: Ésta es una de las formas propuestas por Microsoft.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-157873316789096808?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/157873316789096808/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=157873316789096808' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/157873316789096808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/157873316789096808'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2007/04/ejemplo-de-aplicacin-aspnet-20-en-capas.html' title='Ejemplo de Aplicación ASP.NET 2.0 en capas con DataSet Tipado'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_o4stxlzNpWc/RjJjZtXgLwI/AAAAAAAAABM/fhyrIbpJYkY/s72-c/ProyectoDataSet.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-6211036731935332532</id><published>2007-04-17T14:10:00.000-05:00</published><updated>2007-04-26T16:41:27.597-05:00</updated><title type='text'>Ejemplo de una Aplicación ASP.NET 2.0 en 3 capas con Colecciones de Objetos Personalizados</title><content type='html'>Para el desarrollo de esta aplicación utilizamos Visual Basic .NET con Visual Studio .NET 2005.&lt;br /&gt;La arquitectura es en 3 capas con uso del patrón Mapper.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Estrucutura del proyecto ASP.NET&lt;br /&gt;&lt;/strong&gt;- Una carpeta App_Code con 3 carpetas.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;La Carpeta Entities&lt;/em&gt;. Esta carpeta contiene a todos las clases que corresponden a los objetos de negocio del tipo entity, es decir objetos persistentes en la Base de Datos&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;em&gt;La Carpeta ColeccionesObj&lt;/em&gt;. Esta carpeta contiene a las clases que operan como colecciones de objetos de los objetos entity, es decir existe un objeto collecion por cada objeto Entity.&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;em&gt;La Carpeta Mappers&lt;/em&gt;. Esta carpeta contiene a las clases encargadas de crear objetos entity uno o más con los registros que obtiene de la base de datos y los objetos creados son consumidos por la capa de presentación. Los objetos mappers contienen los métodos necesarios para obtener y persistir los objetos del tipo Entity. Para cada objeto entity existe un objeto Mapper, pero cada uno de estos tiene el patrón Singleton para asegurar que exista una única instancia en toda la aplicación. Podriamos decir que este objeto es el encargado del acceso a datos y hace uso las objetos entity que devueve a la capa de presentación.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://bp3.blogger.com/_o4stxlzNpWc/RieupLtmlMI/AAAAAAAAAAc/32j6J3c48JY/s1600-h/ProyectoASPNET.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5055201129288602818" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://bp3.blogger.com/_o4stxlzNpWc/RieupLtmlMI/AAAAAAAAAAc/32j6J3c48JY/s400/ProyectoASPNET.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;-La forma Web “Area.aspx” representa a la capa GUI &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Las 3 capas&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;En una arquitectura en 3 capas tenemos la capa de presentación o GUI, en nuestro ejemplo son los archivos aspx. La capa de Negocio que en nuestro ejemplo la representan nuestras clases Entity ubicados en la carpeta Entites y la capa de Acceso a Datos representada por los objetos Mappers en nuestra carpeta Mappers y la Capa de datos son los objetos de la Base de Datos en nuestro ejemplo se representa con store procedures. En este caso los objetos Mappers son los encargados de comunicar las 3 capas y pasar datos del mundo relacional al de objetos.&lt;br /&gt;&lt;/p&gt;&lt;a href="http://bp0.blogger.com/_o4stxlzNpWc/Riex_btmlNI/AAAAAAAAAAk/I7N1vnoTaAA/s1600-h/ProyectoASPNETExpandido.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5055204810075575506" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://bp0.blogger.com/_o4stxlzNpWc/Riex_btmlNI/AAAAAAAAAAk/I7N1vnoTaAA/s400/ProyectoASPNETExpandido.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;Detalles de la Implementación&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Tenemos una tabla llamada Area para la cual queremos implementar una forma de mantenimiento. La pantalla a la que queremos dar funcionalidad con la arquitectura en 3 capas es:&lt;/p&gt;&lt;a href="http://bp2.blogger.com/_o4stxlzNpWc/RieyW7tmlOI/AAAAAAAAAAs/J9ZeAMWIgDE/s1600-h/FormaWeb.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5055205213802501346" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://bp2.blogger.com/_o4stxlzNpWc/RieyW7tmlOI/AAAAAAAAAAs/J9ZeAMWIgDE/s400/FormaWeb.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;Esta es la estructura de a tabla de la base de dato correspondiente al Area y los datos que regresa el store procedure que estaremos ejecutando.&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;a href="http://bp0.blogger.com/_o4stxlzNpWc/Riey5btmlPI/AAAAAAAAAA0/pj6l44JHVKo/s1600-h/Query.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5055205806507988210" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://bp0.blogger.com/_o4stxlzNpWc/Riey5btmlPI/AAAAAAAAAA0/pj6l44JHVKo/s400/Query.JPG" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;Implementación de la clase Entity (Objeto de Capa de Negocio)&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Algunas de las formas de representar a los Business Entities en la aplicación son:&lt;br /&gt;· XML&lt;br /&gt;· DataSet Genericos&lt;br /&gt;· DataSet Tipados&lt;br /&gt;· Componentes Business Entities personaizados&lt;br /&gt;· Componentes Business Entities con comportamiento CRUD&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;Para nuestro ejemplo utilizaremos el caso de ”&lt;strong&gt;&lt;em&gt;Componentes Business Entities Personalizados&lt;/em&gt;&lt;/strong&gt;”.&lt;br /&gt;&lt;br /&gt;La clase Entity representa al objeto de negocio Area. Para ello agregamos una Clase en la carpeta Entities con el nombre AreaBLL.&lt;/p&gt;&lt;p align="justify"&gt;&lt;span style="color:#330099;"&gt;Imports Microsoft.VisualBasic&lt;br /&gt;&lt;br /&gt;Public Class AreaBLL&lt;br /&gt;&lt;br /&gt;Private _idArea As Integer&lt;br /&gt;Private _nombreArea As String&lt;br /&gt;Private _obsArea As String&lt;br /&gt;Private _esActivaArea As Boolean&lt;br /&gt;Private _fechaModificArea As Date&lt;br /&gt;Private _usrModificArea As String&lt;br /&gt;Private _idAreaPadre As Integer&lt;br /&gt;Private _AreaPadre As String&lt;br /&gt;&lt;br /&gt;Public Property IdArea() As Integer&lt;br /&gt;Get&lt;br /&gt;Return Me._idArea&lt;br /&gt;End Get&lt;br /&gt;Set(ByVal value As Integer)&lt;br /&gt;Me._idArea = value&lt;br /&gt;End Set&lt;br /&gt;End Property&lt;br /&gt;&lt;br /&gt;Public Property NombreArea() As String&lt;br /&gt;Get&lt;br /&gt;Return Me._nombreArea&lt;br /&gt;End Get&lt;br /&gt;If value.Trim.Length &gt; 0 Then&lt;br /&gt;Me._nombreArea = value&lt;br /&gt;Else&lt;br /&gt;Throw New Exception("Debe proporcionar el nombre del área")&lt;br /&gt;End If&lt;br /&gt;End Property&lt;br /&gt;&lt;br /&gt;Public Property ObsArea() As String&lt;br /&gt;Get&lt;br /&gt;Return Me._obsArea&lt;br /&gt;End Get&lt;br /&gt;Set(ByVal value As String)&lt;br /&gt;Me._obsArea = value&lt;br /&gt;End Set&lt;br /&gt;End Property&lt;br /&gt;&lt;br /&gt;Public Property EsActivaArea() As Boolean&lt;br /&gt;Get&lt;br /&gt;Return Me._esActivaArea&lt;br /&gt;End Get&lt;br /&gt;Set(ByVal value As Boolean)&lt;br /&gt;Me._esActivaArea = value&lt;br /&gt;End Set&lt;br /&gt;End Property&lt;br /&gt;&lt;br /&gt;Public Property FechaModificArea() As Date&lt;br /&gt;Get&lt;br /&gt;Return Me._fechaModificArea&lt;br /&gt;End Get&lt;br /&gt;Set(ByVal value As Date)&lt;br /&gt;Me._fechaModificArea = value&lt;br /&gt;End Set&lt;br /&gt;End Property&lt;br /&gt;&lt;br /&gt;Public Property UsrModificArea() As String&lt;br /&gt;Get&lt;br /&gt;Return Me._usrModificArea&lt;br /&gt;End Get&lt;br /&gt;Set(ByVal value As String)&lt;br /&gt;Me._usrModificArea = value&lt;br /&gt;End Set&lt;br /&gt;End Property&lt;br /&gt;&lt;br /&gt;Public Property IdAreaPadre() As Integer&lt;br /&gt;Get&lt;br /&gt;Return Me._idAreaPadre&lt;br /&gt;End Get&lt;br /&gt;Set(ByVal value As Integer)&lt;br /&gt;Me._idAreaPadre = value&lt;br /&gt;End Set&lt;br /&gt;End Property&lt;br /&gt;&lt;br /&gt;Public Property AreaPadre() As String&lt;br /&gt;Get&lt;br /&gt;Return Me._AreaPadre&lt;br /&gt;End Get&lt;br /&gt;Set(ByVal value As String)&lt;br /&gt;Me._AreaPadre = value&lt;br /&gt;End Set&lt;br /&gt;End Property&lt;br /&gt;&lt;br /&gt;End Class&lt;/span&gt;&lt;/p&gt;&lt;p align="justify"&gt;Podemos observar que se compone de propiedades privadas que representan a cada una de las columnas de la tabla. Para que dichas propiedades sean accesibles creamos los métodos públicos que leen o escriben en las propiedades. (Con esto implementamos el concepto de Encapsulamiento de la teoría de la Programación Orientada a Objetos).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Implementación de la clase colección para cada objeto Entity&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;Ahora requerimos construir una clase que nos permita contener una colección de objetos entidad. Si observamos la pantalla que deseamos dar funcionalidad tenemos una rejilla que debe poblarse con objetos entidad del tipo AreaBLL. Agregamos una clase que llamaremos Area_Coleccion y que debe heredar de la clase CollectionBase.&lt;/p&gt;&lt;p align="justify"&gt;&lt;span style="color:#993399;"&gt;Imports Microsoft.VisualBasic&lt;br /&gt;&lt;br /&gt;Public Class Area_Coleccion&lt;br /&gt;Inherits CollectionBase&lt;br /&gt;Default Public Property Item(ByVal index As Integer) As AreaBLL&lt;br /&gt;Get&lt;br /&gt;Return CType(List(index), AreaBLL)&lt;br /&gt;End Get&lt;br /&gt;Set(ByVal value As AreaBLL)&lt;br /&gt;List(index) = value&lt;br /&gt;End Set&lt;br /&gt;End Property&lt;br /&gt;&lt;br /&gt;Public Function Add(ByVal value As AreaBLL) As Integer&lt;br /&gt;Return (List.Add(value))&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Public Function IndexOf(ByVal value As AreaBLL) As Integer&lt;br /&gt;Return (List.IndexOf(value))&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Public Sub Insert(ByVal index As Integer, ByVal value As AreaBLL)&lt;br /&gt;List.Insert(index, value)&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Public Sub Remove(ByVal value As AreaBLL)&lt;br /&gt;List.Remove(value)&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Public Function Contains(ByVal value As AreaBLL) As Boolean&lt;br /&gt;Return (List.Contains(value))&lt;br /&gt;End Function&lt;br /&gt;End Class&lt;/span&gt;&lt;/p&gt;&lt;p align="justify"&gt;Podemos observar que los métodos de esta clase reciben objetos del tipo Area. Es así que para cada objeto Entity que tengamos debemos crear un objeto Colección, esto si es que requerimos devolver una colección de objetos a la capa de datos. En nuestro ejemplo si requerimos poblar un GridView que muestra a un conjunto de objetos Area.&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;Implementación de la clase Mapper para cada objeto Entity&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;Esta es la clase que se encarga de regresar un objeto Entity a la capa de presentación o una colección de objetos de acuerdo al método invocado.&lt;br /&gt;&lt;br /&gt;Como esta clase es la que accede a la base de datos utilizamos el DataBlock de Microsoft. Accedemos a los datos a través de store procedures. La cadena de conexión se encuentra en el archivo web.config&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;Si observamos el método “&lt;strong&gt;GetAllArea&lt;/strong&gt;” retorna una colección de objetos del tipo Area_Colección. Se extraen los registros de base de datos a través de un SqlDataReader y luego se recorre a cada uno y con cada renglon se pobla un objeto Entity AreaBLL, luego el objeto poblado se agrega a la Colección de objetos Area y así sucesivamente para cada objeto creado de acuerdo a los registros de base de datos obtenidos en el SqlDataReader.&lt;/p&gt;&lt;p align="justify"&gt;&lt;span style="color:#006600;"&gt;Imports Microsoft.VisualBasic&lt;br /&gt;Imports Microsoft.ApplicationBlocks.Data&lt;br /&gt;Imports System.Data.SqlClient&lt;br /&gt;Imports System.Reflection&lt;br /&gt;Imports System.Data&lt;br /&gt;&lt;br /&gt;Public Structure AreaMapper&lt;br /&gt;Private _SQLCon As String&lt;br /&gt;&lt;br /&gt;'Propiedades necesarias para implementar la clase como Singleton.&lt;br /&gt;Private Shared mInstance As AreaMapper&lt;br /&gt;Private Shared mMutex As New System.Threading.Mutex()&lt;br /&gt;&lt;br /&gt;Public ReadOnly Property SQLCon() As Integer&lt;br /&gt;Get&lt;br /&gt;Return Me._SQLCon&lt;br /&gt;End Get&lt;br /&gt;End Property&lt;br /&gt;&lt;br /&gt;'Implementando la clase como Singleton.&lt;br /&gt;Public Shared Function GetInstance() As AreaMapper&lt;br /&gt;mMutex.WaitOne()&lt;br /&gt;If mInstance Is Nothing Then&lt;br /&gt;mInstance = New AreaMapper()&lt;br /&gt;End If&lt;br /&gt;mMutex.ReleaseMutex()&lt;br /&gt;Return mInstance&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Public Sub New()&lt;br /&gt;_SQLCon = ConfigurationManager.ConnectionStrings("TimonConnectionString").ToString()&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'Iniciar con la cadena de conexión&lt;br /&gt;Sub New(ByVal pSQLCon As String)&lt;br /&gt;_SQLCon = pSQLCon&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Public Function GetAllArea() As Area_Coleccion&lt;br /&gt;Dim dr As SqlDataReader = Nothing&lt;br /&gt;Try&lt;br /&gt;dr = SqlHelper.ExecuteReader(_SQLCon, Data.CommandType.StoredProcedure, "spSelectArea")&lt;br /&gt;Dim ListaAreas As New Area_Coleccion&lt;br /&gt;While dr.Read()&lt;br /&gt;ListaAreas.Add(PopulateArea(dr))&lt;br /&gt;End While&lt;br /&gt;Return ListaAreas&lt;br /&gt;&lt;br /&gt;Catch ex As SqlException&lt;br /&gt;Throw New Exception(ex.Message &amp; " En la rutina: " &amp;amp; MethodInfo.GetCurrentMethod.Name)&lt;br /&gt;Catch ex As Exception&lt;br /&gt;Throw New Exception(ex.Message &amp; " En la rutina: " &amp;amp; MethodInfo.GetCurrentMethod.Name)&lt;br /&gt;Finally&lt;br /&gt;If Not dr Is Nothing AndAlso Not dr.IsClosed Then&lt;br /&gt;dr.Close()&lt;br /&gt;End If&lt;br /&gt;End Try&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Private Function PopulateArea(ByVal dr As SqlDataReader) As AreaBLL&lt;br /&gt;Dim ObjArea As New AreaBLL&lt;br /&gt;Try&lt;br /&gt;&lt;br /&gt;ObjArea.IdArea = Convert.ToInt32(dr(0)) 'IdArea&lt;br /&gt;ObjArea.NombreArea = Convert.ToString(dr(1)) 'NombreArea&lt;br /&gt;&lt;br /&gt;'ObsArea&lt;br /&gt;If Not dr(2) Is DBNull.Value Then&lt;br /&gt;ObjArea.ObsArea = Convert.ToString(dr(2))&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;'EsActivaArea&lt;br /&gt;ObjArea.EsActivaArea = Convert.ToByte(dr(3))&lt;br /&gt;'AreaPadre&lt;br /&gt;ObjArea.AreaPadre = Convert.ToString(dr(4))&lt;br /&gt;&lt;br /&gt;Return ObjArea&lt;br /&gt;&lt;br /&gt;Catch ex As SqlException&lt;br /&gt;Throw New Exception(ex.Message &amp; "En la rutina: " &amp;amp; MethodInfo.GetCurrentMethod.Name)&lt;br /&gt;Catch ex As Exception&lt;br /&gt;Throw New Exception(ex.Message &amp; "En la rutina: " &amp;amp; MethodInfo.GetCurrentMethod.Name)&lt;br /&gt;End Try&lt;br /&gt;End Function&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;span style="color:#006600;"&gt;End Structure&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;strong&gt;Implementación de la capa de Presentación GUI&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;En esta capa es en donde vamos a poblar los controles visuales con objetos Entity o listas de objetos Entity. Nosotros queremos que la cargarse la forma web se poble el GridView con los datos de todas las áreas que se encuentran en la tabla Area de la base de datos. Hacemos esto en el evento Load. Podemos observar como creamos un objeto de la clase AreaMapper y que para poblar el GridView ejecutamos su método GetAllArea y que lo establecemos como DataSource al GridView a esto se lo conoce como DataBinding con objetos de negocio.&lt;/p&gt;&lt;p align="justify"&gt;&lt;span style="color:#990000;"&gt;Partial Class _Default&lt;br /&gt;Inherits System.Web.UI.Page&lt;br /&gt;&lt;br /&gt;Private ObjAreaMapper As AreaMapper&lt;br /&gt;&lt;br /&gt;Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load&lt;br /&gt;If Not Page.IsPostBack Then&lt;br /&gt;ObjAreaMapper = AreaMapper.GetInstance()&lt;br /&gt;Call poblarDBGrid()&lt;br /&gt;Call poblarListaAreasPadre()&lt;br /&gt;&lt;br /&gt;End If&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub poblarDBGrid()&lt;br /&gt;Try&lt;br /&gt;Me.GridView1.DataSource = ObjAreaMapper.GetAllArea&lt;br /&gt;Me.GridView1.DataBind()&lt;br /&gt;Me.LabelTotalRegGrid.Text = "Total de Registros: " &amp; Me.GridView1.Rows.Count&lt;br /&gt;Catch ex As Exception&lt;br /&gt;Me.LabelInfo.Text = ex.Message&lt;br /&gt;End Try&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub poblarListaAreasPadre()&lt;br /&gt;Try&lt;br /&gt;&lt;br /&gt;Me.DropDownList1.DataSource = ObjAreaMapper.SelectAreas&lt;br /&gt;Me.DropDownList1.DataValueField = "IdArea"&lt;br /&gt;Me.DropDownList1.DataTextField = "NombreArea"&lt;br /&gt;Me.DropDownList1.DataBind()&lt;br /&gt;&lt;br /&gt;Catch ex As Exception&lt;br /&gt;Me.LabelInfo.Text = ex.Message&lt;br /&gt;End Try&lt;br /&gt;End Sub&lt;br /&gt;End Class&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;Este es un diagrama que expone de manera general la arquitectura de la aplicación desarrollada&lt;/p&gt;&lt;a href="http://bp2.blogger.com/_o4stxlzNpWc/Rikx9btmlQI/AAAAAAAAAA8/VZX-TzOtbMs/s1600-h/ArquitecturaApp.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5055626988180903170" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://bp2.blogger.com/_o4stxlzNpWc/Rikx9btmlQI/AAAAAAAAAA8/VZX-TzOtbMs/s400/ArquitecturaApp.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;a href="http://bp3.blogger.com/_o4stxlzNpWc/Rik7MrtmlRI/AAAAAAAAABE/HigWiFGeLFg/s1600-h/DiagramaSecuencia.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5055637145778558226" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://bp3.blogger.com/_o4stxlzNpWc/Rik7MrtmlRI/AAAAAAAAABE/HigWiFGeLFg/s400/DiagramaSecuencia.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;p align="justify"&gt;Referencias&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms978496.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms978496.aspx&lt;/a&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;a href="http://builder.com.com/5100-6387-1049997.html"&gt;http://builder.com.com/5100-6387-1049997.html&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;span style="color:#3333ff;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-6211036731935332532?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/6211036731935332532/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=6211036731935332532' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/6211036731935332532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/6211036731935332532'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2007/04/ejemplo-de-aplicacin-aspnet-20-en-3.html' title='Ejemplo de una Aplicación ASP.NET 2.0 en 3 capas con Colecciones de Objetos Personalizados'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_o4stxlzNpWc/RieupLtmlMI/AAAAAAAAAAc/32j6J3c48JY/s72-c/ProyectoASPNET.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-8300923220608671506</id><published>2007-04-17T13:48:00.000-05:00</published><updated>2007-04-17T14:09:58.439-05:00</updated><title type='text'>Excelente artículo DateSet vs. Colecciones de Objetos</title><content type='html'>Este es el link a un excelente articulo que expresa ventajas y desventajas de usar DataSets y Colecciones de Objetos, cuando usar unos y otros. Muchas veces como desarrolladores utilizamos lo que nos dicen los manuales de microsoft o los libros, pero no sabemos tecnicamente que es mejor, tomamos lo que mejor entendemos o lo que nos parece más fácil, pero creo que esto no es del todo correcto.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/05/08/CuttingEdge/"&gt;http://msdn.microsoft.com/msdnmag/issues/05/08/CuttingEdge/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Algo de lo que dice este articulo con respecto a los DataSets es que estos implementan la serialización de manera automática, pero ésta tiene un costo muy considerable cuando se hace para miles de registros. Soportan la concurrencia optimista, el databinding , permiten la implementación de links lógicos entre tablas cuyo fin es hacer árboles hijos de datos, pero esto último comunmente no es utilizado.&lt;br /&gt;&lt;br /&gt;Con respecto a las colecciones de objetos cuya implementación requiere heredar de la clase&lt;br /&gt;CollectionBase son considerablemente más rápidos en la recuperación de datos entre las capas. Requieren un mayor trabajo de codificación.&lt;br /&gt;&lt;br /&gt;En conclusión el artículo propone pensar muy bien en usar DataSet ya que al parecer estos presentan más desventajas , claro esto depende de la funcionalidad que se requiera ya que los DataSet soportan funcionalidad que no soportan las colecciones de objetos aunque estos últimos presentan un mayor desempeño.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-8300923220608671506?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/8300923220608671506/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=8300923220608671506' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/8300923220608671506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/8300923220608671506'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2007/04/excelente-artculo-dateset-vs.html' title='Excelente artículo DateSet vs. Colecciones de Objetos'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-8231212869147485545</id><published>2007-03-22T19:49:00.000-06:00</published><updated>2007-04-11T17:56:39.977-05:00</updated><title type='text'>Utiles NET 2.0</title><content type='html'>&lt;p&gt;Crear y acceder a los métodos de un TableAdapter definido en un DataSet tipado.&lt;/p&gt;&lt;p&gt;'Esta función retorna una DataTable después de crear el TableAdapter y ejecutar el método definido en la mismo.&lt;br /&gt;Public Function ObtenerAreasXEsActiva() As DataSet1.AREADataTable&lt;br /&gt;    Dim AreasAdapter As New &lt;strong&gt;DataSet1TableAdapters.AREATableAdapter&lt;/strong&gt;()&lt;br /&gt;    Dim Areas As DataSet1.AREADataTable&lt;br /&gt;    Areas = AreasAdapter.GetDataByEsActivaArea(1)&lt;br /&gt;    Return Areas&lt;br /&gt;End Function&lt;/p&gt;&lt;p&gt;----------------------------------------------------------------&lt;/p&gt;&lt;p&gt;Recuperar de web.config&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Forma 1:My.Settings.Item("ConnectionStringCaja")&lt;br /&gt;Forma 2:My.Settings.strSQLServer&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;-----------------------------------------------------------&lt;br /&gt;Accesar a una celda de un GridView&lt;br /&gt;&lt;strong&gt;DataGridView1.Rows(0).Cells(0).Value = DateTime.Now 'Colocar el valor. &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;DataGridView1.Rows(0).Cells(0).Style.Format = "d"&lt;br /&gt;MessageBox.Show(DataGridView1.Rows(0).Cells(2).Value)&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Recuperar el valor de la celda seleccionada en el GridView por ejemplo al evento&lt;br /&gt;SelectedIndexChanged.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;sValor = &lt;strong&gt;Me.GridView1.Rows(Me.GridView1.SelectedIndex).Cells.Item(0).Text&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;------------------------------------------------------------&lt;/p&gt;&lt;p&gt;Condición necesaria para manejar el doble postback de un&lt;br /&gt;ButtonField del tipo image en un GridView. Por ejemplo al evento RowDeleting&lt;/p&gt;&lt;p&gt;Protected Sub GridView1_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView1.RowDeleting&lt;/p&gt;&lt;p&gt;&lt;strong&gt;If (Me.Request("x") Is Nothing) AndAlso (Me.Request("y") Is Nothing) Then&lt;br /&gt;&lt;/strong&gt;objArea = New AreaBLL&lt;br /&gt;objArea.DeleteArea(Me.GridView1.Rows(e.RowIndex).Cells.Item(0).Text)&lt;br /&gt;Else&lt;br /&gt;Me.GridView1.DataSource = objArea.ObtenerAreas()&lt;br /&gt;Me.GridView1.DataBind()&lt;br /&gt;End If&lt;br /&gt;End Sub&lt;/p&gt;&lt;p&gt;--------------------------------------------------------------------------------------------&lt;/p&gt;&lt;p&gt;Implementar el pagineo en el GridView&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.&lt;strong&gt;PageIndexChanging&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;'Asignar el nuevo índice d página solicitado.&lt;br /&gt;&lt;strong&gt;Me.GridView1.PageIndex = e.NewPageIndex&lt;/strong&gt;&lt;br /&gt;Me.GridView1.DataSource = objArea.ObtenerAreas()&lt;br /&gt;Me.GridView1.DataBind()&lt;/p&gt;&lt;p&gt;&lt;br /&gt;End Sub&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-8231212869147485545?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/8231212869147485545/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=8231212869147485545' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/8231212869147485545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/8231212869147485545'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2007/03/utiles-net-20.html' title='Utiles NET 2.0'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-4337196483250533294</id><published>2007-03-22T19:31:00.000-06:00</published><updated>2007-03-22T19:48:02.488-06:00</updated><title type='text'>Utiles SQL Server</title><content type='html'>&lt;p&gt;Registros que están en A, pero no  en B &lt;/p&gt;&lt;p&gt;&lt;strong&gt;SELECT     NombreEmp  FROM    EMPLEADO   WHERE   (IdEmpleado NOT IN   (SELECT     IdEmpleado  FROM    EMPLEADO_AREA))&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;---------------------------------------------------------------------------------------&lt;/p&gt;&lt;p&gt;Obtener registros duplicados&lt;/p&gt;&lt;p&gt;&lt;strong&gt;select au_lname  count(*) from dup_authors group by au_lname having count(*) &gt; 1&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;----------------------------------------------------------------------------------------&lt;/p&gt;&lt;p&gt;Consulta con apostrofe&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Select ApPat From EmpleadoWhere ApPat = 'O''Rally'&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;-----------------------------------------------------------------------------------------&lt;/p&gt;Obtener sólo la fecha de un DateTime&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;SELECT     CONVERT(CHAR(10), FechaAltaCustodia, 103) AS SoloFecha FROM         FOLIO_CUSTODIA&lt;/strong&gt;&lt;br /&gt;------------------------------------------------------------------------------------------&lt;br /&gt;Convert con redondeo&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Select Convert(numeric(3,0), 987.654)--Salida 988&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;------------------------------------------------------------------------------------------&lt;br /&gt;Case&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;SELECT   Nombre, &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;EsActivo= CASE  &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt; WHEN  EsActivo= 0 THEN 'No'    &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt; WHEN  EsActivo= 1 THEN 'Si'    &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt; END&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;FROM  Tabla1&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;------------------------------------------------------------------------------------------&lt;br /&gt;Uso de Exist&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;IF EXISTS(SELECT * FROM authors  WHERE au_fname = 'Elmer') &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;                PRINT "Existen los datos"&lt;br /&gt;ELSE                       &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;               RAISERROR('No existen los datos')&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;------------------------------------------------------------------------------------------&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-4337196483250533294?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/4337196483250533294/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=4337196483250533294' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/4337196483250533294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/4337196483250533294'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2007/03/utiles-sql-server.html' title='Utiles SQL Server'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-5158186474753059605</id><published>2007-03-22T13:12:00.000-06:00</published><updated>2007-03-22T19:31:25.265-06:00</updated><title type='text'>Utiles VB.NET 1.1</title><content type='html'>VB NET ASP 1.1&lt;br /&gt;Recuperar el valor de una celda de un DataGrid&lt;br /&gt;&lt;br /&gt;En el evento&lt;br /&gt;DataGrid1.SelectedIndexChanged&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;Session("Id") = Me.DataGrid1.SelectedItem.Cells(0).Text&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------------------&lt;br /&gt;VB NET ASP 1.1&lt;br /&gt;Recuperar el total de renglones en un DataGrid&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Session("TotalRenglones") = Me.DataGridMetricasMeta.Items.Count()&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------------------&lt;br /&gt;VB NET ASP 1.1&lt;br /&gt;Obtener el texto del item seleccionado, ya que el dropdownlist no cuenta con una propiedad text directamente.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Me.DropDownListProducto.Items(Me.DropDownListProducto.SelectedIndex).Text&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------------------&lt;br /&gt;VB NET ASP 1.1&lt;br /&gt;&lt;/appsettings&gt;&lt;br /&gt;Recuperar el valor de archivo web.config&lt;br /&gt;&lt;br /&gt;'Extraer la cadena de conexión del archivo web.config en una variable de aplicación.&lt;br /&gt;Application("ServerBD") = &lt;strong&gt;ConfigurationSettings.AppSettings("ServerBD")&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;--------------------------------------------------------------------------------------------&lt;br /&gt;VB NET ASP 1.1&lt;br /&gt;Poner texto en un dropdownlist como si se tratará de una caja de texto.&lt;br /&gt;&lt;br /&gt;&lt;authentication mode="Windows"&gt;&lt;strong&gt;Me.DropDownList1.SelectedItem.Text = "Seleccione un valor"&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------------------&lt;br /&gt;VB NET ASP 1.1&lt;br /&gt;Ocultar columna del DataGrid&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Me.DataGridMetricasMeta.Columns(6).Visible = False&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;--------------------------------------------------------------------------------------------&lt;br /&gt;VB NET ASP 1.1&lt;br /&gt;Encontrar y seleccionar un item basado en un texto en un DropDownList&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;DropDownList1.SelectedValue = DropDownList1.Items.FindByText("Ilumina").Value&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;------------------------------------------------------------------------------------------&lt;/p&gt;&lt;p&gt;Validar existencia de nulo en el resultado de un DataReader&lt;/p&gt;&lt;p&gt;&lt;strong&gt;If IsDBNull(dr("ObsDocto")) then&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;End if&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;------------------------------------------------------------------------------------------&lt;/p&gt;&lt;p&gt;Pasar parametros a un comando&lt;/p&gt;&lt;p&gt;&lt;strong&gt;cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = EmployeeID&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;cmd.Parameters.Add("@Name", SqlDbType.Int).Value = System.DBNull.Value--Valor nulo&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;------------------------------------------------------------------------------------------&lt;/p&gt;&lt;p&gt;Ejecutar una Transacción ADO.NET&lt;/p&gt;&lt;p&gt;cn.Open&lt;/p&gt;&lt;p&gt;Dim &lt;strong&gt;trans&lt;/strong&gt; as SqlTrasaction = &lt;strong&gt;cn.BeginTransaction&lt;/strong&gt;&lt;br /&gt;Dim cmDel as New SqlCommand()&lt;/p&gt;&lt;p&gt;cmDel.Connection = cn&lt;/p&gt;&lt;p&gt;cmDel.Transaction = &lt;strong&gt;trans&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Try &lt;/p&gt;&lt;p&gt;cmDel.CommandText = "Delete TablaDetalle Where Product = 12" &lt;/p&gt;&lt;p&gt;cmDel.ExecuteNonQuery()&lt;/p&gt;&lt;p&gt;&lt;br /&gt;cmDel.CommandText = "Delete TablaEnc Where Product = 12" &lt;/p&gt;&lt;p&gt;cmDel.ExecuteNonQuery()&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;trans.Commit()&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Catch Ex as Exception &lt;/p&gt;&lt;p&gt;&lt;strong&gt;trans.Rollback()&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Finally &lt;/p&gt;&lt;p&gt;cn.Close()&lt;/p&gt;&lt;p&gt;End try&lt;identity impersonate="true"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-5158186474753059605?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/5158186474753059605/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=5158186474753059605' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/5158186474753059605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/5158186474753059605'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2007/03/utiles-vbnet-11.html' title='Utiles VB.NET 1.1'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-5397772378703991978</id><published>2007-02-18T14:11:00.000-06:00</published><updated>2007-02-18T15:03:37.768-06:00</updated><title type='text'>Tipo Nullable</title><content type='html'>Por ejemplo el tipo entero (Integer en VB) no tenia forma de tener un valor nulo. Esto permite guardar valores nulos en la base de datos.&lt;br /&gt;&lt;br /&gt;'Declarar la variable&lt;br /&gt;Dim nul as Nullable(Of Integer)&lt;br /&gt;&lt;br /&gt;'Verificar el valor&lt;br /&gt;If nul.HasValue Then &lt;br /&gt;     'Tiene valor&lt;br /&gt;End if&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-5397772378703991978?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/5397772378703991978/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=5397772378703991978' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/5397772378703991978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/5397772378703991978'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2007/02/tipo-nullable.html' title='Tipo Nullable'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-116828418308251530</id><published>2007-01-08T13:20:00.000-06:00</published><updated>2007-01-08T13:34:12.073-06:00</updated><title type='text'>Utilizar el Patron Singleton con formularios MDI</title><content type='html'>Objetivo: Que desde una aplicación Windows sólo podamos tener una forma hija abierta.&lt;br /&gt;&lt;br /&gt;-------1. En la forma hija&lt;br /&gt;&lt;br /&gt;'Variable global&lt;br /&gt;Private Shared frmInstance As frmReport = Nothing&lt;br /&gt;&lt;br /&gt;'Finalmente crearemos una función shared que será la que finalmente controlara la creación o manejo de la instancia del formulario, logrando obtener solo un formulario 'abierto para este form1.&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;'Función que verifica sola a una instancia del form1&lt;br /&gt;&lt;strong&gt;Public Shared Function Instance() As form1&lt;/strong&gt;&lt;br /&gt;    If frmInstance Is Nothing OrElse frmInstance.IsDisposed = True Then&lt;br /&gt;        frmInstance = New form1&lt;br /&gt;    End If&lt;br /&gt;    frmInstance.BringToFront()&lt;br /&gt;    Return frmInstance&lt;br /&gt;&lt;strong&gt;End Function&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;'2-En la forma padre.&lt;br /&gt;'Ahora en el padre escribiremos el llamado al hijo para crear la instancia, o si ya esta 'creada, entonces pondrá el formulario hijo en frente para que lo podamos ver.&lt;br /&gt;&lt;br /&gt;Dim frmHijo as form1 = &lt;strong&gt;form1.Instance&lt;/strong&gt;&lt;br /&gt;frmHijo.MdiParent = Me&lt;br /&gt;frmHijo.Show&lt;br /&gt;&lt;br /&gt;Referencia: &lt;br /&gt;&lt;a href="http://www.mentores.net/articulos/Percynet_EditorTexto.htm"&gt;href="http://www.mentores.net/articulos/Percynet_EditorTexto.htm"&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-116828418308251530?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/116828418308251530/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=116828418308251530' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116828418308251530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116828418308251530'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2007/01/utilizar-el-patron-singleton-con.html' title='Utilizar el Patron Singleton con formularios MDI'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-116827870368448729</id><published>2007-01-08T11:34:00.000-06:00</published><updated>2007-01-08T13:41:22.846-06:00</updated><title type='text'>El Patrón Singleton</title><content type='html'>Objetivo: Hacer que la instancia de un objeto sea accesible globalmente, y que sea única. Para ello es necesario crear un método en la clase que se desee sólo tener una instancia a la ves.&lt;br /&gt;&lt;br /&gt;Yo por ejemplo hice un objeto mapper el cuál necesitaba que no fuera instanciado más de una vez por la aplicacion que lo usara.&lt;br /&gt;&lt;br /&gt;'---1 La clase Singleton-----------------------------------------------------&lt;br /&gt;&lt;strong&gt;Public Class MapperEmpleado&lt;/strong&gt;&lt;br /&gt;    Private pnombre As String&lt;br /&gt;&lt;br /&gt;    Public Property nombre() As String&lt;br /&gt;        Get&lt;br /&gt;            Return pnombre&lt;br /&gt;        End Get&lt;br /&gt;        Set(ByVal Value As String)&lt;br /&gt;            pnombre = Value&lt;br /&gt;        End Set&lt;br /&gt;    End Property&lt;br /&gt;&lt;br /&gt;    Private Shared mInstance As MapperEmpleado&lt;br /&gt;    Private Shared mMutex As New System.Threading.Mutex()&lt;br /&gt;&lt;br /&gt;    ' Constructor privado para no poder instanciar la clase&lt;br /&gt;    Private Sub New()&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    'Método que verifica la existencia del objeto al querer instanciar.&lt;br /&gt;    &lt;strong&gt;Public Shared Function GetInstance() As MapperEmpleado&lt;/strong&gt;&lt;br /&gt;        mMutex.WaitOne()&lt;br /&gt;        If mInstance Is Nothing Then&lt;br /&gt;            mInstance = New MapperEmpleado()&lt;br /&gt;        End If&lt;br /&gt;        mMutex.ReleaseMutex()&lt;br /&gt;        Return mInstance&lt;br /&gt;   &lt;strong&gt; End Function&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;End Class&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;--2 La aplicación desde que se consume a la clase que implementa el patrón singleton.&lt;br /&gt;&lt;br /&gt;'Para poder instanciar el objeto se usa el método GetInstance ya que el constructor New() es privado.&lt;br /&gt;Dim obj As MapperEmpleado = MapperEmpleado.&lt;strong&gt;GetInstance&lt;/strong&gt;&lt;br /&gt;obj.nombre = "Julio"&lt;br /&gt;Dim obj2 As MapperEmpleado = MapperEmpleado.&lt;strong&gt;GetInstance&lt;/strong&gt;&lt;br /&gt;MessageBox.Show(obj2.nombre)&lt;br /&gt;--El nombre es el mismo porque sólo se permite una clase.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Aquí un link de referencia sobre este patrón:&lt;br /&gt;&lt;a href="http://www.mug.org.ar/Patrones/ArticPatrones/304.aspx"&gt;http://www.mug.org.ar/Patrones/ArticPatrones/304.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://searchvb.techtarget.com/tip/0,289483,sid8_gci921128,00.html"&gt;http://searchvb.techtarget.com/tip/0,289483,sid8_gci921128,00.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-116827870368448729?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/116827870368448729/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=116827870368448729' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116827870368448729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116827870368448729'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2007/01/el-patrn-singleton.html' title='El Patrón Singleton'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-116587688362973260</id><published>2006-12-11T16:27:00.000-06:00</published><updated>2006-12-11T16:57:02.336-06:00</updated><title type='text'>Check box en GridView para procesar renglones seleccionados</title><content type='html'>Recientemente tuve la necesidad de poner un ccheck box en cada una de las filas de un control GridView para que poder seleccionar a un número determinado de ellas y asi poder procesarlas.&lt;br /&gt;&lt;br /&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/x/blogger/2643/2891/400/995312/GridViewConCheck.jpg" border="0" /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://photos1.blogger.com/x/blogger/2643/2891/1600/287771/GridViewConCheck.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;1. Agregar el control check box al GridView como parte de sus columnas:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/x/blogger/2643/2891/1600/847689/columsGridView2.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/x/blogger/2643/2891/400/438167/columsGridView2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. Recorrer a todos los renglones del GridView para identificar cuales están seleccionados.&lt;br /&gt;&lt;br /&gt;'Obtener el total de renglones para saber cunado parar durante la iteración.&lt;br /&gt;Dim intRows As Int16 = Me.GridViewEdoCta.Rows.Count&lt;br /&gt;&lt;br /&gt;For i = 0 To Me.GridViewEdoCta.Rows.Count - 1&lt;br /&gt;'En la posición 13 es en donde se encuentra el control Check.&lt;br /&gt;If &lt;em&gt;&lt;span style="color:#660000;"&gt;CType(Me.GridViewEdoCta.Rows(i).Cells(13).Controls(1), CheckBox).Checked&lt;/span&gt;&lt;/em&gt; Then&lt;br /&gt;CargoxContrato = Me.GridViewEdoCta.Rows(i).Cells(0).Text&lt;br /&gt;End If&lt;br /&gt;Next&lt;br /&gt;&lt;/p&gt;&lt;/asp:boundfield&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-116587688362973260?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/116587688362973260/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=116587688362973260' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116587688362973260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116587688362973260'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/12/check-box-en-gridview-para-procesar.html' title='Check box en GridView para procesar renglones seleccionados'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-116587497346559751</id><published>2006-12-11T16:05:00.000-06:00</published><updated>2006-12-11T16:24:18.100-06:00</updated><title type='text'>Inserciones, Actulizaciones y Borrados masivo de registros</title><content type='html'>En el siguiente ejemplo se expone como hacer Deletes y Updates masivamente con el uso de XML, sólo es necesario pasar el árbol XML al store procedure para leerlo y especificarlo en las intrucciones delete y update. La´página web referencia es:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/316244/es"&gt;http://support.microsoft.com/kb/316244/es&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cadena xml válida que recibe el sp:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/x/blogger/2643/2891/1600/460486/xmlarbol.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/x/blogger/2643/2891/400/760955/xmlarbol.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;CREATE PROCEDURE sps_CancelaCargosXContratoTelXML&lt;br /&gt;@xmlCargosxContrato varchar(8000) AS&lt;br /&gt;&lt;br /&gt;DECLARE @idoc int --xmlDoc&lt;br /&gt;&lt;br /&gt;--Ejecutar el sp que carga en memoria el docuemnto XML.&lt;br /&gt;EXEC sp_xml_preparedocument @idoc output, @xmlCargosxContrato&lt;br /&gt;&lt;br /&gt;--Comienza la transacción&lt;br /&gt;BEGIN TRANSACTION&lt;br /&gt;--Actualizar el Status de los cargos a Cancelado.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UPDATE Tel_CargosxContrato SET Tel_CargosxContrato.Status = 'CANCELADO'FROM OPENXML (@idoc, '/CargosxContrato/Concepto')&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;WITH (CargoUid varchar(11)) Tel_CargosxContratoXML&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;WHERE Tel_CargosxContrato.Uid = Tel_CargosxContratoXML.CargoUid &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;--Verificar si hubo errores saltar al bloque manejador.&lt;br /&gt;&lt;br /&gt;IF @@Error != 0&lt;br /&gt;GOTO ERROR_HANDLER&lt;br /&gt;--Eliminar cargos de la tabla TEL_Cobranza&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Delete Tel_cobranza &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;FROM OPENXML (@idoc, '/CargosxContrato/Concepto') &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;WITH (CargoUid varchar(11)) CobranzaXMLWHERE Tel_Cobranza.Uid = CobranzaXML.CargoUid&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;--Verificar si hubo errores saltar al bloque manejador.&lt;br /&gt;IF @@Error != 0&lt;br /&gt;BEGIN&lt;br /&gt;GOTO ERROR_HANDLE&lt;br /&gt;&lt;br /&gt;--Finalizar la Transacción pues todo salió bien.&lt;br /&gt;COMMIT TRANSACTION&lt;br /&gt;SET NOCOUNT OFF&lt;br /&gt;--Descargar documento XML de la memoria.&lt;br /&gt;EXEC sp_xml_removedocument @idoc&lt;br /&gt;RETURN 0&lt;br /&gt;&lt;br /&gt;--Manejador de Error.&lt;br /&gt;ERROR_HANDLER:&lt;br /&gt;ROLLBACK TRANSACTION--Descargar documento XML de la memoria.EXEC sp_xml_removedocument @idoc&lt;br /&gt;SET NOCOUNT OFF&lt;br /&gt;RETURN 0&lt;br /&gt;GO&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-116587497346559751?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/116587497346559751/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=116587497346559751' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116587497346559751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116587497346559751'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/12/inserciones-actulizaciones-y-borrados.html' title='Inserciones, Actulizaciones y Borrados masivo de registros'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-116587402820124883</id><published>2006-12-11T15:50:00.000-06:00</published><updated>2006-12-11T16:00:35.606-06:00</updated><title type='text'>Ocultar columnas con DataBind en un GridView</title><content type='html'>Es muy comun el poblar un control GridView con datos de una Base de Datos y ocultar columnas que no es recomendable que se muestran a los usuarios, pero en el GridView al poner la propiedad visible= False de una columna a ocultar y luego tratar de recuperar el valor de esta celda el valor es cadena vacía, para que esto no courra se debe implementar el siguiente evento manejado del GridView y aquí poner las columnas que se desea ocultar.&lt;br /&gt;&lt;br /&gt;'Ocultar columnas del GridView que no son necesarias para el usuario en la vista.&lt;br /&gt;&lt;strong&gt;Public Sub myGrid_OnRowCreated(ByVal sender As Object, ByVal e As Web.UI.WebControls.GridViewRowEventArgs) Handles GridViewEdoCta.RowCreated&lt;br /&gt;e.Row.Cells(0).Visible = False 'Uid cobranza&lt;br /&gt;e.Row.Cells(1).Visible = False 'MovimientoUid&lt;br /&gt;End Sub&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;De esta forma si es posible recuperar su valor.&lt;br /&gt;'Recuperar el valor de la celda, aunque este oculta.&lt;br /&gt;Dim strClave as String = Me.GridViewEdoCta.Rows(1).Cells(0).Text&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-116587402820124883?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/116587402820124883/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=116587402820124883' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116587402820124883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116587402820124883'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/12/ocultar-columnas-con-databind-en-un.html' title='Ocultar columnas con DataBind en un GridView'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-116586854355082395</id><published>2006-12-11T14:16:00.002-06:00</published><updated>2006-12-11T15:49:33.810-06:00</updated><title type='text'>Imprimir directamente con ASP.NET</title><content type='html'>&lt;a href="http://photos1.blogger.com/x/blogger/2643/2891/1600/98524/imprimir.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/x/blogger/2643/2891/400/619569/imprimir.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;1. En el evento Load cargo la lista de impresoras disponibles localemente.&lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load&lt;br /&gt;If Not Page.IsPostBack Then&lt;br /&gt;Me.DropDownListImpresoras.DataSource = PrinterSettings.InstalledPrinters()&lt;br /&gt;Me.DropDownListImpresoras.DataBind()&lt;br /&gt;Me.DropDownListImpresoras.SelectedIndex = 0&lt;br /&gt;End If&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;2. Al hacer clic en el botón imprimir&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;Protected Sub ButtonImprimir_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonImprimir.Click&lt;br /&gt;'Create an instance of PrintDocument&lt;br /&gt;Dim printdoc As New System.Drawing.Printing.PrintDocument()&lt;br /&gt;' Set the printer name&lt;br /&gt;printdoc.PrinterSettings.PrinterName = Me.DropDownListImpresoras.Text&lt;br /&gt;' Handle printing&lt;br /&gt;AddHandler printdoc.PrintPage, AddressOf &lt;strong&gt;Me.printdoc_PrintPage&lt;/strong&gt;&lt;br /&gt;' Print!&lt;br /&gt;printdoc.Print()&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;3. Evento manejado al imprimir que es en donde se especifica lo que se desea imprimir.&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Private Sub printdoc_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)&lt;br /&gt;'Definición de la fte a utilizar.&lt;br /&gt;Dim printFont As System.Drawing.Font = New System.Drawing.Font("Courier New", 12)&lt;br /&gt;&lt;br /&gt;' Dibujar el nombre escrito y que se desea imprimir directamente.&lt;br /&gt;e.Graphics.DrawString(Me.TextBox1.Text, printFont, System.Drawing.Brushes.Black, New System.Drawing.PointF(10.0F, 50.0F))&lt;br /&gt;End Sub&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-116586854355082395?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/116586854355082395/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=116586854355082395' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116586854355082395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116586854355082395'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/12/imprimir-directamente-con-aspnet_11.html' title='Imprimir directamente con ASP.NET'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-116301278575964699</id><published>2006-11-08T13:03:00.000-06:00</published><updated>2006-11-08T13:08:20.606-06:00</updated><title type='text'>Script para Activar/Desactivar Constraints en SQL Server</title><content type='html'>Muchas veces es necesario deshabilitar la integridad referencial o ciertos constraints establecidos en una base de datos SQL Server y este script que encontré en "http://www.melkorcete.com/index.php?c=17" es muy útil para llevar acabo esta tarea.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;Script para Activar y Desactivar todos los constraints de una&lt;br /&gt;Base de Datos (CK, FK, PK, DK).&lt;br /&gt;&lt;br /&gt;Sólo se especiifca 1 para activar o 0 para desactivar a la variable @p_activar&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;USE Facturacion&lt;br /&gt;&lt;br /&gt;DECLARE @p_activar BIT&lt;br /&gt;SET @p_activar = 1 --Para Activar = 1, Desactivar = 0&lt;br /&gt;&lt;br /&gt;Declare @v_retorno int&lt;br /&gt;&lt;br /&gt;Begin&lt;br /&gt; Set NoCount Off&lt;br /&gt;&lt;br /&gt; -- Almacena la Orden &lt;br /&gt; declare @orden varchar(100)&lt;br /&gt; -- Almacena la Tabla&lt;br /&gt; declare @tabla varchar(100)&lt;br /&gt; -- Almacena el numero de Operacion Realizada&lt;br /&gt; declare @contador int&lt;br /&gt; -- Variables para mensaje&lt;br /&gt; declare @no varchar(2)&lt;br /&gt; declare @des varchar(4)&lt;br /&gt;&lt;br /&gt; -- Para la construccion de mensajes se da un valor&lt;br /&gt; -- dependiendo del parametro @p_activar&lt;br /&gt; if @p_activar = 1&lt;br /&gt;  begin&lt;br /&gt;   set @no = null&lt;br /&gt;   set @des = 'A'&lt;br /&gt;  end&lt;br /&gt; else &lt;br /&gt;  begin&lt;br /&gt;   set @no = 'NO'&lt;br /&gt;   set @des = 'Desa'&lt;br /&gt;  end&lt;br /&gt; &lt;br /&gt; -- Cursor para recorrer una a una las Constraints  &lt;br /&gt; declare CURSORITO cursor for&lt;br /&gt;  SELECT 'ALTER TABLE ' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) + ' ' + IsNull(@no,'') + 'CHECK CONSTRAINT ALL',TABLE_NAME&lt;br /&gt;  FROM INFORMATION_SCHEMA.TABLES&lt;br /&gt;  WHERE&lt;br /&gt;  OBJECTPROPERTY(OBJECT_ID(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)), 'IsMSShipped') = 0&lt;br /&gt;  AND TABLE_TYPE = 'BASE TABLE'&lt;br /&gt;&lt;br /&gt; -- Inicializacion de Variables&lt;br /&gt; set @orden = ''&lt;br /&gt; set @tabla = ''&lt;br /&gt; set @contador = 0&lt;br /&gt;&lt;br /&gt; -- Mensaje de entrada&lt;br /&gt; print ' '&lt;br /&gt; print '####################################################'&lt;br /&gt;&lt;br /&gt; if @no = 'NO'&lt;br /&gt;  print '###          DESACTIVADO DE CONSTRAINTS          ###'&lt;br /&gt; else&lt;br /&gt;  print '###            ACTIVADO DE CONSTRAINTS           ###'&lt;br /&gt;&lt;br /&gt; print '####################################################'&lt;br /&gt; print '### '&lt;br /&gt; &lt;br /&gt; -- Iniciamos el Cursor y lo recorremos&lt;br /&gt; OPEN CURSORITO&lt;br /&gt; fetch next from CURSORITO&lt;br /&gt; into @orden,@tabla&lt;br /&gt; while @@fetch_status = 0&lt;br /&gt; begin&lt;br /&gt;  -- Contador ++&lt;br /&gt;  set @contador = @contador + 1&lt;br /&gt;  -- Ejecutamos la Orden&lt;br /&gt;  exec(@orden)&lt;br /&gt;  -- Crear mensaje de salida&lt;br /&gt;  print '### ' + convert(varchar,@contador) + ' - ' + convert(varchar,@des) + 'ctivado de ' + convert(varchar,@tabla) + ' completado.' &lt;br /&gt;  -- Siguiente Vuelta&lt;br /&gt;  fetch next from CURSORITO into @orden, @tabla&lt;br /&gt; end&lt;br /&gt; -- cerramos el cursor&lt;br /&gt; close CURSORITO&lt;br /&gt; deallocate CURSORITO&lt;br /&gt;&lt;br /&gt; -- Mensaje de Fin &lt;br /&gt; print '### '&lt;br /&gt; print '####################################################'&lt;br /&gt;&lt;br /&gt; if @@error = 0&lt;br /&gt;  print '###           FINALIZADO CORRECTAMENTE           ###'&lt;br /&gt; else&lt;br /&gt;  print '###            FINALIZADO CON ERRORES            ###'&lt;br /&gt;&lt;br /&gt; print '####################################################'&lt;br /&gt;    &lt;br /&gt; Select @v_retorno = @@error&lt;br /&gt;End&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-116301278575964699?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/116301278575964699/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=116301278575964699' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116301278575964699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116301278575964699'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/11/script-para-activardesactivar.html' title='Script para Activar/Desactivar Constraints en SQL Server'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-116199006316873860</id><published>2006-10-27T17:59:00.000-05:00</published><updated>2006-10-27T18:25:15.006-05:00</updated><title type='text'>Explorador de clases de .NET Framework</title><content type='html'>&lt;a href="http://es.gotdotnet.com/quickstart/aspplus/samples/classbrowser/vb/classbrowser.aspx"&gt;&lt;br /&gt;http://es.gotdotnet.com/quickstart/aspplus/samples/classbrowser/vb/classbrowser.aspx&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-116199006316873860?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/116199006316873860/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=116199006316873860' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116199006316873860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116199006316873860'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/10/explorador-de-clases-de-net-framework.html' title='Explorador de clases de .NET Framework'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-116102857224634929</id><published>2006-10-16T14:53:00.000-05:00</published><updated>2006-10-16T14:57:18.880-05:00</updated><title type='text'>Un control Web ASP. net que expone un dialogo de espera</title><content type='html'>Este en un control asp net que funciona para la versión 1.1 y 2 y que es muy útil para mostrar al usuario cuando éste debe esperar a que se procese la página.&lt;br /&gt;&lt;br /&gt;El link es:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://busyboxdotnet.qsh.eu/"&gt;&lt;br /&gt;http://busyboxdotnet.qsh.eu/&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Revisen el demo. Considero que es un control free muy útil.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-116102857224634929?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/116102857224634929/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=116102857224634929' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116102857224634929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116102857224634929'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/10/un-control-web-asp-net-que-expone-un.html' title='Un control Web ASP. net que expone un dialogo de espera'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-116080339930354303</id><published>2006-10-14T00:21:00.000-05:00</published><updated>2006-10-14T00:25:58.210-05:00</updated><title type='text'>Server.Transfer o Response.Redirect, para enviar a los usuarios a otra página?</title><content type='html'>En un blog encontré la post y que se encuentra en el siguiente link:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.3devnet.com/blogs/starrillo/archive/2006/09/30/1074.aspx"&gt;&lt;br /&gt;http://blogs.3devnet.com/blogs/starrillo/archive/2006/09/30/1074.aspx&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-116080339930354303?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/116080339930354303/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=116080339930354303' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116080339930354303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116080339930354303'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/10/servertransfer-o-responseredirect-para.html' title='Server.Transfer o Response.Redirect, para enviar a los usuarios a otra página?'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-116078649686966350</id><published>2006-10-13T19:38:00.000-05:00</published><updated>2006-10-14T00:25:23.956-05:00</updated><title type='text'>Encriptado de información del ViewState ASP 2.0</title><content type='html'>Para reducir el riesgo que alguien intercepte la información almacenada en el ViewState, es posible cifrar dicha información.&lt;br /&gt;&lt;br /&gt;Los valores aceptados de la propiedad ViewStateEncryptionMode son:&lt;br /&gt;&lt;br /&gt;Always: La información del ViewState siempre es encriptada. Si la aplicación maneja información sensible de manera constante seria conveniente utilizar este valor. &lt;br /&gt;&lt;br /&gt;Auto: La información es encriptada si un control lo solicita. Este es el valor por defecto de la propiedad. &lt;br /&gt;&lt;br /&gt;Never: La información nunca es encriptada, aún si un control lo solicita. Úselo bajo su propia responsabilidad...&lt;br /&gt;&lt;br /&gt;Para establecer el valor a nivel de aplicación empleamos el atributo ViewStateEncryptionMode de la sección pages en el web.config:&lt;br /&gt;&lt;br /&gt; &lt;strong&gt;pages viewStateEncryptionMode="Always"&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;O bien por medio del atributo homónimo de la directiva @Page, para establecer el valor en una página en particular:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;@Page ViewStateEncryptionMode="Always" &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;También se puede establecer el valor de manera dinámica a través de la propiedad ViewStateEncryptionMode del objeto Page:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Page.ViewStateEncryptionMode = ViewStateEncryptionMode.Auto&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Así pues, utilizando el valor por defecto (Auto) de la propiedad ViewStateEncryptionMode, si se requiere que la información del ViewState sea encriptada, se debe llamar al método RegisterRequiresViewStateEncryption del objeto Page:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;If (&lt;condición&gt;) Then&lt;br /&gt;    Page.RegisterRequiresViewStateEncryption()&lt;br /&gt;End If&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-116078649686966350?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/116078649686966350/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=116078649686966350' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116078649686966350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116078649686966350'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/10/encriptado-de-informacin-del-viewstate.html' title='Encriptado de información del ViewState ASP 2.0'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-116078076539152908</id><published>2006-10-13T18:02:00.000-05:00</published><updated>2006-10-13T19:43:45.443-05:00</updated><title type='text'>Formatear (Identación) las instrucciones SQL</title><content type='html'>Navegando por Internet encontré este formateador de instrucciones SQL en línea, me gusto mucho pues resulta muy útil para cuando hacemos scripts, stores procedures o disparadores.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Este es el link de referencia:&lt;br /&gt;&lt;a href="http://www.wangz.net/cgi-bin/pp/gsqlparser/sqlpp/sqlformat.tpl"&gt;&lt;br /&gt;http://www.wangz.net/cgi-bin/pp/gsqlparser/sqlpp/sqlformat.tpl&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-116078076539152908?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/116078076539152908/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=116078076539152908' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116078076539152908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116078076539152908'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/10/formatear-identacin-las-instrucciones.html' title='Formatear (Identación) las instrucciones SQL'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-116006294187809616</id><published>2006-10-05T10:36:00.000-05:00</published><updated>2006-10-05T10:58:47.690-05:00</updated><title type='text'>EXISTS vs. COUNT(*)  en SQL Server</title><content type='html'>Es muy común que querramos saber la existencia de datos en determinada tabla de una base de datos y para ello utilizamos EXISTS o COUNT(*), pero qué es más eficiente?&lt;br /&gt;&lt;br /&gt;Pues en un artículo que muestra como es más eficiente utilizar EXISTS.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;IF EXISTS(SELECT * FROM OrderDetails&lt;br /&gt;WHERE orderid = 10248)&lt;br /&gt;    PRINT 'yes'&lt;br /&gt;ELSE&lt;br /&gt;   PRINT 'no'&lt;br /&gt;&lt;br /&gt;Este es el link de referencia:&lt;br /&gt;&lt;a href="http://www.sqlmag.com/Article/ArticleID/38039/sql_server_38039.html"&gt;&lt;br /&gt;http://www.sqlmag.com/Article/ArticleID/38039/sql_server_38039.html&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-116006294187809616?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/116006294187809616/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=116006294187809616' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116006294187809616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116006294187809616'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/10/exists-vs-count-en-sql-server.html' title='EXISTS vs. COUNT(*)  en SQL Server'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-116006199832144341</id><published>2006-10-05T10:25:00.000-05:00</published><updated>2006-10-05T10:45:41.406-05:00</updated><title type='text'>Manual de Diseño e Implementación de Base de Datos</title><content type='html'>Este es el link al manual en línea:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sqlmax.com/centro/programa.asp"&gt;&lt;br /&gt;http://www.sqlmax.com/centro/programa.asp&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-116006199832144341?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/116006199832144341/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=116006199832144341' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116006199832144341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116006199832144341'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/10/manual-de-diseo-e-implementacin-de.html' title='Manual de Diseño e Implementación de Base de Datos'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-116006092880585166</id><published>2006-10-05T10:04:00.000-05:00</published><updated>2006-10-05T10:08:49.490-05:00</updated><title type='text'>Cargar DataTable con DataReader NET 2005</title><content type='html'>Ahora en VB.NET 2005 el objeto DataTable puede cargarse via IDataReader (por ejemplo un SqlDataReader) sin necesidad de un objeto SQLDataAdapter. El DataTable tiene un método Load que acepta como argumento un obj que implemente IDataReader.&lt;br /&gt;&lt;br /&gt;El siguiente ejemplo pobla un DataView con un DataTable que a su vez es poblado con un SQLDataReader.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;----------------Código Fte----------------------------------------------&lt;br /&gt;Imports System.Data.SqlClient&lt;br /&gt;&lt;br /&gt;Public Class Form1&lt;br /&gt;&lt;br /&gt;    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click&lt;br /&gt;&lt;br /&gt;        Me.DataGridView1.DataSource = llenaDataTableConRS()&lt;br /&gt;&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    'Función que ejecuta el reader y carga los resultados en una DataTable.&lt;br /&gt;    Private Function llenaDataTableConRS() As DataTable&lt;br /&gt;        Dim con As New SqlConnection(strConn)&lt;br /&gt;&lt;br /&gt;        Dim datatable1 As New DataTable&lt;br /&gt;        Dim dr As SqlDataReader&lt;br /&gt;        Try&lt;br /&gt;            Dim cmd As New SqlCommand("Select * From Employees", con)&lt;br /&gt;            con.Open()&lt;br /&gt;            dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)&lt;br /&gt;            'Aqui es donde se carga el Recordset al DataTable.&lt;br /&gt;            datatable1.Load(dr)&lt;br /&gt;&lt;br /&gt;        Catch ex As Exception&lt;br /&gt;            MessageBox.Show(ex.Message)&lt;br /&gt;        Finally&lt;br /&gt;            con.Close()&lt;br /&gt;        End Try&lt;br /&gt;&lt;br /&gt;        Return datatable1&lt;br /&gt;    End Function&lt;br /&gt;End Class&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-116006092880585166?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/116006092880585166/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=116006092880585166' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116006092880585166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116006092880585166'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/10/cargar-datatable-con-datareader-net.html' title='Cargar DataTable con DataReader NET 2005'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-116006030642559179</id><published>2006-10-05T09:56:00.000-05:00</published><updated>2006-10-05T09:58:26.426-05:00</updated><title type='text'>Guardar la hora como un entero en SQL Server.</title><content type='html'>Una opción de guardar la hora es como un valor entero, por ejemplo si son las 11:20 entonces el valor sería guardado como 1120. Sólo es necesario multiplicar por 100.&lt;br /&gt;&lt;br /&gt;En el ejemplo se crea una tabla temporal.&lt;br /&gt;Se le agrega un registos con la hora como un entero.&lt;br /&gt;Se consulta el valor guardado.&lt;br /&gt;Se borra la tabla temporal.&lt;br /&gt;&lt;br /&gt;--Creación de tabla termporal.&lt;br /&gt;SET NOCOUNT ON &lt;br /&gt;CREATE TABLE #foo &lt;br /&gt;( &lt;br /&gt;    tm SMALLINT &lt;br /&gt;) &lt;br /&gt;go&lt;br /&gt;&lt;br /&gt;--Insertar la hora y minutos actuales del equipo&lt;br /&gt;INSERT #foo VALUES &lt;br /&gt;( &lt;br /&gt;    -- e.g. 1527 = 3:27 PM / 15:27 &lt;br /&gt;    100 * DATEPART(HOUR, GETDATE()) &lt;br /&gt;    + DATEPART(MINUTE,GETDATE()) &lt;br /&gt;) &lt;br /&gt;&lt;br /&gt;go&lt;br /&gt;&lt;br /&gt;--Imprimir la hora y minutos guardados&lt;br /&gt;SELECT tm FROM #foo&lt;br /&gt;go&lt;br /&gt; &lt;br /&gt;--Borrar la tabla temporal&lt;br /&gt;DROP TABLE #foo&lt;br /&gt;go&lt;br /&gt;----------------------------------------------------&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-116006030642559179?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/116006030642559179/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=116006030642559179' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116006030642559179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116006030642559179'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/10/guardar-la-hora-como-un-entero-en-sql.html' title='Guardar la hora como un entero en SQL Server.'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-116006010349189417</id><published>2006-10-05T09:45:00.000-05:00</published><updated>2006-10-05T09:55:03.493-05:00</updated><title type='text'>Verifica si existe tabla en una BD en SQL Server</title><content type='html'>--Verifica si existe una tabla temporal.&lt;br /&gt;IF OBJECT_ID('tempdb..#AnyTable') IS NOT NULL &lt;br /&gt;  PRINT 'EXISTE'&lt;br /&gt;ELSE&lt;br /&gt;  PRINT 'NO EXISTE'&lt;br /&gt;go&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--Verifica si existe tabla en determinda Base de datos.&lt;br /&gt;IF OBJECT_ID('Northwind..Categories') IS NOT NULL &lt;br /&gt;  PRINT 'EXISTE'&lt;br /&gt;ELSE&lt;br /&gt;  PRINT 'NO EXISTE'&lt;br /&gt;go&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-116006010349189417?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/116006010349189417/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=116006010349189417' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116006010349189417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116006010349189417'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/10/verifica-si-existe-tabla-en-una-bd-en.html' title='Verifica si existe tabla en una BD en SQL Server'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-116005938034472009</id><published>2006-10-05T09:39:00.000-05:00</published><updated>2006-10-05T09:45:05.343-05:00</updated><title type='text'>Función SQL Server verifica existe columna en tabla</title><content type='html'>--------------------Código de la Función-----------------------------&lt;br /&gt;CREATE FUNCTION ColumnAlreadyExists(@TableName NVARCHAR(128),@ColumnName NVARCHAR(128)) &lt;br /&gt;RETURNS INTEGER--Returns 0 if column does not exist. Returns 1 if column exists.&lt;br /&gt;AS&lt;br /&gt;BEGIN &lt;br /&gt;--See if the Table already contains the column.&lt;br /&gt;IF EXISTS&lt;br /&gt;(SELECT * FROM SysObjects O INNER JOIN SysColumns C ON O.ID=C.ID&lt;br /&gt;WHERE ObjectProperty(O.ID,'IsUserTable')=1 &lt;br /&gt;AND O.Name=@TableName&lt;br /&gt;AND C.Name=@ColumnName) &lt;br /&gt;RETURN 1&lt;br /&gt;--Table does not contain the column.&lt;br /&gt;RETURN 0&lt;br /&gt;END&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;----------------------Usar la función-------------------------IF .dbo.ColumnAlreadyExists('CLIENTE','IdCte')=1 &lt;br /&gt; print 'Existe la columna IdCte en la tabla.'&lt;br /&gt;Else&lt;br /&gt; print 'No existe la columna IdCte en la tabla.'&lt;br /&gt;--------------------------------------------------------------&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-116005938034472009?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/116005938034472009/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=116005938034472009' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116005938034472009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/116005938034472009'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/10/funcin-sql-server-verifica-existe.html' title='Función SQL Server verifica existe columna en tabla'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-115474049150481827</id><published>2006-08-04T20:06:00.000-05:00</published><updated>2006-10-05T10:44:21.566-05:00</updated><title type='text'>MARS (Multiple Active Result Sets)</title><content type='html'>Sobre algo de lo nuevo en NET 2.0 y SQL Server 2005 está el concepto llamado: Multiple Active Result Sets  y que la idea es poder trabajar con la misma conexión para dar realizar más de una operación en la base de datos, por  ejemplo leer un conjunto de resultados de un datareader y que para cada registro obtenido hacer un insert. Para realizar está operación con SQL Server 2000 es necesario utilizar dos objetos conexión, pero ahora con MARS (Multiple Active Result Sets es posible realizar esto con una sóla conexión, sólo es necesario especificar esta funcionalidad en la cadena de conexión.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;connectionString = "Data Source=(local);Integrated Security=SSPI;" &amp; _&lt;br /&gt;"Initial Catalog=AdventureWorks; &lt;strong&gt;MultipleActiveResultSets=True&lt;/strong&gt;"&lt;br /&gt;&lt;br /&gt;Using awConnection As New SqlConnection(connectionString)&lt;br /&gt;&lt;br /&gt;Este es un link con más información al respecto:&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/yf1a7f4f.aspx"&gt;&lt;br /&gt;http://msdn2.microsoft.com/en-us/library/yf1a7f4f.aspx&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-115474049150481827?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/115474049150481827/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=115474049150481827' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/115474049150481827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/115474049150481827'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/08/mars-multiple-active-result-sets.html' title='MARS (Multiple Active Result Sets)'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-115473972729026611</id><published>2006-08-04T19:52:00.000-05:00</published><updated>2006-08-04T20:17:20.293-05:00</updated><title type='text'>Tipo Nullables en net 2.0</title><content type='html'>Hace unos días mi amigo Orlando hizo un procedimiento en visual basic net que leía un datareader, extraía los valores y éstos los pasaba a una función que los recibía para hacer un insert. Él me preguntaba como podia pasar un valor nulo como parámetro a una función y yo le conteste que eso no era posible porque lo que lo que él estaba pasando eran valores a variables escalares y no objetos. &lt;br /&gt;&lt;br /&gt;Él necesitaba pasar un valor nulo a su función cuando el datareader que el leía contenía un nulo. Al dia siguiente encontré el concepto de valores nulables soportados por el framework 2.0 y esta es la forma en que se pueden utilizar.&lt;br /&gt;&lt;br /&gt;'Asignar un valor nulo al tipo escalar&lt;br /&gt;Dim booleanoNulo as &lt;strong&gt;Nullable(Of Boolean)&lt;/strong&gt; = Nothing&lt;br /&gt;Dim IntegerNulo As &lt;strong&gt;Nullable(Of Integer)&lt;/strong&gt; = 34&lt;br /&gt;'Llamar al método.&lt;br /&gt;valor(booleanoNulo , IntegerNulo )&lt;br /&gt;&lt;br /&gt;'Se puede usar la propiedad HasValue de los tipos nullables para preguntar si la variable tiene o no un valor asignado. A continuación se muestra una función que recibe tipos de datos escalares con valores nulos.&lt;br /&gt;&lt;br /&gt;Private Sub valor(ByVal booleanoNulo As Nullable(Of Boolean), ByVal IntegerNulo As Nullable(Of Integer))&lt;br /&gt;&lt;br /&gt;If booleanoNulo.HasValue() Then&lt;br /&gt;     'Asignar Valor.&lt;br /&gt;    MessageBox.Show(booleanoNulo.Value)&lt;br /&gt;Else&lt;br /&gt;     MessageBox.Show("No existe valor x asignar entonces insertar   System.DbNull.Value.")&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;End sub&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-115473972729026611?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/115473972729026611/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=115473972729026611' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/115473972729026611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/115473972729026611'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/08/tipo-nullables-en-net-20.html' title='Tipo Nullables en net 2.0'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-115473881834314732</id><published>2006-08-04T19:42:00.000-05:00</published><updated>2006-08-04T19:46:58.363-05:00</updated><title type='text'>Obtener fecha y hora de un datetime en SQL Server</title><content type='html'>Muchas veces es neesario extraer sólo la fecha u hora a un valor correspondiente a un tipo Datetime en SQL Server.&lt;br /&gt;&lt;br /&gt;Aquí están algunas de las formas de obtenerlo:&lt;br /&gt;&lt;br /&gt;SELECT     CONVERT(CHAR(10), FechaAlta, 103) AS SoloFecha&lt;br /&gt;FROM       Tabla&lt;br /&gt;--103 es el formato corto de dd/mm/aaaa&lt;br /&gt;&lt;br /&gt;SELECT dateonly = CONVERT(CHAR(8),FechaHora1,112) FROM TABLA1&lt;br /&gt;SELECT timeonly = CONVERT(CHAR(8),FechaHora1,8) FROM TABLA1&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-115473881834314732?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/115473881834314732/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=115473881834314732' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/115473881834314732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/115473881834314732'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/08/obtener-fecha-y-hora-de-un-datetime-en.html' title='Obtener fecha y hora de un datetime en SQL Server'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114962199968463907</id><published>2006-06-06T14:17:00.000-05:00</published><updated>2006-08-09T20:01:27.266-05:00</updated><title type='text'>Conocer la disponibilidad de acceso a la red con NET 2.0</title><content type='html'>Algo que recientemente leí sobre lo nuevo en el espacio nombres en NET 2.0 fue una clase que nos permite detectar si el acceso a la red está disponible. A mi gusto mucho porque anteriormente yo conocía esto hasta que atrapaba la excepción hasta el momento en que se realizaba una operación con el manejador de base de datos en red. Existen dos formas y cualquiera de ellas regresa un valor boleano.&lt;br /&gt;&lt;br /&gt;--Forma 2&lt;br /&gt;MessageBox.Show("Está disponible la conexión: " &amp; System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable())&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--Forma 1&lt;br /&gt;MessageBox.Show("Está disponible la conexión: " &amp; My.Computer.Network.IsAvailable)&lt;br /&gt;&lt;br /&gt;Otra funcionalidad  nueva es poder hacer un ping:&lt;br /&gt;&lt;br /&gt;My.Computer.Network.Ping("Server")&lt;br /&gt;En donde "Server" puede ser el nombre del servidor o su IP&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114962199968463907?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114962199968463907/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114962199968463907' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114962199968463907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114962199968463907'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/06/conocer-la-disponibilidad-de-acceso-la.html' title='Conocer la disponibilidad de acceso a la red con NET 2.0'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114927872326347971</id><published>2006-06-02T14:56:00.000-05:00</published><updated>2006-06-02T15:05:23.340-05:00</updated><title type='text'>Cómo ven al otros los usuarios y los desarrolladores.</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/2643/2891/1600/UsuariosVsDesarrolladores.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2643/2891/400/UsuariosVsDesarrolladores.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114927872326347971?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114927872326347971/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114927872326347971' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114927872326347971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114927872326347971'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/06/cmo-ven-al-otros-los-usuarios-y-los.html' title='Cómo ven al otros los usuarios y los desarrolladores.'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114895267801116881</id><published>2006-05-29T20:09:00.000-05:00</published><updated>2006-05-29T20:33:33.926-05:00</updated><title type='text'>Los cuatro puntos de la cardinalidad de la relación durante el diseño de la BD.</title><content type='html'>Hay una restricción importante que se declara gráficamente en las relaciones  en el diagrama Entidad-Relación  y se llama la cardinalidad, la cual representa qué tantos de una cosa se relacionan con otra. La cardinalidad de la relación es particularmente importante debido a que forma la base de muchas decisiones de diseño. La cardinalidad se expresa con un valor para un mínimo y para un máximo. El valor mínimo describe si la relación es opcional o requerida. El valor máximo describe si la relación es singular o plural. Debido a que las relaciones se indican en ambas direcciones entre las dos entidades, la cardinalidad mínima y máxima también debe ser indicada en ambas direcciones. Esto significa que para cada relación del modelo se requieren cuatro puntos de cardinalidad para expresar adecuadamente la naturaleza de la relación (mínimo y máximo en ambas direcciones).&lt;br /&gt;&lt;br /&gt;A continuación veremos mediante un ejemplo el uso de las cuatro preguntas de la cardinalidad de la relación. Vamos a suponer que estamos elaborando una aplicación de facturación, para lo cuál vamos tomar las entidades de este modelo. Decimos  que un Cliente compra Productos, entonces existe una relación entre ambas entidades.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/2643/2891/1600/Fact1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2643/2891/320/Fact1.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ahora identificamos la cardinalidad de la relación, para ello nos plantemos las siguientes cuatro preguntas –preguntas de la cardinalidad de la relación-&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1.&lt;/strong&gt; Debe un &lt;strong&gt;CLIENTE &lt;/strong&gt;comprar un &lt;strong&gt;PRODUCTO&lt;/strong&gt;? &lt;strong&gt;No&lt;/strong&gt;. Para ser cliente efectivamente alguna vez nos compró, pero después no, así que ya es CLIENTE, pero no necesariamente debe comprarnos productos, después de la primera vez.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2.&lt;/strong&gt; Puede un &lt;strong&gt;CLIENTE &lt;/strong&gt;comprarnos más de un &lt;strong&gt;PRODUCTO&lt;/strong&gt;? &lt;strong&gt;Si&lt;/strong&gt;. Esto depende de la naturaleza de operación de la organización, pero lo común es que al levantar un pedido a un CLIENTE este puede solicitarnos a más de un PRODUCTO.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;3.&lt;/strong&gt; Debe un &lt;strong&gt;PRODUCTO &lt;/strong&gt;ser comprador por un &lt;strong&gt;CLIENTE&lt;/strong&gt;? &lt;strong&gt;No&lt;/strong&gt;. Porque no podemos forzar a que un PRODUCTO sea comprador por un CLIENTE.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;4.&lt;/strong&gt; Puede un &lt;strong&gt;PRODUCTO &lt;/strong&gt;ser comprador por más de un &lt;strong&gt;CLIENTE&lt;/strong&gt;?  &lt;strong&gt;Si&lt;/strong&gt;. Esto es viendo desde el concepto de PRODUCTO y no como una pieza fisica.&lt;br /&gt;&lt;br /&gt;Podemos observar que las dos primeras preguntas van enfocadas del CLIENTE al PRODUCTO y las otras dos preguntas del PRODUCTO al CLIENTE. &lt;br /&gt;&lt;br /&gt;La pregunta 1 está diseñada para obtener la cardinalidad mínima.&lt;br /&gt;La pregunta 2 está diseñada para determinar si la misma instancia de la entidad A puede participar en relaciones con varias instancias de la entidad B al mismo tiempo.&lt;br /&gt;&lt;br /&gt;Cuando quedan determinadas las  respuestas a las preguntas 1 y 2, el analista puede poner la cardinalidad mínima y máxima en el diagrama para expresar las reglas de negocio. La notación de la cardinalidad mínima es un cero que significa &lt;strong&gt;opcional&lt;/strong&gt;, o un uno que significa &lt;strong&gt;requerida&lt;/strong&gt;. La notación para la cardinalidad máxima es un uno, que significa &lt;strong&gt;solamente uno &lt;/strong&gt;o un par de patas de gallo significa &lt;strong&gt;muchos&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/2643/2891/1600/Fact2.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2643/2891/320/Fact2.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;La cardinalidad mínima y máxima debe ser expresada en ambas direcciones para definir adecuadamente la regla de negocio.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/2643/2891/1600/Fact3.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2643/2891/320/Fact3.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Así es como se ve nuestro modelo después de aplicar las cuatro preguntas de cardinalidad.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/2643/2891/1600/Fact4.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2643/2891/320/Fact4.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pero como sabemos que las relaciones muchos a muchos no se soportan en un RDBMS, entonces nace debe crearse una nueva entidad asociativa que resuelva este tipo de cardinalidad y ésta es FACTURA.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/2643/2891/1600/Fact5.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2643/2891/320/Fact5.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Después de aplicar las cuatros preguntas de cardinalidad, nuestro modelo queda así:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/2643/2891/1600/Fact6.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2643/2891/320/Fact6.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Podemos observar que ahora ha aparecido otra relación muchos a muchos y que es necesario resolver, yo lo llamaré DETALLE_FACTURA. En la siguiente figura se expone el cómo se vería nuestro modelo Entidad-Relación terminado.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Una nota importante a la hora de aplicar las cuatro preguntas de la cardinalidad es el verbo que se nombra entre la relación de ambas entidades, por ejemplo el cliente compra, el producto se incluye, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114895267801116881?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114895267801116881/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114895267801116881' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114895267801116881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114895267801116881'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/05/los-cuatro-puntos-de-la-cardinalidad.html' title='Los cuatro puntos de la cardinalidad de la relación durante el diseño de la BD.'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114885307717667503</id><published>2006-05-28T16:33:00.000-05:00</published><updated>2006-05-28T16:53:10.383-05:00</updated><title type='text'>Cómo funciona y por qué usar AJAX?</title><content type='html'>No hace mucho tiempo me enteré de una nueva tecnología que aprovecha a XML y javascript para hacer a nuestras aplicaciones WEB más responsivas y en la web encontré lo que a continuación expreso.&lt;br /&gt;&lt;br /&gt;El Web y Ajax&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Problema&lt;/strong&gt;: La recarga de una vista o página anteriormente cargada cuando lo único que se va a modificar entre request y request son sólo datos. &lt;strong&gt;La vista sigue siendo la misma&lt;/strong&gt;. Es decir de evita el rearmado de la vista con los nuevos datos y el viaje de la misma desde el servidor.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Causas&lt;/strong&gt;: La coomunicación entres el cliente y el servidor es a través de request -peticiones- Y se deja que le servidor genere una nueva vista, pero con los nuevos datos cargados para que el cliente los visualice, cuando en realidad la misma sigue igual, sólo modifica sus datos.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solución&lt;/strong&gt;: Separar los datos de la vista. Mediante el uso de un pequeño controlador invoker del lado del cliente dentro de la vista, que administre los datos. Mediante el uso del modelo de objetos del navegador y scripting del lado del cliente se realiza la carga y manejo de datos sobre la vista anteriormente solicitada sin necesidad de realizar un request cuando es posible con los datos actuales. Y al momento de necesitar una acción del servidor para obtener más datos, se realiza la misma evitando la recarga de la vista que continuo siendo la misma.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Ventajas&lt;/strong&gt;:  &lt;br /&gt;1) Solución simple de implementar.&lt;br /&gt;2) Permite obtener datos bajo demanda y luego visualizarlos sin recargar las vistas.&lt;br /&gt;3) Las vistas no se ven afectadas en cuanto a tamaño y éstas pueden ser cacheadas por el navegador ya que las mismas no expirarían continuamente ya que sus datos son manejados independientemente de la presentación.&lt;br /&gt;4) Las vistas no son reescritas por el servidor por lo que separa más la vista en si de los datos, permitiendo un mejor manejo por los diseñadores.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Desventajas&lt;/strong&gt;: &lt;br /&gt;1) Utiliza frames ocultos.&lt;br /&gt;2) Utiliza más scriptting del lado del cliente&lt;br /&gt;&lt;br /&gt;Resumen: Con Ajax se evita la recarga de las vistas cunado no es necesario cambiarla, sino que busca los datos y carga a los mismo en la vista.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114885307717667503?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114885307717667503/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114885307717667503' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114885307717667503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114885307717667503'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/05/cmo-funciona-y-por-qu-usar-ajax.html' title='Cómo funciona y por qué usar AJAX?'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114885181165371006</id><published>2006-05-28T15:59:00.000-05:00</published><updated>2006-05-28T16:32:41.740-05:00</updated><title type='text'>Identificación de Reglas de Negocio</title><content type='html'>Durante la etapa de análisis la toma de requierimientos es de extrema importancia para lograr el éxito del proyecto y no llegar la final con "una solución elegante a un problema equivocado" y como parte de esta etapa está la identificación de las fomosas "REGLAS DE NEGOCIO".&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Qué son las Reglas de Negocio?&lt;/strong&gt; En el libro "UML y Patrones" de Craig Larman dice:&lt;br /&gt;"Las reglas del dominio dictan en modo en el que podrán operar un dominio o negocio. No son requisitos de ninguna aplicación, aunque, a menudo, los requisitos de una apliación se ven afectados por las reglas del dominio. Las políticas de la compañía, leyes físicas y leyes gubernamentales, son reglas de dominio típicas.&lt;br /&gt;&lt;br /&gt;Se demoninan comunmente reglas del negocio, que son el típico más común, pero ese término está limitado, ya que existen aplicaciones de software que no son de gestión de un negocio, como la simulación del clima o la logística militar. Una simulación del clima incluye reglas del dominio, relacionadas con las leyes y relaciones físicas que afectan a los requisitos de la aplicación.&lt;br /&gt;&lt;br /&gt;Avertencia: Las reglas no son requisitos de la aplicación. No registre las caracteristicas del sistema como reglas. Las reglas describen las restricciones y comportamientos del modo de trabajar del dominio, no de la aplicación"&lt;br /&gt;&lt;br /&gt;Como ven los parrafos anteriores son muy interesantes, pero a continuación aquí hat algo más que encontré en la web sobre las reglas de negocio:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;1. Criterios para identificar reglas de negocio o del dominio.&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;- Condiciones que se deben satisfacer para considerar válidos los datos. Por ejemplo sólo se puede enviar la mercancía hasta que el cliente haya pagado.&lt;br /&gt;&lt;br /&gt;-  Condiciones que deben ser evitadas.&lt;br /&gt;Por ejemplo que el inventario de cierto producto llegue a cero.&lt;br /&gt;&lt;br /&gt;- Secuencias en las que los eventos deben de ocurrir.&lt;br /&gt;Se debe determinar que hacer cuando el inventario llega a cero o cuando un pago para una orden es recibido.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;2. Métodos para implementar reglas de negocio.&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;- Directamente en la base de datos.&lt;br /&gt;DataTypes, Default Values, Rules, Keys y Triggers. (En una palabra constraints de Base de Datos).&lt;br /&gt;&lt;br /&gt;- Programación dentro o fuera de la base de datos.&lt;br /&gt;Store Procedures, objetos de negocio, validación directamente en la capa del cliente.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114885181165371006?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114885181165371006/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114885181165371006' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114885181165371006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114885181165371006'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/05/identificacin-de-reglas-de-negocio.html' title='Identificación de Reglas de Negocio'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114884725323910595</id><published>2006-05-28T14:49:00.000-05:00</published><updated>2006-05-28T15:22:23.013-05:00</updated><title type='text'>Clasificación de los reportes durante el desarrollo de sistemas.</title><content type='html'>Los reportes son las salidas de la información que las organizaciones utilizan para la toma de desiciones o para realizar tareas o procesos de negocio y como desarrolladores estamos comprometidos a crear a la hora de implementar una aplicación. &lt;br /&gt;&lt;br /&gt;Cuando trabajé en en un proyecto y que participé desde la fase de toma de requerimientos los usuarios nos empapelaron de solictudes de reportes que según ellos eran necesarios que el sistema les dejará imprimir, yo le comenté a mi jefe sobre está situación y le mencioné que desde mi punta de vista consideraba que muchos de ellos eran imprácticos e innecesarios, entonces él los revisó y aquí es donde él me explicó: existen dos tipo de reportes que se implementan en el desarrollo de sistema: los reportes soporte a la operación y los reportes soporte a la toma de decisiones y que cuando para una aplicación no se ha hecho una adecuada toma de requerimientos, entonces lo que no puede exponer el programa el desarrollador lo hace con reporte(s). Y cuáles son los reportes soporte a la operación: son los reportes escenciales y que necesariamente se tienen que implementar pues la solución no tienen razón de ser si estos no son implementados, por ejemplo la impresión de una factura en un sistema de facturación, la impresión de una receta médica en un sistema de consultas médicas, la impresión de un cheque en un RP, el ticket en un sistema de punto de ventas, etc. Existen muchos de estos casos de reportes. Luego tenemos los reportes soporte a la toma de desiciones y cuyo objetivo es mostrar concentrados de información o información resumen cuyo objetivo es permitirle a los usuarios o empleados de la organización tomar de desiciones, por ejemplo un reporte que concentré las ventas del año pasado agrupadas por mes, un reporte de inventarios por categoria de producto, etc. Y para la demás información no se requiere un reporte pues está en pantalla, de ahí lo que me decia mi exjefe Ing. Arnulfo González si haz hecho una buena toma de requerimientos el sistema lo contendrá y no tendrás que elaborar un reportes excepto para los casos de reportes soporte a la operación o a la toma de decisiones. Así que desarrolladores cuando el usuario les pida reportes, ustedes identifiquen a que tipo de estás dos clasificaciones pertenece y lo que les sobre será información que estará presente en todo momento en pantalla y que no es necesario su impresión -como los de soporte a la operación cuya impresión es 100% necesaria.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114884725323910595?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114884725323910595/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114884725323910595' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114884725323910595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114884725323910595'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/05/clasificacin-de-los-reportes-durante.html' title='Clasificación de los reportes durante el desarrollo de sistemas.'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114884572607956741</id><published>2006-05-28T14:29:00.000-05:00</published><updated>2006-05-28T14:48:46.106-05:00</updated><title type='text'>Qué lenguaje de programación utilizar: VB.NET o C#</title><content type='html'>El pasado 26 de mayo de 2006 se realizó la tercera reunión de la comunidad .NET del D.F, en el auditorio "Carlos Graef" de la facultad de Ciencias de la UNAM. Se expusieron temas muy intersantes y por ahí alguien le preguntó a Octavio Telis sobre que lenguaje era mejor si VB.NET o C# y creo que su pregunta fue muy certera, pues el mencionó que en las primeras versiones había cosas que hacia C# y que no hacia VB.NET -cómo los tipos sin signo, etc- pero que esas diferencias ahora ya no existian entre ambos lenguajes, pero déspues mencionó lo que yo creo es lo más importante: "El objetivo del lenguaje es lo que está debajo de él: el Framework". Yo considero que está fue una respuesta muy intersante y cierta. A continuación pongo unos diagramitas que por ahí encontré en la web y que consideron que son muy importantes y que hacen alusión a este post.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/2643/2891/1600/ArqNET.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2643/2891/320/ArqNET.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114884572607956741?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114884572607956741/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114884572607956741' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114884572607956741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114884572607956741'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/05/qu-lenguaje-de-programacin-utilizar.html' title='Qué lenguaje de programación utilizar: VB.NET o C#'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114842412744321653</id><published>2006-05-23T17:32:00.000-05:00</published><updated>2006-05-23T17:50:09.533-05:00</updated><title type='text'>El manejo de fechas en SQL Server</title><content type='html'>En algún momento hice una pequeña aplicación que seleccionaba n número de renglones de una tabla en SQL Server 2000, pero al ejecutarla ésta seleccionaba un número de registros menor a los que yo espera estuvieran en ese rango de fechas. Lo primero que yo pensé fue en la configuración regional del equipo y que éste tenia un formato de fecha diferente al que yo quería "dd-mm-aaaa" y que cómo ustes saben nuestros primos los gringos usan "mm-dd-aaaa", y ooh! sorpresa estaba bien la configuración regional, entonces le pregunte a un amigo y me dijo que era el lenguaje que tenia definido el SQL Server y que incluso esto era independiente del lenguaje de mi SQL Server puesto que es un valor configurable.&lt;br /&gt;&lt;br /&gt;Y aquí encontré esta página que expone como utilizar las fechas independientemente del lenguaje con el que esté configurado SQL Server.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/art157.asp"&gt;&lt;br /&gt;http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/art157.asp &lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114842412744321653?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114842412744321653/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114842412744321653' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114842412744321653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114842412744321653'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/05/el-manejo-de-fechas-en-sql-server.html' title='El manejo de fechas en SQL Server'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114842189068118264</id><published>2006-05-23T16:43:00.001-05:00</published><updated>2008-09-11T09:37:21.945-05:00</updated><title type='text'>Uso de XML con SQL Server 2000 para operaciones que requieren transacciones con n registros</title><content type='html'>En algún momento que leía un libro de SQL Server 2000 me sorprendió encontrar una forma de utilizar XML con SQL Server 2000 para poder insertar n registros en una sola operación -también llamada transacción-. Para poder lograr esto SQL Server 2000 cuenta con un procedimiento almacenado llamado: "sp_xml_preparedocument" que es el encargado de leer la cadena con formato XML y cargarla en la memoria para poder recorrerla.&lt;br /&gt;&lt;br /&gt;A continuación expongo un ejemplo del caso de la inserción de un objeto Factura en la Base de Datos utilizando XML. Como todos sabemos una factura se compone de dos conceptos: un encabezado y un detalle, el encabezado es el que expone datos del cliente, la fecha y otros, estos datos conforman un registro o renglón en la Base da datos y se inserta en una tabla llamada Factura. El siguiente concepto u apartado que conforman a una factura es el Detalle, éste contiene a todos los registros o renglones de los conceptos que se están facturando al cliente y que pueden ser uno o más (ver figura del modelo Entidad/Relación) y aquí es en donde XML viene a facilitarnos la vida para poder insertar los dos objetos -el encabezado y el detalle- en una sola operación.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/2643/2891/1600/ERFactura.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/2643/2891/320/ERFactura.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;La solución se expone como un store procedure que recibe los datos que componen al encabezado y la cadena XML que compone a los del detalle, así que la única condición para que sp_xml_preparedocument pueda leer la cadena XML es que ésta sea válida.&lt;br /&gt;&lt;br /&gt;Espero que les sea de mucha utilidad, porque casi que yo siempre la utilizó en los proyectos que desarrollo, pues el patrón maestro-detalle por lo regular siempre está presente de alguna forma en todo proyecto.&lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;/*&lt;br /&gt;Este procedimiento almancenado inserta un Encabezado-Detalle de una Factura.&lt;br /&gt;El Detalle se pasa como una cadena XML con la siguiente estructura:&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/2643/2891/1600/cadenaDetXML.0.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/2643/2891/320/cadenaDetXML.0.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;CREATE PROCEDURE dbo.spInsertXMLEncDetFactura&lt;br /&gt;(&lt;br /&gt;@IdCte int,&lt;br /&gt;@FechaFactura datetime,&lt;br /&gt;@IVA numeric(8,2),&lt;br /&gt;@SubTotal numeric(8,2),&lt;br /&gt;@xmlDetFactura varchar(8000)--o tipo Text -Cadena XML con el detalle de la factura.&lt;br /&gt;)&lt;br /&gt;AS&lt;br /&gt;&lt;br /&gt;DECLARE @idoc int --xmlDoc&lt;br /&gt;DECLARE @IdFactura int --Nueva Folio Factura&lt;br /&gt;&lt;br /&gt;--Ejecutar el sp que carga en memoria el docuemnto XML.&lt;br /&gt;EXEC&lt;strong&gt; sp_xml_preparedocument &lt;/strong&gt;@idoc output, @xmlDetFactura&lt;br /&gt;&lt;br /&gt;--SET NOCOUNT ON&lt;br /&gt;DECLARE @CurrentError int&lt;br /&gt;&lt;br /&gt;--Comienza la transacción&lt;br /&gt;BEGIN TRANSACTION&lt;br /&gt;--Agregar el encabezado de la factura.&lt;br /&gt;&lt;br /&gt;INSERT INTO FACTURA&lt;br /&gt;(IdCte, FechaFactura, IVA, SubTotal)&lt;br /&gt;VALUES (@IdCte, @FechaFactura, @IVA, @SubTotal);&lt;br /&gt;&lt;br /&gt;--Verificar si hubo errores&lt;br /&gt;SELECT @CurrentError = @@Error&lt;br /&gt;IF @CurrentError != 0&lt;br /&gt;     GOTO ERROR_HANDLER&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--Obtener el nuevo Identity de la tabla FACTURA.&lt;br /&gt;SELECT @IdFactura = @@IDENTITY&lt;br /&gt;&lt;br /&gt;--Agregar conceptos de FACTURA a la tabla DET_FACTURA.&lt;br /&gt;INSERT INTO DET_FACTURA (IdFactura, IdProducto, CantidadProducto, PrecioProductoVta)&lt;br /&gt;SELECT @IdFactura, IdProducto, CantidadProducto, PrecioProductoVta&lt;br /&gt;FROM &lt;strong&gt;OPENXML &lt;/strong&gt;(@idoc, '/DetFactura/Concepto')&lt;br /&gt;WITH DET_FACTURA&lt;br /&gt;&lt;br /&gt;--Verificar si hubo errores&lt;br /&gt;SELECT @CurrentError = @@Error&lt;br /&gt;IF @CurrentError != 0&lt;br /&gt;     GOTO ERROR_HANDLER&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--Finalizar la Transacción&lt;br /&gt;COMMIT TRANSACTION&lt;br /&gt;SET NOCOUNT OFF&lt;br /&gt;&lt;br /&gt;--Descargar documento XML de la memoria.&lt;br /&gt;EXEC sp_xml_removedocument @idoc&lt;br /&gt;--Retornar el nuevo No. de Solcitud de Compra.&lt;br /&gt;RETURN @IdFactura&lt;br /&gt;&lt;br /&gt;--Manejador de Error.&lt;br /&gt;ERROR_HANDLER:&lt;br /&gt;ROLLBACK TRANSACTION&lt;br /&gt;--Descargar documento XML de la memoria.&lt;br /&gt;EXEC &lt;strong&gt;sp_xml_removedocument &lt;/strong&gt;@idoc&lt;br /&gt;SET NOCOUNT OFF&lt;br /&gt;RETURN 0&lt;br /&gt;GO&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114842189068118264?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114842189068118264/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114842189068118264' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114842189068118264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114842189068118264'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/05/uso-de-xml-con-sql-server-2000-para.html' title='Uso de XML con SQL Server 2000 para operaciones que requieren transacciones con n registros'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114771140954281238</id><published>2006-05-15T11:35:00.000-05:00</published><updated>2006-05-15T11:45:19.616-05:00</updated><title type='text'>Acceso a tu computadora virtual desde el navegador.</title><content type='html'>Hace unos días platiqué con mi amigo Alex y me comentó sobre un sitio desde el cual era posible acceder a una comútadora virtual desde el navegador, así que la visité y me sorprendió mucho la interfaz y las ventajas que da tener acceso a ésta. A mi me gusto lo de poder compartir carpetas con otros usuarios registrados. La interfaz es muy parecida a un ambiente gráfico de una distribución de Linux y lo más increíble es que es free. Aquí algunas de las caracteristicas que te ofrece son:&lt;br /&gt;&lt;br /&gt;- Acceso a la computadora sólo tienes que escribir en la barra del navegador Computadora.de/usuario desde cualquier máquina conectada a Internet&lt;br /&gt;&lt;br /&gt;- Correo.de.- Al registrarte en Computadora.de obtienes automáticamente una cuenta de correo electrónico y una adicional si elegiste un "alias"; ambas con terminación @correo.de. (uusario@@correo.de)&lt;br /&gt;&lt;br /&gt;- Calendario.de.- Organízate y no llegues tarde, Calendario.de te avisa de tus citas pendientes.&lt;br /&gt;&lt;br /&gt;- Directorio.de.- Almacena la información de toda la gente que conoces dentro de un programa en donde puedes consultarla con rapidez y eficiencia&lt;br /&gt;&lt;br /&gt;- DiscoDuro.de.- Obtienes en tu DiscoDuro.de 100MB de espacio. Toda la información de tu computadora virtual, mensajes, documentos, citas y contactos, están disponibles donde quiera que estés. Crea nuevos directorios, sube tus tareas, fotos y accédelos desde cualquier máquina, sin tener que andar cargando diskettes.  De necesitar espacio adicional, por favor haz doble clic en el icono de "Comprar espacio en disco duro"&lt;br /&gt;&lt;br /&gt;- Mensajero.de.- Comunícate de forma instantánea con todos tus amigos, sin tener que configurar nada &lt;br /&gt;&lt;br /&gt;- Programas.de.- Crea y guarda tus documentos con programas de procesador de palabras y hoja de cálculo compatibles y fáciles de usar&lt;br /&gt;&lt;br /&gt;- PaginaWeb.de.- En tu DiscoDuro.de se encuentra una carpeta con este nombre donde podrás poner tu página hogar con imágenes, sonidos y lo que desees.  Para acceder a tu página sólo tienes que escribir en la barra del navegador PaginaWeb.de/tu_usuario&lt;br /&gt;&lt;br /&gt;&lt;a href="http://computadora.de/"&gt;&lt;br /&gt;http://computadora.de/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114771140954281238?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114771140954281238/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114771140954281238' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114771140954281238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114771140954281238'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/05/acceso-tu-computadora-virtual-desde-el.html' title='Acceso a tu computadora virtual desde el navegador.'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114770707208886163</id><published>2006-05-15T10:28:00.000-05:00</published><updated>2006-05-15T11:29:44.723-05:00</updated><title type='text'>Script 2 para otorgar permisos de ejecución a sp a un usuario de SQL Server.</title><content type='html'>Este es otro script que permite otorgar permisos de ejecución a todos los procedimientos almacenados de una base de datos para un usuario en particular.&lt;br /&gt;&lt;br /&gt;*****************************SCRIPT*********************************************&lt;br /&gt;--Otorga permisos a todos los stores procedures para un determinado usuario.&lt;br /&gt;--Precondiciones: establecer el nombre de la base de datos de uso y el nombre del usuario al que se desea otorgar los permisos.&lt;br /&gt; &lt;br /&gt;&lt;strong&gt;Use x&lt;/strong&gt;&lt;br /&gt;--Nombre de Usuario al que se desea otorgar permiso.&lt;br /&gt;Declare @user varchar(100)&lt;br /&gt;Set @user = &lt;strong&gt;'User1'&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;--Seleccionar a todos los objetos del tipo store procedure.&lt;br /&gt;declare curse cursor for &lt;br /&gt;SELECT name &lt;br /&gt;FROM sysobjects &lt;br /&gt;WHERE type = 'P' AND category = 0 &lt;br /&gt; &lt;br /&gt;OPEN CURSE&lt;br /&gt;declare @proc varchar(100)&lt;br /&gt;declare @stmt nvarchar(200)&lt;br /&gt; &lt;br /&gt;fetch next from curse into @proc&lt;br /&gt;while @@fetch_status=0 &lt;br /&gt;begin&lt;br /&gt; --ejecuta el otorgamiento de permisos.&lt;br /&gt; set @stmt='grant execute on '+@proc+' to ' +@user&lt;br /&gt; exec SP_EXECUTESQL @STMT&lt;br /&gt; print '***El usuario: ' + @user + ' puede ejecutar al store procedure: ' + @proc + '***'&lt;br /&gt; fetch next from curse into @proc&lt;br /&gt;end&lt;br /&gt;--desocupa el cursor.&lt;br /&gt;close curse&lt;br /&gt;deallocate curse&lt;br /&gt;GO&lt;br /&gt;**************************FIN*SCRIPT*********************************************&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114770707208886163?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114770707208886163/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114770707208886163' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114770707208886163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114770707208886163'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/05/script-2-para-otorgar-permisos-de.html' title='Script 2 para otorgar permisos de ejecución a sp a un usuario de SQL Server.'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114770650425203562</id><published>2006-05-15T10:09:00.000-05:00</published><updated>2006-05-15T10:23:09.906-05:00</updated><title type='text'>Script 1 para otorgar permisos de ejecución a sp en SQL Server .</title><content type='html'>Recientemente yo tenía que otorgar permisos a muchos usuarios a muchos store procedures en SQL Server 2000 y hacerlo manualmente era una tarea tediosa, así que por ahí me encontré algo en internet para poder hacer esto. &lt;br /&gt;&lt;br /&gt;Cuando ejecuten este script sólo especifiquen el nombre de la base de datos.&lt;br /&gt;Después de ejecutarlo les aparecerán ciertos mensajes de error y que no afectan para&lt;br /&gt;el objetivo. Este error se da porque en la consulta:&lt;br /&gt;&lt;br /&gt;SELECT  name FROM master..sysxlogins&lt;br /&gt;WHERE srvid IS NULL AND name &lt;&gt; 'sa' &lt;br /&gt;&lt;br /&gt;Se extraen a todos los usuarios en la base de datos y muy probablemente los usuarios&lt;br /&gt;a los que desea otorgar permisos de ejecución a los SP no existen en la base de datos especificada, pero si los otorgará a los que si existen, de esta manera el&lt;br /&gt;motor de SQL Server excluirá automáticamente a estos y lo expresará mediante un mensaje de error.&lt;br /&gt;&lt;br /&gt;--*********************************SCRIPT****************************************&lt;br /&gt;--Otorga permisos de ejecución a todos los sp a todos los usuarios de una base de datos.&lt;br /&gt;--Especifique la BD que desea usar para otorgar. &lt;br /&gt; &lt;br /&gt;Use &lt;strong&gt;NombreBD&lt;/strong&gt;&lt;br /&gt; &lt;br /&gt;--Variables de uso&lt;br /&gt;Declare @login varchar(50), @proc varchar(100), @stmt nvarchar(200)&lt;br /&gt; &lt;br /&gt;DECLARE loginBD CURSOR FOR&lt;br /&gt;--Extraer a todos los logins, no importa que no estén en la BD de uso.&lt;br /&gt;SELECT  name FROM master..sysxlogins&lt;br /&gt;WHERE srvid IS NULL AND name &lt;&gt; 'sa' &lt;br /&gt; &lt;br /&gt;-- Avanzamos un registro y cargamos en las variables los valores encontrados en el primer registro&lt;br /&gt;OPEN loginBD&lt;br /&gt; &lt;br /&gt;FETCH NEXT FROM loginBD&lt;br /&gt;--Vaciar el valor obtenido por el curos en  una variable.&lt;br /&gt;INTO @login&lt;br /&gt; &lt;br /&gt;WHILE @@FETCH_STATUS = 0&lt;br /&gt;BEGIN&lt;br /&gt; Declare curse cursor for &lt;br /&gt; --Obtener a todos los SP de la base de datos actual.&lt;br /&gt; SELECT name &lt;br /&gt; FROM sysobjects &lt;br /&gt; WHERE type = 'P' AND category = 0 &lt;br /&gt; OPEN CURSE&lt;br /&gt; fetch next from curse into @proc&lt;br /&gt; while @@fetch_status=0 &lt;br /&gt; Begin&lt;br /&gt; --Ejecutar los permisos&lt;br /&gt;  set @stmt='grant execute on '+@proc+' to ' +@login&lt;br /&gt;  exec SP_EXECUTESQL @STMT&lt;br /&gt;  If @@Error&lt;&gt; 0&lt;br /&gt;   print ''&lt;br /&gt;  Else&lt;br /&gt;   print '***El usuario: ' +@login + ' puede ejecutar al store procedure: ' + @proc&lt;br /&gt;  fetch next from curse into @proc&lt;br /&gt; end&lt;br /&gt; --Desocupar el cursor&lt;br /&gt; close curse&lt;br /&gt; deallocate curse&lt;br /&gt; &lt;br /&gt; -----Siguiente Login&lt;br /&gt; FETCH NEXT FROM loginBD&lt;br /&gt; --Vaciar el siguiente valor obtenido por el curos en  una variable.&lt;br /&gt; INTO @login&lt;br /&gt;END&lt;br /&gt; &lt;br /&gt;--Desocupar el cursor.&lt;br /&gt;CLOSE loginBD&lt;br /&gt;DEALLOCATE loginBD&lt;br /&gt;GO&lt;br /&gt;--*****************************FIN*SCRIPT****************************************&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114770650425203562?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114770650425203562/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114770650425203562' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114770650425203562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114770650425203562'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/05/script-1-para-otorgar-permisos-de.html' title='Script 1 para otorgar permisos de ejecución a sp en SQL Server .'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114737192697834823</id><published>2006-05-11T13:23:00.000-05:00</published><updated>2006-05-15T10:35:28.126-05:00</updated><title type='text'>400 razones para actualizarse a Visual Studio Net 2005</title><content type='html'>En un blog me encontré la referencia a está página que expone las 400 razones del porque utilizar Visual Studio Net 2005. La página es muy agradable. Visítenla en:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.400plusdifferences.com/"&gt;&lt;br /&gt;http://www.400plusdifferences.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114737192697834823?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114737192697834823/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114737192697834823' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114737192697834823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114737192697834823'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/05/400-razones-para-actualizarse-visual.html' title='400 razones para actualizarse a Visual Studio Net 2005'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114737102703871372</id><published>2006-05-11T13:08:00.000-05:00</published><updated>2006-05-15T11:25:25.376-05:00</updated><title type='text'>Estándar codificación DOTNET</title><content type='html'>Encontré este articulo simple, pero creo que muy provechoso durante el desarrollo de proyectos .NET&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.elguille.info/colabora/NET2005/giovannyfernandez_EstandarCodificacionNET.htm"&gt;&lt;br /&gt;http://www.elguille.info/colabora/NET2005/giovannyfernandez_EstandarCodificacionNET.htm&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114737102703871372?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114737102703871372/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114737102703871372' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114737102703871372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114737102703871372'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/05/estndar-codificacin-dotnet.html' title='Estándar codificación DOTNET'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114728695647654050</id><published>2006-05-10T13:40:00.000-05:00</published><updated>2006-05-15T10:39:41.456-05:00</updated><title type='text'>Grupos de Noticias de Productos Microsoft.</title><content type='html'>De vez en cuando entrar a los grupos de discusión de Microsoft suele ser muy bueno porque de acuerdo al tema uno puede ayudar o otras personas o aprender de lo que se expone como pregunta-respuesta.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://support.microsoft.com/newsgroups/"&gt;&lt;br /&gt;http://support.microsoft.com/newsgroups/&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Despúes de ingresar a la página sólo seleccionen el idioma y un producto para ver las preguntas expuestas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114728695647654050?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114728695647654050/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114728695647654050' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114728695647654050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114728695647654050'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/05/grupos-de-noticias-de-productos.html' title='Grupos de Noticias de Productos Microsoft.'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114727978376335391</id><published>2006-05-10T11:34:00.000-05:00</published><updated>2006-05-15T11:23:20.013-05:00</updated><title type='text'>Tip de performance al usar una conexión de BD a través de un SqlDataAdapter.</title><content type='html'>Navegando en la web encontré un link que me llevó a un blog muy interesante y ahí en un post encontré información a cerca del manejo del pool de conexiones que hace ADO.NET cuando se utiliza un SqlDataAdapter. Se sabe que al ejecutar el método Fill del objeto SqlDataAdapter el objeto connection al que se ligaba se abre y cierra automáticamente, pero existen ocasiones en que en una msma secuencia de operaciones ejecutamos más de una vez un método Fill de un SqlDataAdapter y entonces, para cada caso se abre y cierra la conexión, pero en este blog expone que para obtener un mejor performance es recomendable abrir y cerrar la conexión manualmente abrirlá al momento de iniciar el primer Fill de un SqlDataAdapter y cerrarla después de ejecutar el último fill del SqlDataAdapter.&lt;br /&gt;&lt;br /&gt;En el siguiente link esta el post que leí, además de que expone un ejemplo. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://davidhayden.com/blog/dave/archive/2005/11/03/2554.aspx"&gt;&lt;br /&gt;http://davidhayden.com/blog/dave/archive/2005/11/03/2554.aspx&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114727978376335391?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114727978376335391/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114727978376335391' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114727978376335391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114727978376335391'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/05/tip-de-performance-al-usar-una-conexin.html' title='Tip de performance al usar una conexión de BD a través de un SqlDataAdapter.'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114727697533699177</id><published>2006-05-10T10:39:00.000-05:00</published><updated>2006-05-15T10:40:40.216-05:00</updated><title type='text'>Control Calendario para ASP.NET 1.1 y 2.0</title><content type='html'>Navegando en la red encontre un control calendario para ASP.NET 2003 y 2005. La  descarga incluye una guia de instalación de este control e incluye ejemplos en C# y VB.Net. El control es realmente muy bueno y tiene varios conceptos de configuración.&lt;br /&gt;Pueden desarcargarlo y probarlo de:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=FED8B3BE-67E2-4BFC-BE34-404799B17D77"&gt;&lt;br /&gt;http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=FED8B3BE-67E2-4BFC-BE34-404799B17D77&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114727697533699177?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114727697533699177/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114727697533699177' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114727697533699177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114727697533699177'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/05/control-calendario-para-aspnet-11-y-20.html' title='Control Calendario para ASP.NET 1.1 y 2.0'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114727551718069061</id><published>2006-05-10T10:37:00.000-05:00</published><updated>2006-05-15T11:26:06.383-05:00</updated><title type='text'>¿En dónde quedo el Enterprise Manager en SQL Server 2005 Express?</title><content type='html'>Cuando yo instalé SQL Server 2005 versión express, lo primero que yo quería hacer después de la instalación era navegar por las base de datos, conocer su nueva interfaz y ooh!! sorpresa no encontraba una aplicación tipo Enterprise Manager como la de SQL Server 2000, así que me puse a investigar en la web y encontré que Microsoft adicionalmente al motor de base de datos liberó una herramienta grafica llamada: Microsoft SQL Server Management Studio Express (SSMSE).&lt;br /&gt;&lt;br /&gt;El link de donde es posible realizar su descarga es:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=82afbd59-57a4-455e-a2d6-1d4c98d40f6e&amp;displaylang=en"&gt;&lt;br /&gt;http://www.microsoft.com/downloads/details.aspx?familyid=82afbd59-57a4-455e-a2d6-1d4c98d40f6e&amp;displaylang=en&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114727551718069061?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114727551718069061/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114727551718069061' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114727551718069061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114727551718069061'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/05/en-dnde-quedo-el-enterprise-manager-en.html' title='¿En dónde quedo el Enterprise Manager en SQL Server 2005 Express?'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114660974199737337</id><published>2006-05-02T17:38:00.000-05:00</published><updated>2006-05-15T11:47:27.120-05:00</updated><title type='text'>Escucha música en línea.</title><content type='html'>Cuando estoy en la computadora siempre estoy escuchando música y he aquí un buen sitio de estaciones de radio que mi querida amiga Maru me recomendo. Si tienes una buena conexión a internet podrás disfrutar de las estaciones de música expuestas en esta página y aunque la página es brasileña existen estaciones que pasan música en inglés y otros idiomas.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://radios.com.br/"&gt;http://radios.com.br&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114660974199737337?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114660974199737337/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114660974199737337' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114660974199737337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114660974199737337'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/05/escucha-msica-en-lnea.html' title='Escucha música en línea.'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114660847858048255</id><published>2006-05-02T17:16:00.000-05:00</published><updated>2006-05-02T17:46:03.096-05:00</updated><title type='text'>MP3 a muy bajo precio!!!</title><content type='html'>Hola! mi primo César encontró un link muy intersante para poder descargar música mp3 a muy bajo costo, incluso pueden escuchar un pequeño fragmento de la canación que desan descagar antes de pagarla, pueden comprar todo un álbum o determinado track de un álbum. Una vez que compran el track o el álbum este se encuentra disponible durante 24 horas para que lo puedan descargar a la hora qu quieran dentro de este lapso.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mp3sugar.com/"&gt;http://www.mp3sugar.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114660847858048255?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114660847858048255/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114660847858048255' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114660847858048255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114660847858048255'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/05/mp3-muy-bajo-precio.html' title='MP3 a muy bajo precio!!!'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114660748103711504</id><published>2006-05-02T17:00:00.000-05:00</published><updated>2006-05-02T17:12:52.586-05:00</updated><title type='text'>Modelos Entidad Relación disponibles.</title><content type='html'>Hola! hoy en día casi que cualquier tipo de aplicación que desarrollemos hace persistencia de datos en una base de datos relacional y como desarrolladores de aplicaciones es importante saber modelar la información en un modelo entidad-relación, pues éste diagrama es la base sobre la que comenzaremos a construir nuestra aplicación.&lt;br /&gt;&lt;br /&gt;En el siguiente link podremos obtener muy buenas ideas en la construcción de nuestros modelos de Entidad-Relación.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.databaseanswers.org/data_models/index.htm"&gt;http://www.databaseanswers.org/data_models/index.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114660748103711504?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114660748103711504/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114660748103711504' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114660748103711504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114660748103711504'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/05/modelos-entidad-relacin-disponibles.html' title='Modelos Entidad Relación disponibles.'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27440916.post-114660720932626276</id><published>2006-05-02T16:53:00.000-05:00</published><updated>2006-05-19T10:00:44.046-05:00</updated><title type='text'>SQL Server Express 2005</title><content type='html'>Hola! hace unos días descargué la versión Express de SQL Server y una vez instalado esperaba ver algo así como el Enterprise Manager de SQL Server 2000 y ohh!!! sorpresa no lo había, así que me puse a buscar en la web y encontré una página que expone todos los elementos que debes descargar para poder configurar y comenzar a utilizar el SQL Server 2005 Express.&lt;br /&gt;&lt;br /&gt;&lt;a http://www.ukaug.co.uk/TPExpress.asp&lt;br /&gt;href="http://www.ukaug.co.uk/TPExpress.asp"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27440916-114660720932626276?l=lobyte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lobyte.blogspot.com/feeds/114660720932626276/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27440916&amp;postID=114660720932626276' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114660720932626276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27440916/posts/default/114660720932626276'/><link rel='alternate' type='text/html' href='http://lobyte.blogspot.com/2006/05/sql-server-express-2005.html' title='SQL Server Express 2005'/><author><name>lobyte</name><uri>http://www.blogger.com/profile/00841448949818377931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/-fWoNNNk40wc/TaZiuL12X7I/AAAAAAAAAIc/IxKNMWDoWSQ/s220/estilizadoYo.jpg'/></author><thr:total>0</thr:total></entry></feed>
