<?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:blogger='http://schemas.google.com/blogger/2008' 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-5008887765771035003</id><updated>2025-11-18T00:23:58.863-08:00</updated><category term="DotNet"/><category term="C#"/><category term="Sql Server"/><category term="Vb.Net"/><category term="About Me"/><category term="CFDi"/><category term="Hierbas Varias"/><category term="LINQ"/><title type='text'>DevTopia... DotNet, Sql Server con Hierbas varias</title><subtitle type='html'>Blog dedicado a la recopilación de experiencias en el desarrollo de software con tecnologías DotNet, Sql Server y otras hierbas.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-4734977781546391968</id><published>2014-02-13T08:18:00.001-08:00</published><updated>2014-02-13T08:18:18.581-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hierbas Varias"/><title type='text'>Efimeras</title><content type='html'>&lt;p style=&quot;text-align:left&quot;&gt;Algunos preguntan ¿en esta vida que es perdurable? Ya que otros tantos aseveran... &quot;que las palabras se las lleva el viento&quot;&lt;br&gt;
&quot;que las promesas son solo palabras&quot; y que &quot;las reglas estan hechas para transgredirse&quot;&lt;br&gt;
Pero entonces, ¿que es duradero en una persona? ¿Que es aquello que se puede prender en un ser humano y permanecer en el a traves del tiempo?&lt;br&gt;
!las emociones! Pequeñas o grandes generadoras de recuerdos y que despiertan y agitan las fibras mas sensibles de&amp;nbsp; una persona. Eso amigos mios es lo verdaderamente inolvidable, claro esta que las hay buenas y malas por eso esforcemonos en generar en los demas solo gratos sentimientos pues podemos estar seguros que aquello que plantemos ya no se ira...&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/4734977781546391968/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/4734977781546391968' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/4734977781546391968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/4734977781546391968'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2014/02/efimeras.html' title='Efimeras'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-6424478574622183242</id><published>2013-12-09T21:41:00.001-08:00</published><updated>2013-12-09T21:42:47.328-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="CFDi"/><category scheme="http://www.blogger.com/atom/ns#" term="LINQ"/><category scheme="http://www.blogger.com/atom/ns#" term="Vb.Net"/><title type='text'>Obtener el nodo de un Xml (Cfdi) con todo y que tenga la nomenclatura ns:elemento, en 2 pataditas con LINQ. [LINQ TO XML]</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Que tal pues nada que como parte de mi trabajo me vi en la necesidad de obtener el nodo del complemento TimbreFiscalDigital desde una factura CFDi que como bien sabran es un XML. Pues bien tras intentarlo con XPATH, y demas… siempre obtenia un error de Espacio de Nombres, y es que estos archivos poseen una nomenclatura basada en NameSpace y aun administrandolos no conseguia mi cometido.&lt;/p&gt; &lt;p&gt;Sin embargo he aqui como lo solucione extremadamente facil, claro esta con LINQ.&lt;/p&gt; &lt;p&gt;Espero que les sea de utilidad.&lt;/p&gt; &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; width=&quot;400&quot; border=&quot;0&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;400&quot;&gt; &lt;div class=&quot;csharpcode&quot;&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div class=&quot;csharpcode&quot;&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;   1:  &lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;Dim&lt;/span&gt; xdoc = XDocument.Load(pArchivoXmlCfdiGenerado)&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;   2:  &lt;/span&gt;            &lt;span class=&quot;kwrd&quot;&gt;Dim&lt;/span&gt; timbreFiscal = (From item &lt;span class=&quot;kwrd&quot;&gt;In&lt;/span&gt; xdoc.Descendants&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;   3:  &lt;/span&gt;                                Where item.Name.LocalName = &lt;span class=&quot;str&quot;&gt;&quot;TimbreFiscalDigital&quot;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;   4:  &lt;/span&gt;                                &lt;span class=&quot;kwrd&quot;&gt;Select&lt;/span&gt; item).First()&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;   5:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;   6:  &lt;/span&gt;            pHistoricoTimbreCFDi.FechaTimbrado = Convert.ToDateTime(timbreFiscal.Attribute(&lt;span class=&quot;str&quot;&gt;&quot;FechaTimbrado&quot;&lt;/span&gt;).Value)&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;   7:  &lt;/span&gt;            pHistoricoTimbreCFDi.UUID = timbreFiscal.Attribute(&lt;span class=&quot;str&quot;&gt;&quot;UUID&quot;&lt;/span&gt;).Value&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;   8:  &lt;/span&gt;            pHistoricoTimbreCFDi.NoCertificadoSAT = timbreFiscal.Attribute(&lt;span class=&quot;str&quot;&gt;&quot;noCertificadoSAT&quot;&lt;/span&gt;).Value&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;   9:  &lt;/span&gt;            pHistoricoTimbreCFDi.SelloCFD = timbreFiscal.Attribute(&lt;span class=&quot;str&quot;&gt;&quot;selloCFD&quot;&lt;/span&gt;).Value&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  10:  &lt;/span&gt;            pHistoricoTimbreCFDi.SelloSAT = timbreFiscal.Attribute(&lt;span class=&quot;str&quot;&gt;&quot;selloSAT&quot;&lt;/span&gt;).Value&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  11:  &lt;/span&gt;            pHistoricoTimbreCFDi.Version = timbreFiscal.Attribute(&lt;span class=&quot;str&quot;&gt;&quot;version&quot;&lt;/span&gt;).Value&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  12:  &lt;/span&gt;            pHistoricoTimbreCFDi.Esquemas = timbreFiscal.Parent.ToString&lt;/pre&gt;&lt;/div&gt;  </content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/6424478574622183242/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/6424478574622183242' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/6424478574622183242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/6424478574622183242'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2013/12/obtener-el-nodo-de-un-xml-cfdi-con-todo.html' title='Obtener el nodo de un Xml (Cfdi) con todo y que tenga la nomenclatura ns:elemento, en 2 pataditas con LINQ. [LINQ TO XML]'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-1728724563051940524</id><published>2013-10-31T12:49:00.001-07:00</published><updated>2013-11-01T05:44:57.630-07:00</updated><title type='text'>Posteando desde android con soffice</title><content type='html'>&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgel4Fc9Y_avqLLPsTp2XAIZQQze4OBuZvEXWJp5GvTYVyW3YabQam6eoYo-HwJThg0WXBAQXQiAH2KycAkC3jv5tirmOM8dNYwnKWl2v9EvIwCDTw0evRGwZ0dKnkks0vt7ZhSbClo52o/&quot;&gt;&lt;img title=&quot;testeando&quot; class=&quot;aligncenter size-full&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgel4Fc9Y_avqLLPsTp2XAIZQQze4OBuZvEXWJp5GvTYVyW3YabQam6eoYo-HwJThg0WXBAQXQiAH2KycAkC3jv5tirmOM8dNYwnKWl2v9EvIwCDTw0evRGwZ0dKnkks0vt7ZhSbClo52o/&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align:left&quot;&gt;Pues nada, aqui probando la edicion de blogs desde android con Soffice. Que para ser desde un celular me parece sencillo en cuanto al manejo; pero con muy buenas opciones sobre todo en lo que respecta a la inserción de elementos.&lt;br&gt;
La pega que le veo es que solo es posible editar las entradas agregadas desde el dispositivo por lo que olvidate de querer modificar tus demas posts.&lt;br&gt;
En conclusión recomendado en definitiva, pues me parece que de las alternativas es la mejor para mobiles.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/1728724563051940524/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/1728724563051940524' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/1728724563051940524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/1728724563051940524'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2013/10/posteando-desde-android.html' title='Posteando desde android con soffice'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgel4Fc9Y_avqLLPsTp2XAIZQQze4OBuZvEXWJp5GvTYVyW3YabQam6eoYo-HwJThg0WXBAQXQiAH2KycAkC3jv5tirmOM8dNYwnKWl2v9EvIwCDTw0evRGwZ0dKnkks0vt7ZhSbClo52o/s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-3880799987481397665</id><published>2013-10-30T10:00:00.000-07:00</published><updated>2013-10-30T10:09:39.248-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="DotNet"/><category scheme="http://www.blogger.com/atom/ns#" term="Vb.Net"/><title type='text'>Como llamar un Constructor Base desde una clase Heredada, en Vb y C#</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Escribo esta entrada porque algunos colegas tal vez no estan al tanto de las diferencias que implica el lenguaje al momento de llamar un constructor Base desde la clase que la hereda.&lt;/p&gt; &lt;h1&gt;C#&lt;/h1&gt; &lt;p&gt;En la Firma del constructor de la clase heredada, especificamos a que constructor base debe llamar y que parametros se enviaran al mismo.&lt;/p&gt; &lt;div class=&quot;csharpcode&quot;&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;   1:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; AtmException(&lt;span class=&quot;kwrd&quot;&gt;object&lt;/span&gt; pOrigen,&lt;span class=&quot;kwrd&quot;&gt;string&lt;/span&gt; pMensaje)&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;   2:  &lt;/span&gt;            : &lt;span class=&quot;kwrd&quot;&gt;base&lt;/span&gt;(pMensaje)&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;   3:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;   4:  &lt;/span&gt;            Data.Add(&lt;span class=&quot;str&quot;&gt;&quot;ObjectSource&quot;&lt;/span&gt;, pOrigen);&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;   5:  &lt;/span&gt;            Data.Add(&lt;span class=&quot;str&quot;&gt;&quot;Mensaje&quot;&lt;/span&gt;, pMensaje);&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;   6:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;   7:  &lt;/span&gt;    }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Vb.Net&lt;/h1&gt;&lt;br /&gt;&lt;p&gt;En este caso utilizaremos el objeto MyBase para llamar al constructor deseado, en la linea inmediata a la firma del Constructor de la clase derivada.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;div class=&quot;csharpcode&quot;&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;   1:  &lt;/span&gt;  &lt;span class=&quot;kwrd&quot;&gt;Public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;Class&lt;/span&gt; ExceptionNumeroRegistrosExcedido&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;   2:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;Inherits&lt;/span&gt; Exception&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;   3:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;   4:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;Sub&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;New&lt;/span&gt;(pMensajeExcepcion &lt;span class=&quot;kwrd&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;String&lt;/span&gt;)&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;   5:  &lt;/span&gt;            &lt;span class=&quot;kwrd&quot;&gt;MyBase&lt;/span&gt;.&lt;span class=&quot;kwrd&quot;&gt;New&lt;/span&gt;(pMensajeExcepcion)&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;   6:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;Sub&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;   7:  &lt;/span&gt;    &lt;span class=&quot;kwrd&quot;&gt;End&lt;/span&gt; Class&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Bien pues como siempre espero que les sea de utilidad.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Happy Coding… KarlozArba&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/3880799987481397665/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/3880799987481397665' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/3880799987481397665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/3880799987481397665'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2013/10/como-llamar-un-constructor-base-desde.html' title='Como llamar un Constructor Base desde una clase Heredada, en Vb y C#'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-3033513341087707708</id><published>2012-10-31T17:30:00.001-07:00</published><updated>2012-10-31T17:32:27.050-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DotNet"/><title type='text'>Deshabilitar que la tecla ENTER dispare el evento Button.Click</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p align=&quot;justify&quot;&gt;Este caso aunque la solución llegue a ser sencilla en implementación, no me parece que este al alcance de quienes tenemos un conocimiento básico, intermedio de DotNet. En fin, cuando necesitemos que un botón dispare su evento click al pulsar la tecla ENTER cuando esté enfocado, deberemos forzosamente crear nuestro propio botón heredándolo de otro botón claro esta, en mi caso lo he hecho a partir de uno de DevExpress.&lt;/p&gt; &lt;p align=&quot;justify&quot;&gt;Una vez hecho esto, sobrescribir el método ProcessCmdKey tal como muestro más abajo.&lt;/p&gt; &lt;p align=&quot;justify&quot;&gt;Para mi&amp;nbsp; caso muy particular se requería que si se detectara a tecla y de ser ENTER se enviara el foco al siguiente control, lo cual realice mediante un PreviewKeyDown.&lt;/p&gt; &lt;p align=&quot;justify&quot;&gt;&lt;a href=&quot;http://lh6.ggpht.com/-noiH6Db3wAw/UJHDFfWv1KI/AAAAAAAACKQ/SsV1ZherOGY/s1600-h/image%25255B4%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/-2VNwmGIpuR4/UJHDGS6aFjI/AAAAAAAACKY/091R8x1IeVo/image_thumb%25255B2%25255D.png?imgmax=800&quot; width=&quot;557&quot; height=&quot;193&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre&gt;&lt;font style=&quot;background-color: #00ff00&quot;&gt;&lt;/font&gt;&lt;font style=&quot;&quot; color=&quot;#ffc000&quot;&gt;&lt;strong&gt;Public Class iBotonDx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Inherits DevExpress.XtraEditors.SimpleButton&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return keyData = Keys.Enter OrElse MyBase.ProcessCmdKey(msg, keyData)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Function&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Sub iBotonDx_PreviewKeyDown(sender As System.Object, e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles Me.PreviewKeyDown&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If e.KeyCode = Keys.Enter Then&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SendKeys.Send(&quot;{TAB}&quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub&lt;br /&gt; &lt;br /&gt;End Class&lt;/strong&gt;&lt;/font&gt;&lt;font style=&quot;background-color: #00ff00&quot;&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Bien es todo en este entrada. Como siempre espero sea de utilidad.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Happy Coding… KarlozArba&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/3033513341087707708/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/3033513341087707708' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/3033513341087707708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/3033513341087707708'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2012/10/deshabilitar-que-la-tecla-enter-dispare.html' title='Deshabilitar que la tecla ENTER dispare el evento Button.Click'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-2VNwmGIpuR4/UJHDGS6aFjI/AAAAAAAACKY/091R8x1IeVo/s72-c/image_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-6217319295570681852</id><published>2012-10-15T17:27:00.001-07:00</published><updated>2012-10-15T17:27:22.288-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DotNet"/><title type='text'>La propiedad EditValue de un TextEdit de DevExpress devuelve error en su método GET si no se tiene un valor inicial.</title><content type='html'>&lt;p align=&quot;justify&quot;&gt;&lt;font size=&quot;2&quot;&gt;Bueno pues resulta que si no hemos asignado mediante código un valor inicial para la propiedad EditValue en un TextEdit de DevExpress este nos tira un error de referencia nula. Y este error se dispara aun cuando validemos el contenido de la propiedad con IsNothing o String.IsNullOrEmpty.&lt;/font&gt;&lt;/p&gt; &lt;p align=&quot;justify&quot;&gt;&lt;font size=&quot;2&quot;&gt;Bien la solución es bastante sencilla, lo único que debemos hacer es configurar en tiempo de diseño dicha propiedad, estableciendo el tipo de dato que contendrá y el valor que almacenara cuando nosotros no establezcamos nada de forma predeterminada.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-jeXljGxbCr0/UHyp4gEnxBI/AAAAAAAACEo/bwWcmxkVHVU/s1600-h/image%25255B7%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-K8TGZsxMuk8/UHyp5zFrfJI/AAAAAAAACEw/4DuCfgVj7Wc/image_thumb%25255B3%25255D.png?imgmax=800&quot; width=&quot;240&quot; height=&quot;284&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Espero que les sea de utilidad.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Happy Coding…. KarlozArba&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/6217319295570681852/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/6217319295570681852' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/6217319295570681852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/6217319295570681852'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2012/10/la-propiedad-editvalue-de-un-textedit.html' title='La propiedad EditValue de un TextEdit de DevExpress devuelve error en su método GET si no se tiene un valor inicial.'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-K8TGZsxMuk8/UHyp5zFrfJI/AAAAAAAACEw/4DuCfgVj7Wc/s72-c/image_thumb%25255B3%25255D.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-3249352777164312228</id><published>2012-10-05T17:05:00.001-07:00</published><updated>2012-10-05T17:05:38.665-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DotNet"/><title type='text'>Binding de los valores de una ENUMERATION en el DataSource de un Control.</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p align=&quot;justify&quot;&gt;&lt;font size=&quot;3&quot;&gt;El día de hoy, muy brevemente comentare que cuando nos sea necesario cargar los valores de una enumeración en el DataSource de un control [ej. Combo, List, etc] quizá nuestra primera intensión sea recorrer la enumeración sin embargo la solución que les recomiendo es la siguiente:&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;font color=&quot;#9bbb59&quot; size=&quot;2&quot;&gt;&lt;strong&gt;cbEstatus.Properties.DataSource = System.Enum.GetValues(GetType(Dominio.Enumeraciones.EnEstatus))&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div align=&quot;justify&quot;&gt;&lt;pre&gt;&lt;font size=&quot;3&quot; face=&quot;Arial&quot;&gt;Con lo cual cargaran inmediatamente los valores, ahorrándonos un poco de trabajo y alguno que otra contratiempo.&lt;/font&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align=&quot;justify&quot;&gt;&lt;pre&gt;&lt;font size=&quot;3&quot; face=&quot;Arial&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align=&quot;justify&quot;&gt;&lt;pre&gt;&lt;font size=&quot;3&quot; face=&quot;Arial&quot;&gt;Bien como dije la entrada de hoy ha pecado de breve, pero como siempre espero que sea de utilidad para la comunidad.&lt;/font&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;strong&gt;&lt;font size=&quot;3&quot; face=&quot;Arial&quot;&gt;Happy Coding... Karloz Arba&lt;/font&gt;&lt;/strong&gt;&lt;/pre&gt;  </content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/3249352777164312228/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/3249352777164312228' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/3249352777164312228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/3249352777164312228'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2012/10/binding-de-los-valores-de-una.html' title='Binding de los valores de una ENUMERATION en el DataSource de un Control.'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-5596104360811121018</id><published>2012-09-14T08:47:00.001-07:00</published><updated>2012-09-14T08:47:32.850-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DotNet"/><title type='text'>Crear Custom Control Panel mediante un User Control.</title><content type='html'>&lt;p&gt;Que tal, ya después de un largo tiempo sin agregar entradas a mi modesto blog, quiero dar una pequeña aportación, pero que espero este llena de posibilidades para todos.&lt;/p&gt; &lt;p&gt;Bien pues ¿que tal tener nuestro propio Control Panel? ¿Porqué? o ¿Para que?, las respuestas las hay de todas, en mi caso en la consultora para la que “laburro”, tenemos un conjunto de controles de usuario a los que se les han agregado algunas funciones de dibujo que permiten simular que cada control esta dentro de un panel con bordes redondeados [ese código esta pendiente para otra entrada], bueno pues hay casos en los que necesitamos tener varios controles agrupados en un solo Panelote, así que creamos un User Control que no tiene más que las funciones de dibujo, y así conseguimos nuestro Panel con bordes redondeados para agrupar otros controles, pero nada!! que es solo un farol pues en realidad no agrupa nada. ¿Porqué?, bueno pues porque si bien en cierto que los UC implementan IContainer tambien en cierto que solo funcionan de esta forma en modo de diseño. Pero bueno después de este largo preámbulo verán que la forma de crear su control contenedor es tan fácil que raya en lo ridículo.&lt;/p&gt;&lt;pre&gt;1. Crear un proyecto de Librería de Controles&lt;/pre&gt;&lt;pre&gt;2. Por defecto nos agrega un control de usuario denominado UserControl1, renombrarlo como mejor nos parezca.&lt;/pre&gt;&lt;pre&gt;3. Agregamos los siguientes Namespace, pues necesitaremos un atributo para nuestra clase que se encuentra en ellos: &lt;/pre&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;em&gt;&lt;strong&gt;System.ComponentModel &lt;/strong&gt;&lt;/em&gt;&lt;/pre&gt;&lt;pre&gt;&lt;em&gt;&lt;strong&gt;System.ComponentModel.Design&lt;/strong&gt;&lt;/em&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;pre&gt;4. Marcamos nuestra clase con el atributo:&lt;/pre&gt;&lt;pre&gt;&lt;em&gt;&lt;strong&gt;&amp;lt;Designer (&quot;System.Windows.Forms.Design.ParentControlDesigner, System.Design&quot;, GetType(IDesigner))&amp;gt;&lt;/strong&gt;&lt;/em&gt;&lt;/pre&gt;&lt;pre&gt;Esto proveerá la magia para que nuestro UC pueda comportarse como un control del tipo ParentControl o contenedor.&lt;/pre&gt;&lt;pre&gt;Nuestra Clase debería quedarnos más o menos así:&lt;/pre&gt;&lt;pre&gt;&lt;a href=&quot;http://lh5.ggpht.com/-Gw2Qg8g8Glg/UFNRjqk7E0I/AAAAAAAAB_k/g5Kb5koeBjk/s1600-h/image%25255B4%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/-aS7YuFa2B_4/UFNRk8faHaI/AAAAAAAAB_s/2E14pKO1cz4/image_thumb%25255B2%25255D.png?imgmax=800&quot; width=&quot;887&quot; height=&quot;237&quot;&gt;&lt;/a&gt;&lt;/pre&gt;&lt;pre&gt;Bien ha sido todo por hoy, como siempre espero que les sea de utilidad.&lt;/pre&gt;&lt;pre&gt;&lt;strong&gt;Happy Coding... Karloz Arba&lt;/strong&gt;&lt;/pre&gt;  </content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/5596104360811121018/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/5596104360811121018' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/5596104360811121018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/5596104360811121018'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2012/09/crear-custom-control-panel-mediante-un.html' title='Crear Custom Control Panel mediante un User Control.'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-aS7YuFa2B_4/UFNRk8faHaI/AAAAAAAAB_s/2E14pKO1cz4/s72-c/image_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-1946086690012148294</id><published>2012-07-05T09:15:00.001-07:00</published><updated>2012-07-05T09:15:53.453-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Sql Server"/><title type='text'>CREATE FILE encountered operating system error 5(Access is denied.)</title><content type='html'>&lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:2a3150bd-23aa-4ad2-aa30-a596b651c139&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt;Etiquetas de Technorati: &lt;a href=&quot;http://technorati.com/tags/Sql+Server&quot; rel=&quot;tag&quot;&gt;Sql Server&lt;/a&gt;&lt;/div&gt; &lt;p&gt;En el caso de que desinstales tu instancia de sql server express, y quieras realizar un Attach de las bd que tenias anteriormente, es posible que te encuentres con el siguiente mensaje, al momento de adjuntarlas:&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#ffff00&quot; face=&quot;Courier New&quot;&gt;&lt;strong&gt;CREATE FILE encountered operating system error 5(Access is denied.) while attempting to open or create the physical file &#39;C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\MyDataBase.mdf&#39;. (Microsoft SQL Server, Error: 5123)&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#cccccc&quot; face=&quot;Courier New&quot;&gt;Bueno pues la solución pasa simplemente por:&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;Courier New&quot;&gt;* En un explorador de windows abrir las propiedades de cada archivo .mdf y .ldf que necesites adjuntar, en la pestaña de seguridad agrega “Todos”, o “Everyone” según el idioma de tu SO, dale todos los permisos, y listo!! podras adjuntar sin problemas.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Happy Coding... Karloz Arba&lt;/strong&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/1946086690012148294/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/1946086690012148294' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/1946086690012148294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/1946086690012148294'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2012/07/create-file-encountered-operating.html' title='CREATE FILE encountered operating system error 5(Access is denied.)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-4886333382679642353</id><published>2012-05-14T23:11:00.003-07:00</published><updated>2012-05-14T23:11:34.920-07:00</updated><title type='text'>Montículo, Pila, Tipos por Valor y por Referencia WTF??</title><content type='html'>&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;En esta ocasión comentare algunos conceptos&amp;nbsp;básicos&amp;nbsp;sobre programación, ya se! ya se! aquí puro experto, pero seguro que abra muchos a quienes les sea de utilidad que es precisamente la intensión de estos aportes.
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;Cuando declaramos una variable, antes que nada debemos estar consientes de que esta formada por tres elementos:&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;1. Nombre de la variable.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;2. Tipo de Datos de la variable.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;3. Valor de la variable,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;Ahora bien, dependiendo del tipo de la variable que usemos, esta se guardara en uno u otro tipo de memoria, ya que para este fin existen dos tipos: la Pila [Stack] y el Montículo [Heap].&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;El compilador almacena las variables de tipos primitivos en la Pila, que es una estructura de tipo LIFO [Last InFirst Out], esta memoria es mucho mas&amp;nbsp;ágil aunque&amp;nbsp;Estática, que su contraparte, sin embargo tiene una limitante en cuanto al tamaño que es de 1024 kb. No obstante es posible modificarla mediante opciones de compilación, pero esa es otra historia.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;Por otra parte cuando ocupamos tipos Referencia [Clases, Objetos, Interfaces, Delegados, etc.] estos son almacenados en el Heap, que es otro segmento o tipo de memoria, que se asigna de forma&amp;nbsp;dinámica a&amp;nbsp;través&amp;nbsp;de un administrador de la misma, que en DotNet se denomina: Garbage Collector o Recolector de Basura, que hay que decir que es quien se encarga de liberar la memoria que ya no es ocupada. Es importante mencionar que aun cuando el objeto&amp;nbsp;referencia&amp;nbsp;se encuentra en el Heap, en el Stack se crea un Apuntador, que almacena precisamente la dirección donde puede localizar el contenido de esa variable referencia, por esa razón cuando asignamos un objeto a otro, en realidad lo que estamos haciendo es copiar a su apuntador la misma&amp;nbsp;dirección&amp;nbsp;de memoria donde se localiza el objeto.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;Hemos dicho que los tipos primitivos se copian en el Stack, sin embargo como toda regla tiene su excepción y esta es que si estas variables son miembros o propiedades de objetos, estas se&amp;nbsp;almacenan&amp;nbsp;también&amp;nbsp;en el Heap y solo cuando son variables locales dentro de sus&amp;nbsp;métodos&amp;nbsp;estas van al Stack, ¿por que? porque son variables temporales de las que el compilador solo&amp;nbsp;deberá&amp;nbsp;almacenar su valor de forma breve para realizar algunas operaciones, y esto ademas agilizara la ejecución de la aplicación.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;Bueno de momento esto ha sido todo, espero no liarlos mucho con tantas letras, pero muchas ocaciones estos detalles que suelen ser&amp;nbsp;teóricos y en apariencia muy basicos, pueden hacer la diferencia dentro de nuestros desarrollos.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;Happy Coding... Karloz Arba&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/4886333382679642353/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/4886333382679642353' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/4886333382679642353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/4886333382679642353'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2012/05/monticulo-pila-tipos-por-valor-y-por.html' title='Montículo, Pila, Tipos por Valor y por Referencia WTF??'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-6292613979472407976</id><published>2012-05-14T09:50:00.001-07:00</published><updated>2012-07-05T09:05:03.920-07:00</updated><title type='text'>Imprimir pantalla y pantalla actual en vb.net</title><content type='html'>&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
Que tal. De manera breve mostraré como mandar al portapapeles la pantalla y la pantalla actual.&lt;br /&gt;
&lt;br /&gt;
El como tratarla lo veremos después, aunque la solución es tan sencillo como mandarla a un Image.&lt;br /&gt;
&lt;br /&gt;
&#39; en un botón o donde queramos establecer la impresión colocamos los siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&lt;span style=&quot;color: #3d85c6;&quot;&gt;SendKeys.Send(&quot;{PRTSC}&quot;)&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #6aa84f;&quot;&gt;&#39; para la pantalla completa&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&lt;span style=&quot;color: #3d85c6;&quot;&gt;SendKeys.Send(&quot;%{PRTSC&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #3d85c6; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;}&quot;)&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span style=&quot;color: #3d85c6;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #6aa84f;&quot;&gt;&#39; para la pantalla activa.&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;Espero que les sea de utilidad. karlozarba... Happy coding!&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/6292613979472407976/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/6292613979472407976' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/6292613979472407976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/6292613979472407976'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2012/05/imprimir-pantalla-y-pantalla-actual-en.html' title='Imprimir pantalla y pantalla actual en vb.net'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-5466796391835638391</id><published>2012-05-09T11:20:00.001-07:00</published><updated>2012-05-09T11:20:18.428-07:00</updated><title type='text'>Desde Windows phone</title><content type='html'>    &lt;div xmlns=&#39;http://www.w3.org/1999/xhtml&#39;&gt;Que tal! Pues ya he dejado mi android de lado y ahora desde WP checando .si es posible bloggear decentemente.
Saludos.    &lt;/div&gt;  </content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/5466796391835638391/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/5466796391835638391' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/5466796391835638391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/5466796391835638391'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2012/05/desde-windows-phone.html' title='Desde Windows phone'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-2795756301223143020</id><published>2012-03-26T10:55:00.001-07:00</published><updated>2012-03-26T11:02:29.983-07:00</updated><title type='text'>Activar los Comentarios XML de documentación en VB.Net cuando han dejado de trabajar.</title><content type='html'>&lt;p&gt;Que, tal.&lt;/p&gt; &lt;p&gt;En esta ocasión quiero comentar una situación que me trajo un buen rato de cabeza, y es que mientras desarrollamos generalmente documentamos nuestros métodos haciendo uso de los comentarios en XML que nos proporciona VS, sin embargo llega el momento en que esta herramienta solo esta disponible en proyectos de C# y por alguna razón en VB.Net simplemente no aparecen, aun cuando pulsemos una y otra vez &#39;&#39;&#39; que es la combinación que nos permite visualizarlas.&lt;/p&gt; &lt;p&gt;Pues bien la solución es bastante extraña pues en las propiedades del proyecto debemos dirigirnos al apartado de compilación y CHECKEAR la opción “Generar documentación XML”. Puede suceder, como a mi me paso, que la opción estaba checkeada, pero el control se encontraba en un estado similar a deshabilitado, bueno pues simplemente desmarcar y marcar y con eso bastara.&lt;/p&gt; &lt;p&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-tG1djOeO_Ss/T3CtnkwHVGI/AAAAAAAAAiA/fSyZ0H6rdMk/image%25255B15%25255D.png?imgmax=800&quot; width=&quot;413&quot; height=&quot;710&quot;&gt;&lt;/p&gt; &lt;p&gt;Bueno espero como siempre, que les sea de utilidad.&lt;/p&gt; &lt;p&gt;Que la Fuerza del código les acompañe.&lt;/p&gt; &lt;p&gt;Saludos&lt;/p&gt; &lt;p&gt;karloz arba&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/2795756301223143020/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/2795756301223143020' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/2795756301223143020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/2795756301223143020'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2012/03/activar-los-comentarios-xml-de.html' title='Activar los Comentarios XML de documentación en VB.Net cuando han dejado de trabajar.'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-tG1djOeO_Ss/T3CtnkwHVGI/AAAAAAAAAiA/fSyZ0H6rdMk/s72-c/image%25255B15%25255D.png?imgmax=800" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-5360387563252807191</id><published>2012-03-07T09:01:00.001-08:00</published><updated>2012-03-07T09:01:37.122-08:00</updated><title type='text'>Obtener el registro seleccionado en un GridLookupEdit de DevExpress</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Bueno ya tiene un muy buen rato que no agregaba nada al blog, espero como siempre que a todos los que ocupan la Suite de Dx para Windows Forms les sea de utilidad.&lt;/p&gt;&lt;pre&gt;&lt;font color=&quot;#00ff00&quot;&gt;// Asignamos el valor “Visible” del Contenedor en alguna  variable aunque esto claro esta es mejorable&lt;/font&gt;&lt;br /&gt;&lt;font color=&quot;#0000ff&quot;&gt;string valor = lueVerBd.EditValue.ToString();&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#00ff00&quot;&gt;//El control tiene un método que a partir de ese valor seleccionado nos devolverá el registro al que pertenece.&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font color=&quot;#00ff00&quot;&gt;// Claro que este valor lo busca en el campo identificado como Campo Llave.&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font color=&quot;#0000ff&quot;&gt;DataRowView dr;&lt;br /&gt;dr = (DataRowView) lueVerBd.Properties.GetDataSourceRowByKeyValue(valor);&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Bien pues por el momento es todo….&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Happy Coding!!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;karlozarba&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/5360387563252807191/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/5360387563252807191' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/5360387563252807191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/5360387563252807191'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2012/03/obtener-el-registro-seleccionado-en-un.html' title='Obtener el registro seleccionado en un GridLookupEdit de DevExpress'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-514032685155385882</id><published>2011-11-23T13:23:00.001-08:00</published><updated>2011-11-23T13:23:47.100-08:00</updated><title type='text'>Parser Error Message: Could not create type</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Que tal, el día de hoy comentare algo que me tuvo al borde de botar la maquina y dispararle, pues si googleas el mensaje de error “Parser Error Message: Could not create type” encuentras soluciones que no necesariamente te ayudan.&lt;/p&gt; &lt;p&gt;En fin, el caso es el siguiente: &lt;/p&gt; &lt;p&gt;1. Tienes un Web Service que generalmente cuando agregas un proyecto de este tipo, esta configurado como &lt;strong&gt;AnyCPU&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;2. Corres el Ws y resulta que funciona correctamente&lt;/p&gt; &lt;p&gt;3. Requieres cambiar la aplicación para que se compile como &lt;strong&gt;x86 &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;4. Ejecutas nueva e ingenuamente la aplicación, y… Sorpresa!!! te tira el error: “&lt;strong&gt;&lt;em&gt;Parser Error Message: Could not create type&lt;/em&gt;&lt;/strong&gt;” que como mencione, las soluciones encontradas en internet, comentan un error relacionado con un &lt;strong&gt;cambio de nombre o de namespace en tu clase&lt;/strong&gt;, lo cual puede hacerte perder un buen rato tratando de decifrar, sobre todo cuando no has hecho el maldito cambio de nombre o algo parecido.&lt;/p&gt; &lt;p&gt;5. Para empeorar las cosas, si lo regresas como Any, resulta que si jala &lt;img style=&quot;border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none&quot; class=&quot;wlEmoticon wlEmoticon-embarrassedsmile&quot; alt=&quot;Ruborizado&quot; src=&quot;http://lh4.ggpht.com/-ckhkYH8c_YA/Ts1kXEpqbhI/AAAAAAAAAU4/y_U0W8gLVSQ/wlEmoticon-embarrassedsmile%25255B2%25255D.png?imgmax=800&quot;&gt;&lt;/p&gt; &lt;p&gt;Bien pues la solución es la siguiente para el caso descrito…&lt;/p&gt; &lt;p&gt;Resulta que cuando compilas tu WebService como &lt;strong&gt;ANY&lt;/strong&gt;, el resultado se genera en la carpeta &lt;strong&gt;BIN\&lt;/strong&gt; pero cuando configuras para &lt;strong&gt;x86 &lt;/strong&gt;el VS te genera una nueva estructura de directorios identificadas bajo &lt;strong&gt;x86\&lt;/strong&gt; y por alguna razón que no me explico el IIS es incapaz de leer, por lo que jamás encuentra los ensamblados para construir los objetos.&lt;/p&gt; &lt;p&gt;De tal suerte que la solución pasa por dirigirnos a las propiedades del proyecto, en la pestaña &lt;strong&gt;COMPILE&lt;/strong&gt; en la opción “&lt;strong&gt;Build output path&lt;/strong&gt;” debemos mantener el valor: “&lt;strong&gt;bin\&lt;/strong&gt;”, así que si tiene otro valor deberás modificarlo.&lt;/p&gt; &lt;p&gt;A continuación corremos el proyecto y listo!!!&lt;/p&gt; &lt;p&gt;Nuestro Web Service trabaja correctamente.&lt;/p&gt; &lt;p&gt;Como siempre espero que les sea de utilidad.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;em&gt;Best regards And Happy coding.&lt;/em&gt;&lt;/u&gt;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;em&gt;KarlozArba&lt;/em&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/514032685155385882/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/514032685155385882' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/514032685155385882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/514032685155385882'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2011/11/parser-error-message-could-not-create.html' title='Parser Error Message: Could not create type'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-ckhkYH8c_YA/Ts1kXEpqbhI/AAAAAAAAAU4/y_U0W8gLVSQ/s72-c/wlEmoticon-embarrassedsmile%25255B2%25255D.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-7619867309236794050</id><published>2011-11-14T18:01:00.001-08:00</published><updated>2011-11-14T18:01:01.833-08:00</updated><title type='text'>ACTUALIZAR EL @@SERVERNAME DE UNA INSTANCIA SQL SERVER</title><content type='html'>&lt;p&gt;Bien pues aquí un aporte más que seguro les podrá evitar mas de un dolor de cabeza.&lt;/p&gt; &lt;p&gt;En ocasiones contamos con un equipo sea, Pc o Servidor completamente instalado y este cuenta con una instancia de Sql Server, sin embargo por alguna causa [ej. estandarización de nombres de red, en la empresa… como es mi caso &lt;img style=&quot;border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none&quot; class=&quot;wlEmoticon wlEmoticon-confusedsmile&quot; alt=&quot;Confundido&quot; src=&quot;http://lh4.ggpht.com/-ln8enWsr__k/TsHH3HWGEyI/AAAAAAAAAUo/XtSD2ja-g6E/wlEmoticon-confusedsmile%25255B2%25255D.png?imgmax=800&quot;&gt;] es posible que deba ser cambiado el nombre del equipo, tras lo cual seguramente tendremos problemas para conectarnos a nuestra servidor de Sql Server ya que para el motor de Bd el nombre registrado simplemente ya no se encuentra.&lt;/p&gt; &lt;p&gt;Bien pues aquí una forma de repararlo.&lt;/p&gt; &lt;p&gt;1. Hacer una consulta a la vista de sistema: sys.servers:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font color=&quot;#ff0000&quot; face=&quot;Courier New&quot;&gt;SELECT * FROM sys.servers&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;table border=&quot;1&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; width=&quot;513&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;70&quot;&gt;&lt;font size=&quot;1&quot; face=&quot;Courier New&quot;&gt;&lt;strong&gt;server_id&lt;/strong&gt;&lt;/font&gt;&lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;115&quot;&gt;&lt;font size=&quot;1&quot; face=&quot;Courier New&quot;&gt;&lt;strong&gt;name&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/font&gt;&lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;141&quot;&gt;&lt;font size=&quot;1&quot; face=&quot;Courier New&quot;&gt;&lt;strong&gt;product&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/font&gt;&lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;65&quot;&gt;&lt;font size=&quot;1&quot; face=&quot;Courier New&quot;&gt;&lt;strong&gt;provider&amp;nbsp; &lt;/strong&gt;&lt;/font&gt;&lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;120&quot;&gt;&lt;font size=&quot;1&quot; face=&quot;Courier New&quot;&gt;&lt;strong&gt;data_source&lt;/strong&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;70&quot;&gt;&lt;font size=&quot;1&quot; face=&quot;Courier New&quot;&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/font&gt;&lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;115&quot;&gt;&lt;font size=&quot;1&quot; face=&quot;Courier New&quot;&gt;&lt;strong&gt;JCAB\DENALIXPS&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/font&gt;&lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;141&quot;&gt;&lt;font size=&quot;1&quot; face=&quot;Courier New&quot;&gt;&lt;strong&gt;SQL Server&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/font&gt;&lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;65&quot;&gt;&lt;font size=&quot;1&quot; face=&quot;Courier New&quot;&gt;&lt;strong&gt;SQLNCLI &lt;/strong&gt;&lt;/font&gt;&lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;120&quot;&gt;&lt;font size=&quot;1&quot; face=&quot;Courier New&quot;&gt;&lt;strong&gt;JCAB\DENALIXPS&lt;/strong&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt; &lt;p&gt;como vemos el nombre registrado originalmente fue: &lt;strong&gt;JCAB &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;2. Eliminaremos el servidor registrado&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#ff0000&quot; face=&quot;Courier New&quot;&gt;EXEC sp_dropserver ‘JCAB\DENALIXPS’&lt;/font&gt;&lt;/p&gt; &lt;p&gt;3. Ahora registramos el nuevo nombre de servidor: &lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font color=&quot;#ff0000&quot; face=&quot;Courier New&quot;&gt;EXEC sp_addserver &#39;ABP-LAP-002\DENALIXPS&#39;,&#39;LOCAL&#39;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Es importante notar el parametro ‘LOCAL’ pues indica si se trata de una instancia local.&lt;/p&gt; &lt;p&gt;4. Una vez registrado, es necesario ajustar sus opciones de Servidor para que sea accesible, lo cual conseguimos mediante:&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#ff0000&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Courier New&quot;&gt;EXEC sp_serveroption &lt;font color=&quot;#ff0000&quot;&gt;&#39;ABP&lt;/font&gt;-LAP-002\DENALIXPS&#39;,&#39;data access&#39;,&#39;true&#39;&lt;/font&gt;&lt;br&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;5. A modo de comprobación podemos consultar nuevamente &lt;font color=&quot;#ff0000&quot; face=&quot;Courier New&quot;&gt;&lt;strong&gt;sys.servers&lt;/strong&gt;&lt;/font&gt; y adicionalmente&amp;nbsp; &lt;font style=&quot;background-color: #ffffff&quot; color=&quot;#ff0000&quot; face=&quot;Courier New&quot;&gt;@@servername&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Pues espero que les sea útil, hasta aquí por el día de hoy.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Best regards And Happy coding.&lt;/u&gt;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;KARLOZARBA&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/7619867309236794050/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/7619867309236794050' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/7619867309236794050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/7619867309236794050'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2011/11/bien-pues-aqui-un-aporte-mas-que-seguro.html' title='ACTUALIZAR EL @@SERVERNAME DE UNA INSTANCIA SQL SERVER'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-ln8enWsr__k/TsHH3HWGEyI/AAAAAAAAAUo/XtSD2ja-g6E/s72-c/wlEmoticon-confusedsmile%25255B2%25255D.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-1854928299407231787</id><published>2011-10-28T10:10:00.001-07:00</published><updated>2011-10-28T10:10:39.065-07:00</updated><title type='text'>Obtener la Collation [Intercalación] del Servidor o de una Base de Datos en Sql Server</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Hola después de mucho tiempo estoy aquí con una nueva aportación esperando como siempre que les sea de utilidad.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;En muchas ocasiones por cuestiones de Regionalización o codificación de los caracteres manejados por nuestras aplicaciones, requerimos determinar la intercalación ya sea del Servidor o de las Bases de Datos, bien pues aquí una forma muy sencilla de hacerlo. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#ffffff&quot; face=&quot;Courier New&quot;&gt;&lt;strong&gt;SELECT CONVERT(sysname, SERVERPROPERTY(&#39;collation&#39;));&lt;br&gt;GO&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#ffffff&quot; face=&quot;Courier New&quot;&gt;&lt;strong&gt;SELECT DATABASEPROPERTYEX(&#39;NombreBaseDatos,&#39;collation&#39;);&lt;br&gt;GO&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Bien pues por el momento es todo.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Best regards And Happy coding.&lt;/u&gt;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;KarlozArba&lt;/u&gt;&lt;/strong&gt;  </content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/1854928299407231787/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/1854928299407231787' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/1854928299407231787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/1854928299407231787'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2011/10/obtener-la-collation-intercalacion-del.html' title='Obtener la Collation [Intercalación] del Servidor o de una Base de Datos en Sql Server'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-7642578819659509111</id><published>2011-06-20T09:32:00.001-07:00</published><updated>2011-06-20T09:32:15.313-07:00</updated><title type='text'>Recorrer un Dictionary con C#</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Que tal, el&amp;nbsp; día de hoy escribiré muy brevemente como realizar el recorrido de un Dictionary en C#, quizá sea algo muy básico pero hoy al tratar de hacerlo hubo un momento en el que no supe como hacerlo pues no es una lista solo de items sino de pares.&lt;/p&gt; &lt;p&gt;En fin espero que aun cuando se trata de algo sencillo le pueda servir a alguien.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;&lt;strong&gt;Dictionary&amp;lt;string,string&amp;gt; ConceptosCertificado)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/pre&gt;&lt;pre&gt;&lt;strong&gt;StringBuilder CertBuilder = new StringBuilder();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/pre&gt;&lt;pre&gt;&lt;strong&gt;// Recorre los pares&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/pre&gt;&lt;pre&gt;&lt;strong&gt;foreach (KeyValuePair&amp;lt;string,string&amp;gt; Par in ConceptosCertificado)&lt;br /&gt;{&lt;br /&gt;  CertBuilder.AppendLine(string.Format(&quot;{0}:{1}&quot;,Par.Key,Par.Value));&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;// Recorre solo los valores&lt;/strong&gt;&lt;/pre&gt;&lt;pre&gt;&lt;strong&gt;foreach (string Valor in ConceptosCertificado.Values) &lt;/strong&gt;&lt;/pre&gt;&lt;pre&gt;&lt;strong&gt;{ &lt;/strong&gt;&lt;/pre&gt;&lt;pre&gt;&lt;strong&gt;CertBuilder.AppendLine(Par.Value); &lt;/strong&gt;&lt;/pre&gt;&lt;pre&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Saludos&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Happy coding!!!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/7642578819659509111/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/7642578819659509111' title='7 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/7642578819659509111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/7642578819659509111'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2011/06/recorrer-un-dictionary-con-c.html' title='Recorrer un Dictionary con C#'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-3159246358080773398</id><published>2011-03-03T07:40:00.000-08:00</published><updated>2011-03-03T07:40:00.645-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Sql Server"/><title type='text'>Validación de campos XML vacíos en SqlServer 2008</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Saludos a todos, el día de hoy después de mucho agregare una entrada al blog, por más que me prometo a mi mismo que escribiré, bueno pues termino sin hacerlo.&lt;/p&gt; &lt;p&gt;En fin, entrando en materia muchas veces necesitamos validar que un campo de tipo XML en SqlServer 2008 contenga o no un valor, y en muchas más ocasiones XPATH no nos funciona o no queremos ocuparlo, bueno pues para estos casos la solución encontrada es la siguiente:&lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;strong&gt;&lt;font face=&quot;Courier New&quot;&gt;select top(500) xml_arch, * from crm.sis_arch with(nolock) where cast(xml_arch as varchar(max))=&#39;&#39;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font face=&quot;Courier New&quot;&gt;select top(500) xml_arch, * from crm.sis_arch with(nolock) where cast(xml_arch as varchar(max))&amp;lt;&amp;gt;&#39;&#39;&lt;br&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Como verán es una solución muy sencilla pero funcional, además nos permite lógicamente realizar cualquier tipo de comparación o búsqueda en la cadena del XML, se que esta no es la forma natural de hacerlo en este tipo de campos pero seguro que se toparan con casos donde lo apliquen, como en el mío.&lt;/p&gt; &lt;p&gt;Como siempre espero que les sea de utilidad…&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Best regards And Happy coding.&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;karlozarba&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/3159246358080773398/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/3159246358080773398' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/3159246358080773398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/3159246358080773398'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2011/03/validacion-de-campos-xml-vacios-en.html' title='Validación de campos XML vacíos en SqlServer 2008'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-1954140973297492513</id><published>2010-10-18T19:15:00.001-07:00</published><updated>2010-10-18T19:15:33.912-07:00</updated><title type='text'>Acceder a Métodos, Controles o propiedades de un formulario hijo a uno padre. [Windows Forms] C# VB.Net</title><content type='html'>&lt;p&gt;El día de hoy comentare sobre un caso muy usual al trabajar con aplicaciones WindowsForms, por lo menos para mi en .Net 2003, 2005 y 2008.&lt;/p&gt;  &lt;p&gt;En el caso que revisare mediante un ejemplo muy sencillo tenemos:&lt;/p&gt;  &lt;p&gt;a) Un formulario principal, que alberga un GridControl, y un método de agregado de filas al DataTable que alimenta ese GrigControl.&lt;/p&gt;  &lt;p&gt;b) Un formulario secundario que se crea como un objeto desde el formulario principal, y desde el cuál se invocara el método de agregado de filas del GridControl del formulario principal.&lt;/p&gt;  &lt;p&gt;1. Como dije, tenemos un DataTable a nivel de clase:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font color=&quot;#ffffff&quot;&gt;&lt;strong&gt;Private dt As New DataTable()&lt;/strong&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;2. Y en el Evento Load del Formulario principal, armamos la estructura de la tabla y agregamos unos registros de prueba :&lt;/p&gt;  &lt;p&gt;&lt;font color=&quot;#ffffff&quot;&gt;&lt;em&gt;&lt;strong&gt;Try         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dt.Columns.Add(New DataColumn(&amp;quot;a&amp;quot;))          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dt.Columns.Add(New DataColumn(&amp;quot;b&amp;quot;))          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dt.Columns.Add(New DataColumn(&amp;quot;c&amp;quot;))&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color=&quot;#ffffff&quot;&gt;&lt;em&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dt.Rows.Add(&amp;quot;1&amp;quot;, &amp;quot;2&amp;quot;, &amp;quot;3&amp;quot;)         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dt.Rows.Add(&amp;quot;4&amp;quot;, &amp;quot;5&amp;quot;, &amp;quot;6&amp;quot;)          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dt.Rows.Add(&amp;quot;7&amp;quot;, &amp;quot;8&amp;quot;, &amp;quot;9&amp;quot;)          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dt.Rows.Add(&amp;quot;10&amp;quot;, &amp;quot;11&amp;quot;, &amp;quot;12&amp;quot;)&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color=&quot;#ffffff&quot;&gt;&lt;em&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; gc1.DataSource = dt&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color=&quot;#ffffff&quot;&gt;&lt;em&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Catch ex As Exception         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MsgBox(ex.Message)          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; End Try          &lt;br /&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;3. Como dije anteriormente, tenemos un método para agregar nuevos registros al DataTable:&lt;/p&gt;  &lt;p&gt;&lt;font color=&quot;#ffffff&quot;&gt;&lt;em&gt;&lt;strong&gt;Public Sub addRow(ByVal val1 As String, ByVal val2 As String, ByVal val3 As String)         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Try          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dt.Rows.Add(val1, val2, val3)&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color=&quot;#ffffff&quot;&gt;&lt;em&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Catch ex As Exception         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MsgBox(ex.Message)          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; End Try          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; End Sub&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;4. Ahora bien, si este método es llamado desde el formulario principal pues todo va bien, pero si instanciamos un nuevo formulario:&lt;/p&gt;  &lt;p&gt;&lt;font color=&quot;#ffffff&quot;&gt;&lt;em&gt;&lt;strong&gt;Dim f As New Form4         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f.Owner = Me          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f.Show()&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;lo más seguro es que estando en el formulario secundario, estemos tentados a invocar al método, de la siguiente manera:&lt;/p&gt;  &lt;p&gt;&lt;font color=&quot;#ffffff&quot;&gt;&lt;em&gt;&lt;strong&gt;Form2.addRow(TextBox3.Text, TextBox4.Text, TextBox5.Text)         &lt;br /&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;con lo cual, en tiempo de compilación no tendremos ningún problema, sin embargo cuando realicemos el compilado de la aplicación, al ejecutar la aplicación, el método no funciona correctamente. ¿Porqué?&lt;/p&gt;  &lt;p&gt;Bueno, pues porque no podemos acceder a los formulario y sus propiedades hacia arriba de forma directa, por lo que es necesario realizar un &amp;lt;casting&amp;gt; obteniendo el nombre del formulario principal, de la propiedad “owner”:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font color=&quot;#ffffff&quot;&gt;CType(Me.Owner, Form2).addRow(TextBox3.Text, TextBox4.Text, TextBox5.Text)&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;con lo cual el problema queda resuelto.&lt;/p&gt;  &lt;p&gt;Como siempre espero que en algún momento les sea de utilidad&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;font color=&quot;#ffffff&quot;&gt;Best regards And Happy coding.&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;font color=&quot;#ffffff&quot;&gt;KarlozArba&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/1954140973297492513/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/1954140973297492513' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/1954140973297492513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/1954140973297492513'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2010/10/acceder-metodos-controles-o-propiedades.html' title='Acceder a Métodos, Controles o propiedades de un formulario hijo a uno padre. [Windows Forms] C# VB.Net'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-4316082267324023462</id><published>2010-10-13T08:40:00.001-07:00</published><updated>2010-10-13T09:22:46.926-07:00</updated><title type='text'>Formateo de campos Fecha–Hora para Sql Server desde .Net</title><content type='html'>&lt;p&gt;Este post pretendo que sea breve ya que solo es para comentar que en ocasiones nos encontramos el problema de insertar o actualizar datos Datetime desde aplicaciones hechas con  Vb.Net o C# y estos marcan error si no son recibidos como parámetros Sql debido a que llevan el formato 01-10-2010 02:30 p.m. por lo que SQL Server no puede interpretar las cadenas (a.m. | p.m.).&lt;/p&gt;  &lt;p&gt;Esta situación la podemos solvertar de la siguiente forma:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span&gt;VarriableDateTime.ToString(&quot;yyyyMMdd hh:mm:ss&quot;)&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;en un Ejemplo sencillo:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span&gt;string sql = &quot;UPDATE zabp_tareas_ogerp &quot;;     &lt;br /&gt;sql += string.Format(&quot; SET TIEMPO_INICIO = &#39;{0}&#39;, TIEMPO_FIN = &#39;{1}&#39;,HORA_LIBERACION = {2}&quot;,P_Hora_Inicio.ToString(&quot;yyyyMMdd hh:mm:ss&quot;), P_Hora_Fin.ToString(&quot;yyyyMMdd hh:mm:ss&quot;), P_Duracion);      &lt;br /&gt;               sql += string.Format(&quot; WHERE FOLIO={0}&quot;,P_Folio);&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;span&gt;Donde podemos observar como se formatea de la forma: 20101001 14:30:00 con lo que eliminamos el problema.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Como siempre espero que les sea de utilizada.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;u&gt;Best regards And Happy coding.&lt;/u&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;u&gt;KarlozArba&lt;/u&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/4316082267324023462/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/4316082267324023462' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/4316082267324023462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/4316082267324023462'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2010/10/formateo-de-campos-fechahora-para-sql.html' title='Formateo de campos Fecha–Hora para Sql Server desde .Net'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-1234042468404147203</id><published>2010-10-08T10:57:00.001-07:00</published><updated>2010-10-08T10:57:10.806-07:00</updated><title type='text'>Crear tabla en sql server desde una instruccion select</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;En esta ocasión quiero compartirles algo que suele ser muy necesario cuando queremos respaldar los datos de una tabla especifica, sin tener que hacer backup de la BD completa, o cuando necesitamos guardar solo ciertos datos pero no conocemos a priori la estructura que tendrán esos datos e incluso quizá este proceso deba hacerse de forma dinámica por lo que ni siquiera sabemos en que momento se generara. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Bueno la forma es muy sencilla y es la siguiente:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;strong&gt;SELECT [*|| campo1, campo2, campo3… campo(n)] &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;strong&gt;INTO NombreTablaNuevaOTemporal&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;strong&gt;FROM TablaOrigen&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;La explicación más sencilla aún:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Realizamos un SELECT tal y como lo necesitemos pero después del listado del campos necesarios, usaremos la palabra reservada INTO que permite la creación de una tabla con el nombre que señalemos a continuación de dicha instrucción. Quizá la pregunta sea: ¿´Qué pasa cuando la tabla ya existe y contiene datos?, bueno pues, esa tabla y datos son respetados, agregando únicamente los nuevos registros.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Bien, para finalizar un ejemplo sencillo:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;strong&gt;SELECT t.FOLIO, t.ASUNTO &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;strong&gt;INTO test_table FROM zabp_tareas_ogerp t &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;strong&gt;WHERE&amp;#160; t.PARA=&#39;Desarrollo-Carlos Armenta&#39;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Debido a que todo se hace desde un SELECT, podemos hacerlo tan complejo como sea necesario.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;strong&gt;Best regards And Happy coding.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;strong&gt;KarlozArba&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/1234042468404147203/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/1234042468404147203' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/1234042468404147203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/1234042468404147203'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2010/10/crear-tabla-en-sql-server-desde-una.html' title='Crear tabla en sql server desde una instruccion select'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-8527505299564902028</id><published>2010-05-06T23:04:00.001-07:00</published><updated>2010-05-06T23:04:40.311-07:00</updated><title type='text'>Cambiar nombre a un campo, en Sql Server 2008</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Bueno este es mi segundo post, y en esta ocasión mencionare algo que es muy sencillo pero que no en muchas ocasiones sabemos como hacerlo, bueno me refiero a: &lt;em&gt;&lt;strong&gt;“Cambiar el nombre de un Campo en una tabla de Sql Server 2008”&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Realmente es una trabajo muy sencillo, basta con ejecutar el siguiente Store Procedure:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;sp_rename [ @objname = ] &#39;nombre_objeto , [ @newname = ] &#39;nuevo_nombre&#39; [ , &lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;[ @objtype = ] &#39;tipo_objeto ]&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Donde:&lt;/p&gt;  &lt;p&gt;nombre_objeto: se refiere al objeto al que necesitamos cambiar el nombre.&lt;/p&gt;  &lt;p&gt;nuevo_nombre: nuevo identificador para el objeto.&lt;/p&gt;  &lt;p&gt;tipo_objeto: es el tipo del objeto que deseamos renombrar.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Como se pueden imaginar este SP nos es útil para cambiar el nombre de Columnas, Indices, Tipos de Datos de Usuario, Bases de Datos y cualquier cosa que este en sys.objects.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Para nuestro caso usaremos algo como:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;EXEC sp_rename &#39;CO.tbl_chk_out_hst.id_chk_out&#39;, &#39;id_chk_out_hst&#39;, &#39;COLUMN&#39;;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;GO&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Algo que les recomiendo es que aunque no sea obligatorio el uso de Schema.Tabla, ustedes lo utilizen a fin de que los nombres de objetos puedan estar bien calificados.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Finalizando y como recomendación, recordar que si modifican el nombre de una campo, deberan revisar a priori el impacto sobre otros objetos de la BD como vistas, stores, etc, así como sus aplicaciones.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Bien pues espero que les sea de utilidad.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;quot;May the force be with you, and happy coding&amp;quot;.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/8527505299564902028/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/8527505299564902028' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/8527505299564902028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/8527505299564902028'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2010/05/cambiar-nombre-un-campo-en-sql-server.html' title='Cambiar nombre a un campo, en Sql Server 2008'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-5028347229565071112</id><published>2010-04-14T15:00:00.001-07:00</published><updated>2010-04-14T15:00:49.871-07:00</updated><title type='text'>Meet to DDL Triggers</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;En el día a día de la administración de las bases de datos, los cambios en el schema son demasiados, por lo que se vuelve sumamente necesario contar con un mecanismo de auditoria de dichos cambios, que permita dar respuesta a las preguntas ¿qué? ¿como? ¿cuando? ¿quien? WTF?, y que eventualmente también te permitirá echarle la culpa al verdadero responsable de una catástrofe en las BD. &lt;/p&gt;  &lt;p&gt;Bueno en este y otros escenarios más o menos parecidos tienen significado los DDL (Data Definition Language) Triggers, los cuales al igual que los DML Triggers se disparan al generarse&lt;i&gt;ciertos&lt;/i&gt; eventos en ciertos &lt;i&gt;objetos, &lt;/i&gt;es decir, nosotros crearemos un Trigger que realize &amp;quot;algo&amp;quot; en el momento que tenga lugar un suceso determinado en el objeto de la BD que nos interese.&lt;/p&gt;  &lt;p&gt;Estos Trigger (a partir de este momento TR) tienen 2 ambitos: Servidor y Base de Datos, y como es de esperarse responden a diferentes eventos.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Tabla de Eventos para la BD. (&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms189871(v=SQL.90).aspx&quot; target=&quot;_blank&quot;&gt;MSDN&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;table border=&quot;1&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;640&quot;&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_APPLICATION_ROLE (Applies to CREATE APPLICATION ROLE statement and&lt;b&gt;sp_addapprole&lt;/b&gt;. If a new schema is created, this event also triggers a CREATE_SCHEMA event.)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;ALTER_APPLICATION_ROLE (Applies to ALTER APPLICATION ROLE statement and&lt;b&gt;sp_approlepassword&lt;/b&gt;.)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;DROP_APPLICATION_ROLE (Applies to DROP APPLICATION ROLE statement and&lt;b&gt;sp_dropapprole&lt;/b&gt;.)&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_ASSEMBLY&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;ALTER_ASSEMBLY&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;DROP_ASSEMBLY&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;ALTER_AUTHORIZATION_DATABASE (Applies to ALTER AUTHORIZATION statement when ON DATABASE is specified, and &lt;b&gt;sp_changedbowner&lt;/b&gt;.)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;&amp;#160;&lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_CERTIFICATE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;ALTER_CERTIFICATE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;DROP_CERTIFICATE&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_CONTRACT&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;DROP_CONTRACT&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;GRANT_DATABASE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;DENY_DATABASE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;REVOKE_DATABASE&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_EVENT_NOTIFICATION&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;DROP_EVENT_NOTIFICATION&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_FUNCTION&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;ALTER_FUNCTION&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;DROP_FUNCTION&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_INDEX&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;ALTER_INDEX&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;DROP_INDEX&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_MESSAGE_TYPE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;ALTER_MESSAGE_TYPE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;DROP_MESSAGE_TYPE&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_PARTITION_FUNCTION&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;ALTER_PARTITION_FUNCTION&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;DROP_PARTITION_FUNCTION&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_PARTITION_SCHEME&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;ALTER_PARTITION_SCHEME&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;DROP_PARTITION_SCHEME&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_PROCEDURE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;ALTER_PROCEDURE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;DROP_PROCEDURE&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_QUEUE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;ALTER_QUEUE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;DROP_QUEUE&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_REMOTE_SERVICE_BINDING&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;ALTER_REMOTE_SERVICE_BINDING&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;DROP_REMOTE_SERVICE_BINDING&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_ROLE (Applies to CREATE ROLE statement, &lt;b&gt;sp_addrole&lt;/b&gt;, and &lt;b&gt;sp_addgroup&lt;/b&gt;.)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;ALTER_ROLE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;DROP_ROLE (Applies to DROP ROLE statement,&lt;b&gt;sp_droprole&lt;/b&gt;, and &lt;b&gt;sp_dropgroup&lt;/b&gt;.)&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_ROUTE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;ALTER_ROUTE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;DROP_ROUTE&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_SCHEMA (Applies to CREATE SCHEMA statement, &lt;b&gt;sp_addrole&lt;/b&gt;, &lt;b&gt;sp_adduser&lt;/b&gt;,&lt;b&gt;sp_addgroup&lt;/b&gt;, and &lt;b&gt;sp_grantdbaccess&lt;/b&gt;.)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;ALTER_SCHEMA (Applies to ALTER SCHEMA statement and &lt;b&gt;sp_changeobjectowner&lt;/b&gt;.)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;DROP_SCHEMA&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_SERVICE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;ALTER_SERVICE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;DROP_SERVICE&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_STATISTICS&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;DROP_STATISTICS&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;UPDATE_STATISTICS&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_SYNONYM&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;DROP_SYNONYM&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_TABLE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;ALTER_TABLE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;DROP_TABLE&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_TRIGGER&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;ALTER_TRIGGER&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;DROP_TRIGGER&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_TYPE (Applies to CREATE TYPE statement and &lt;b&gt;sp_addtype&lt;/b&gt;.)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;DROP_TYPE (Applies to DROP TYPE statement and&lt;b&gt;sp_droptype&lt;/b&gt;.)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_USER (Applies to CREATE USER statement, &lt;b&gt;sp_adduser&lt;/b&gt;, and&lt;b&gt;sp_grantdbaccess&lt;/b&gt;.)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;ALTER_USER&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;DROP_USER (Applies to DROP USER statement,&lt;b&gt;sp_dropuser&lt;/b&gt;, and &lt;b&gt;sp_revokedbaccess&lt;/b&gt;.)&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_VIEW&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;ALTER_VIEW&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;DROP_VIEW&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;228&quot;&gt;         &lt;p&gt;CREATE_XML_SCHEMA_COLLECTION&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;197&quot;&gt;         &lt;p&gt;ALTER_XML_SCHEMA_COLLECTION&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;213&quot;&gt;         &lt;p&gt;DROP_XML_SCHEMA_COLLECTION&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Tabla de Eventos a nivel del Servidor. (&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms189871(v=SQL.90).aspx&quot; target=&quot;_blank&quot;&gt;MSDN&lt;/a&gt;)&lt;/p&gt;  &lt;table border=&quot;1&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;638&quot;&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;224&quot;&gt;         &lt;p&gt;ALTER_AUTHORIZATION_SERVER&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;198&quot;&gt;&amp;#160;&lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;214&quot;&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;224&quot;&gt;         &lt;p&gt;CREATE_DATABASE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;198&quot;&gt;         &lt;p&gt;ALTER_DATABASE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;214&quot;&gt;         &lt;p&gt;DROP_DATABASE&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;224&quot;&gt;         &lt;p&gt;CREATE_ENDPOINT&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;198&quot;&gt;         &lt;p&gt;ALTER_ENDPOINT&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;214&quot;&gt;         &lt;p&gt;DROP_ENDPOINT&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;224&quot;&gt;         &lt;p&gt;CREATE_LOGIN (Applies to CREATE LOGIN statement, &lt;b&gt;sp_addlogin&lt;/b&gt;,&lt;b&gt;sp_grantlogin&lt;/b&gt;, &lt;b&gt;xp_grantlogin&lt;/b&gt;, and &lt;b&gt;sp_denylogin&lt;/b&gt; when used on a nonexistent login that must be implicitly created.)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;198&quot;&gt;         &lt;p&gt;ALTER_LOGIN (Applies to ALTER LOGIN statement, &lt;b&gt;sp_defaultdb&lt;/b&gt;,&lt;b&gt;sp_defaultlanguage&lt;/b&gt;, &lt;b&gt;sp_password&lt;/b&gt;, and &lt;b&gt;sp_change_users_login&lt;/b&gt;when &lt;i&gt;Auto_Fix&lt;/i&gt; is specified.)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;214&quot;&gt;         &lt;p&gt;DROP_LOGIN (Applies to DROP LOGIN statement, &lt;b&gt;sp_droplogin&lt;/b&gt;, &lt;b&gt;sp_revokelogin&lt;/b&gt;, and &lt;b&gt;xp_revokelogin&lt;/b&gt;.)&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;224&quot;&gt;         &lt;p&gt;GRANT_SERVER&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;198&quot;&gt;         &lt;p&gt;DENY_SERVER&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;214&quot;&gt;         &lt;p&gt;REVOKE_SERVER&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;EVENTDATA()&lt;/h2&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Bien, cuando los eventos mencionados se disparan, la información que detalla lo ocurrido es almacenada en un archivo XML y que es accesible mediante la función EVENTDATA(), a partir de ahí podemos ocupar XQUERY, para consultar la información que necesitemos de forma especifica.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;A continuación les muestro un ejemplo de la información proporcionada por EVENTDATA(). (&lt;a href=&quot;http://www.developer.com/db/article.php/10920_3552096_1/Using-DDL-Triggers-to-Manage-SQL-Server-2005.htm&quot; target=&quot;_blank&quot;&gt;Fuente&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;pre&gt;&lt;p&gt;&amp;lt;EVENT_INSTANCE&amp;gt;&lt;br /&gt;   &amp;lt;EventType&amp;gt;CREATE_TABLE&amp;lt;/EventType&amp;gt;&lt;br /&gt;   &amp;lt;PostTime&amp;gt;2005-07-30T10:48:52.537&amp;lt;/PostTime&amp;gt;&lt;br /&gt;   &amp;lt;SPID&amp;gt;55&amp;lt;/SPID&amp;gt;&lt;br /&gt;   &amp;lt;ServerName&amp;gt;PSE-TEST-JON1&amp;lt;/ServerName&amp;gt;&lt;br /&gt;   &amp;lt;LoginName&amp;gt;PSE-TEST-JON1\Administrator&amp;lt;/LoginName&amp;gt;&lt;br /&gt;   &amp;lt;UserName&amp;gt;dbo&amp;lt;/UserName&amp;gt;&lt;br /&gt;   &amp;lt;DatabaseName&amp;gt;AdventureWorks&amp;lt;/DatabaseName&amp;gt;&lt;br /&gt;   &amp;lt;SchemaName&amp;gt;Person&amp;lt;/SchemaName&amp;gt;&lt;br /&gt;   &amp;lt;ObjectName&amp;gt;Address&amp;lt;/ObjectName&amp;gt;&lt;br /&gt;   &amp;lt;ObjectType&amp;gt;TABLE&amp;lt;/ObjectType&amp;gt;&lt;br /&gt;   &amp;lt;TSQLCommand&amp;gt;&lt;br /&gt;      &amp;lt;SetOptions ANSI_NULLS=&amp;quot;ON&amp;quot;&lt;br /&gt;                  ANSI_NULL_DEFAULT=&amp;quot;ON&amp;quot;&lt;br /&gt;                  ANSI_PADDING=&amp;quot;ON&amp;quot;&lt;br /&gt;                  QUOTED_IDENTIFIER=&amp;quot;ON&amp;quot;&lt;br /&gt;                  ENCRYPTED=&amp;quot;FALSE&amp;quot; /&amp;gt;&lt;br /&gt;      &amp;lt;CommandText&amp;gt;CREATE TABLE [Person].[Address](&lt;br /&gt;                                [AddressID] [int]&lt;br /&gt;                                IDENTITY (1, 1)&lt;br /&gt;                                NOT FOR REPLICATION NOT NULL,&lt;br /&gt;      [AddressLine1] [nvarchar](60) NOT NULL,&lt;br /&gt;      [AddressLine2] [nvarchar](60) NULL,&lt;br /&gt;      [City] [nvarchar](30) NOT NULL,&lt;br /&gt;      [StateProvinceID] [int] NOT NULL,&lt;br /&gt;      [PostalCode] [nvarchar](15) NOT NULL,&lt;br /&gt;      [rowguid] uniqueidentifier ROWGUIDCOL NOT NULL CONSTRAINT&lt;br /&gt;         [DF_Address_rowguid] DEFAULT (NEWID()),&lt;br /&gt;      [ModifiedDate] [datetime] NOT NULL CONSTRAINT&lt;br /&gt;         [DF_Address_ModifiedDate] DEFAULT (GETDATE())&lt;br /&gt;      ) ON [PRIMARY];&amp;lt;/CommandText&amp;gt;&lt;br /&gt;   &amp;lt;/TSQLCommand&amp;gt;&lt;br /&gt;&amp;lt;/EVENT_INSTANCE&amp;gt;&lt;/p&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Como podemos ver, la información presentada es bastante útil e importante, aunque en lo personal me gustaría que cuando realizaras una operación de modificación o de eliminación de un objeto, guardara un copia de la definición anterior. Para aquellos que crear valido recurrir a las Vistas de Sistema y buscar la definición les comento ya lo intente y desafortunadamente el trigger se ejecuta posteriormente al evento de tal forma que la definición de los objetos ya ha cambiado en las vistas de sistema.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bien a continuación pongo un ejemplo propio del trigger que he implementado y que de momento me funciona correctamente, seguramente podrán mejorarlo y adaptarlo a sus necesidades así que ojala lo podamos comentar.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;/**&lt;br /&gt;  &lt;br /&gt;* Trigger DDL para auditoria de cambios en el schema de las bd&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;* Version 1, Alamacena el detalle de los cambios en el schema de&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; las bd, evita que se borren tablas.&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;* 12 de Abril de 2010. &lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;* I.S.C. Juan Carlos Armenta Bautista&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;**/&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;GO &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;IF&amp;#160; EXISTS (SELECT * FROM sys.triggers WHERE parent_class_desc = &#39;DATABASE&#39; AND name = N&#39;tr_chge_log_Db&#39;)&lt;br /&gt;  &lt;br /&gt;BEGIN&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; DISABLE TRIGGER [tr_chge_log_Db] ON DATABASE;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SELECT &#39;[tr_chge_log_Db] Deshabilitado.....&#39; AS msg;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;GO &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;/****** Object:&amp;#160; DdlTrigger [tr_chge_log_Db]&amp;#160;&amp;#160;&amp;#160; Script Date: 04/12/2010 14:45:55 ******/&lt;br /&gt;  &lt;br /&gt;IF&amp;#160; EXISTS (SELECT * FROM sys.triggers WHERE parent_class_desc = &#39;DATABASE&#39; AND name = N&#39;tr_chge_log_Db&#39;)&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;BEGIN&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; DROP TRIGGER [tr_chge_log_Db] ON DATABASE&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SELECT &#39;[tr_chge_log_Db] Borrado.....&#39; AS msg;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;GO &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;create TRIGGER tr_chge_log_Db&lt;br /&gt;  &lt;br /&gt;ON DATABASE&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;FOR CREATE_TABLE, ALTER_TABLE, DROP_TABLE&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ,CREATE_VIEW, ALTER_VIEW, DROP_VIEW&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ,CREATE_PROCEDURE, ALTER_PROCEDURE, DROP_PROCEDURE&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ,CREATE_FUNCTION, ALTER_FUNCTION, DROP_FUNCTION&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ,CREATE_TRIGGER, ALTER_TRIGGER, DROP_TRIGGER&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ,CREATE_INDEX, ALTER_INDEX, DROP_INDEX&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;AS&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;BEGIN&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SET NOCOUNT ON;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SET ARITHABORT ON; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;BEGIN TRY&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; DECLARE @evento as XML;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SET @evento=EVENTDATA();&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; INSERT INTO msdb.dbo.change_db_sch_log(sch_obj,nom_bd,tip_evt,nom_obj,tip_obj,tsql_cmd,nom_login)&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SELECT @evento.value(&#39;(/EVENT_INSTANCE/SchemaName)[1]&#39;,&#39;varchar(256)&#39;),&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; @evento.value(&#39;(/EVENT_INSTANCE/DatabaseName)[1]&#39;,&#39;varchar(256)&#39;),&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; @evento.value(&#39;(/EVENT_INSTANCE/EventType)[1]&#39;,&#39;varchar(50)&#39;),&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; @evento.value(&#39;(/EVENT_INSTANCE/ObjectName)[1]&#39;,&#39;varchar(256)&#39;),&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; @evento.value(&#39;(/EVENT_INSTANCE/ObjectType)[1]&#39;,&#39;varchar(25)&#39;),&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; @evento.value(&#39;(/EVENT_INSTANCE/TSQLCommand)[1]&#39;,&#39;varchar(max)&#39;),&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; @evento.value(&#39;(/EVENT_INSTANCE/LoginName)[1]&#39;,&#39;varchar(256)&#39;)&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; -- Validacion del tipo de evento, si es un drop_table, se anula la operacion&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; IF @evento.value(&#39;(/EVENT_INSTANCE/EventType)[1]&#39;,&#39;varchar(50)&#39;)=&#39;DROP_TABLE&#39;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; BEGIN&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RAISERROR (&#39;No se permite la eliminacion de tablas en la BD.&#39;,16,1);&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ROLLBACK;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; END&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;END TRY&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;BEGIN CATCH&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; DECLARE @ErrorMessage NVARCHAR(4000);&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; DECLARE @ErrorSeverity INT;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; DECLARE @ErrorState INT; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&amp;#160;&amp;#160; SELECT&amp;#160; @ErrorMessage = ERROR_MESSAGE(),@ErrorSeverity = ERROR_SEVERITY(),@ErrorState = ERROR_STATE(); &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&amp;#160;&amp;#160; RAISERROR (@ErrorMessage,@ErrorSeverity,@ErrorState);&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ROLLBACK;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;END CATCH&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;GO &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;SELECT &#39;[tr_chge_log_Db] Creado.....&#39; AS msg;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;…&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Notas finales.&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Como verán para poder borrar o modificar el trigger primero es necesario deshabilitarlo. Asi pues 2 instrucciones que seguro les serviran mucho son:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;ENABLE TRIGGER tg_name ON DATABASE;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;DISABLE TRIGGER tg_name ON DATABASE;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;que creo no requieren mayor explicación.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Sale pues hasta aquí no más, ojala que les sea de utilidad mi primer post.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;mailto:k@rloz.@rb&quot;&gt;k@rloz.@rb&lt;/a&gt;@&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/5028347229565071112/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/5028347229565071112' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/5028347229565071112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/5028347229565071112'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2010/04/meet-to-ddl-triggers.html' title='Meet to DDL Triggers'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5008887765771035003.post-9139957867868420795</id><published>2008-11-18T22:53:00.000-08:00</published><updated>2010-04-13T13:58:12.711-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="About Me"/><title type='text'>Bienvenidos!!!</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF6h1c_oQvDhjGhptA_0NQvEQlpIhjSuqzU1hZnWkR23qJf0Oh-OFDY2qAdE5IQSmQB0tgsn5gwcCYs3HKLC8ytWiPDv1FXoz4MAw9bgcYR-wQmrfp9SgkVvTpHayu79oWSZ3O7yjmX5o/s1600-h/Picture0119.jpg&quot;&gt;&lt;img style=&quot;margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 240px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF6h1c_oQvDhjGhptA_0NQvEQlpIhjSuqzU1hZnWkR23qJf0Oh-OFDY2qAdE5IQSmQB0tgsn5gwcCYs3HKLC8ytWiPDv1FXoz4MAw9bgcYR-wQmrfp9SgkVvTpHayu79oWSZ3O7yjmX5o/s320/Picture0119.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5270260249326626674&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Sean Bienvenidos a mi blog espero publicar algunos articulos propios y de la comunidad, sobre desarrollo de software asi como de redes, esto con la finalidad de recopilar una serie de tips and tricks, que en ocaciones te pasas un rato googleando y no encuentras nada, bien ya tendremos un lugar donde recurrir, ojala existan aportes porque compartir en conocimeinto es un deber y una vocacion, compartamos nuestras experiencias y ganemos juntos.&lt;br /&gt;Saludos.&lt;br /&gt;karloz arba&lt;div class=&quot;cssButtonOuter&quot;&gt;&lt;div class=&quot;cssButtonMiddle&quot;&gt;&lt;div class=&quot;cssButtonInner&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://karlozarba.blogspot.com/feeds/9139957867868420795/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5008887765771035003/9139957867868420795' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/9139957867868420795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5008887765771035003/posts/default/9139957867868420795'/><link rel='alternate' type='text/html' href='http://karlozarba.blogspot.com/2008/11/bienvenidos.html' title='Bienvenidos!!!'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05270822882758362313</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF6h1c_oQvDhjGhptA_0NQvEQlpIhjSuqzU1hZnWkR23qJf0Oh-OFDY2qAdE5IQSmQB0tgsn5gwcCYs3HKLC8ytWiPDv1FXoz4MAw9bgcYR-wQmrfp9SgkVvTpHayu79oWSZ3O7yjmX5o/s72-c/Picture0119.jpg" height="72" width="72"/><thr:total>0</thr:total></entry></feed>