<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>El Blog de Quique</title><link>http://geeks.ms/blogs/erodriguez/default.aspx</link><description>Uno de Solares que pasaba por aqui...</description><dc:language /><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Despedida</title><link>http://geeks.ms/blogs/erodriguez/archive/2010/01/24/despedida.aspx</link><pubDate>Sun, 24 Jan 2010 22:14:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:165853</guid><dc:creator>Quique</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/erodriguez/rsscomments.aspx?PostID=165853</wfw:commentRss><comments>http://geeks.ms/blogs/erodriguez/archive/2010/01/24/despedida.aspx#comments</comments><description>&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;Hay situaciones en la vida que te la cambian completamente. Eso me pas&amp;oacute; hace un a&amp;ntilde;o, ha sido un a&amp;ntilde;o duro y muy complicado, pero como se suele decir despu&amp;eacute;s de la tormenta llega la calma. Mi vida ha cambiado y por eso he tomado la decisi&amp;oacute;n de cerrar una etapa, la cual me ha apasionado y tras varios a&amp;ntilde;os de trabajo como programador he decidido cerrar el visual studio y dedicarme a otras cosas. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;Quiero agradecer a muchas personas en especial a mis amigos, a trav&amp;eacute;s de estas l&amp;iacute;neas, todo el apoyo que he recibido durante este a&amp;ntilde;o, y a mis compa&amp;ntilde;eros de trabajo y jefes lo que me ense&amp;ntilde;aron, su tiempo y su dedicaci&amp;oacute;n.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;&amp;ldquo;Las despedidas siempre duelen, aun cuando haga tiempo que se ans&amp;iacute;en&amp;rdquo; (Arthur Schnitzler)&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;Mucha suerte a tod@s&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=165853" width="1" height="1"&gt;</description></item><item><title>Procedimientos almacenados y permisos</title><link>http://geeks.ms/blogs/erodriguez/archive/2009/01/19/procedimientos-almacenados-y-permisos.aspx</link><pubDate>Mon, 19 Jan 2009 10:17:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:140638</guid><dc:creator>Quique</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/erodriguez/rsscomments.aspx?PostID=140638</wfw:commentRss><comments>http://geeks.ms/blogs/erodriguez/archive/2009/01/19/procedimientos-almacenados-y-permisos.aspx#comments</comments><description>&lt;p&gt;Como norma general mi cabeza tiende a olvidar a asignar los permisos a los usuarios en los procedimientos almacenados, en mis a&amp;ntilde;os de programador siempre que se pon&amp;iacute;a algo en producci&amp;oacute;n fallaba por los permisos que yo no asignaba (y creo que el resto tampoco), as&amp;iacute; que tocaba asignarlos uno a uno, una labor encantadora...&lt;/p&gt;
&lt;p&gt;Indagando he encontrado como resolverlo y de una forma facil asignar permisos a todos los usuarios (Quiz&amp;aacute;s haya mas formas de resolverlo, estar&amp;iacute;a encantado de o&amp;iacute;rlas):&lt;/p&gt;
&lt;p&gt;1.- Crear un rol en Sql server database&amp;nbsp;que se llame por ejemplo db_spexecutor, en el que asignamos los usuarios de sql server que queramos.&lt;/p&gt;
&lt;p&gt;2.- En la pesta&amp;ntilde;a de seguridad buscamos los procedimientos almacenados &lt;/p&gt;
&lt;p&gt;3.- Podemos ir mas facil de 1 en 1 asignando permisos de ejecucion.&lt;/p&gt;
&lt;p&gt;Pero si seguimos pensando que esto es una lata...&lt;/p&gt;
&lt;p&gt;1.- Crear un rol en Sql server database&amp;nbsp;que se llame por ejemplo db_spexecutor, en el que asignamos los usuarios de sql server que queramos.&lt;/p&gt;
&lt;p&gt;2.- Crear el procedimiento almacenado:&lt;/p&gt;
&lt;p&gt;CREATE PROCEDURE spGrantExectoAllStoredProcs @user sysname&lt;br /&gt;AS &lt;/p&gt;
&lt;p&gt;SET NOCOUNT ON&lt;/p&gt;
&lt;p&gt;-- 1 - Variable declarations&lt;br /&gt;DECLARE @CMD1 varchar(8000)&lt;br /&gt;DECLARE @MAXOID int&lt;br /&gt;DECLARE @OwnerName varchar(128)&lt;br /&gt;DECLARE @ObjectName varchar(128)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;-- 2 - Create temporary table&lt;/p&gt;
&lt;p&gt;CREATE TABLE #StoredProcedures(OID int IDENTITY (1,1),&lt;br /&gt;StoredProcOwner varchar(128) NOT NULL, StoredProcName varchar(128) NOT NULL)&amp;nbsp; &lt;/p&gt;
&lt;p&gt;-- 3 - Populate temporary table&lt;/p&gt;
&lt;p&gt;INSERT INTO #StoredProcedures (StoredProcOwner, StoredProcName)&lt;br /&gt;SELECT ROUTINE_SCHEMA, ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME NOT LIKE &amp;#39;dt_%&amp;#39; AND ROUTINE_TYPE = &amp;#39;PROCEDURE&amp;#39; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;-- 4 - Capture the @MAXOID value&lt;/p&gt;
&lt;p&gt;SELECT @MAXOID = MAX(OID) FROM&lt;/p&gt;
&lt;p&gt;#StoredProcedures&lt;/p&gt;
&lt;p&gt;-- 5 - WHILE loop&lt;br /&gt;WHILE @MAXOID &amp;gt; 0&lt;br /&gt;BEGIN&lt;/p&gt;
&lt;p&gt;-- 6 - Initialize the variables&lt;br /&gt;SELECT @OwnerName = StoredProcOwner,@ObjectName = StoredProcName FROM StoredProcedures&lt;br /&gt;WHERE OID = @MAXOID&lt;/p&gt;
&lt;p&gt;-- 7 - Build the string&lt;br /&gt;SELECT @CMD1 = &amp;#39;GRANT EXEC ON &amp;#39; + &amp;#39;[&amp;#39; + @OwnerName + &amp;#39;]&amp;#39; + &amp;#39;.&amp;#39; + &amp;#39;[&amp;#39; + @ObjectName + &amp;#39;]&amp;#39; + &amp;#39; TO &amp;#39; &lt;a href="mailto:+@user"&gt;+@user&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;-- 8 - Execute the string&lt;br /&gt;EXEC(@CMD1) &lt;/p&gt;
&lt;p&gt;-- 9 - Decrement @MAXOID&lt;br /&gt;SET @MAXOID = @MAXOID - 1&lt;/p&gt;
&lt;p&gt;END&lt;/p&gt;
&lt;p&gt;-- 10 - Drop the temporary table&lt;/p&gt;
&lt;p&gt;DROP TABLE&lt;/p&gt;
&lt;p&gt;#StoredProcedures&lt;/p&gt;
&lt;p&gt;SET&lt;/p&gt;
&lt;p&gt;NOCOUNT OFF&lt;br /&gt;GO&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;"&gt;Al ejecutarle nos pedira el usuario, le decimos el rol o un usuario en concreto y todos los permisos asignados de golpe.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;"&gt;Espero que os sirva.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Fuente: &lt;a href="http://www.mssqltips.com/tip.asp?tip=1203"&gt;http://www.mssqltips.com/tip.asp?tip=1203&lt;/a&gt;&lt;/p&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=140638" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/erodriguez/archive/tags/Sql+Server/default.aspx">Sql Server</category></item><item><title>Sino sabes inglés no eres un programador</title><link>http://geeks.ms/blogs/erodriguez/archive/2008/12/30/sino-sabes-ingl-233-s-no-eres-un-programador.aspx</link><pubDate>Tue, 30 Dec 2008 14:05:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:136909</guid><dc:creator>Quique</dc:creator><slash:comments>18</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/erodriguez/rsscomments.aspx?PostID=136909</wfw:commentRss><comments>http://geeks.ms/blogs/erodriguez/archive/2008/12/30/sino-sabes-ingl-233-s-no-eres-un-programador.aspx#comments</comments><description>&lt;p&gt;Leyendo blogs en el RSS atrasados por culpa de mis vacaciones y otras cuestiones, me encuentro un post de &lt;a class="" title="Scott Hanselman" href="http://www.hanselman.com/blog/DoYouHaveToKnowEnglishToBeAProgrammer.aspx"&gt;Scott Hanselman&lt;/a&gt;, en el que se comenta si hace falta saber inglés para programar.&amp;nbsp; Esta es una cuestión que siempre está en mi cabeza y creo que en la de muchos. Quizás no te haga falta saber inglés&amp;nbsp; para programar, aunque siempre se aprende, ya que todo el framerwork de desarrollo está en inglés por ejemplo: using System; Lo usamos como si fuera español estando en ingles,&amp;nbsp;y sabemos su significado. &lt;/p&gt;
&lt;p&gt;Pero, ¿hay que ir más allá? Yo creo que sí (incluso por abrirte puertas), creo que los que quieren estar a la ultima y avanzar deben tener mucho más nivel que lo basico&amp;nbsp;del idioma de Shakespeare,&amp;nbsp;para poder leer los comentarios de la MSDN en ingles (lo siento odio el traductor ese que tienen), leer blogs (aunque creo que en este sentido hemos mejorado bastante habiendo cada vez más difusión en español), escuchar conferencia, escribir o simplemente poder comunicarte con alguien&amp;nbsp;fuera&amp;nbsp;de tu país en este mundo cada día más global. &lt;/p&gt;
&lt;p&gt;El problema que reside en España, es que llevamos toda la vida estudiando inglés y toda la vida sin tener ni idea de inglés.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Como resumen, nivel de&amp;nbsp;ingles alto&amp;nbsp;para programar creo que no, cada vez hay más documentación en español, pero nivel alto para estar a la última en programación, indispensable. ¿Lo mejor? creo que nivel medio como minimo&amp;nbsp;para ser un programador&lt;/p&gt;
&lt;p&gt;¿Qué opináis?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=136909" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/erodriguez/archive/tags/Off+Topic/default.aspx">Off Topic</category><category domain="http://geeks.ms/blogs/erodriguez/archive/tags/Desarrollo/default.aspx">Desarrollo</category></item><item><title>DataSets, DataTables y cambios continuos</title><link>http://geeks.ms/blogs/erodriguez/archive/2008/12/12/datasets-datatables-y-cambios-a-todas-horas.aspx</link><pubDate>Thu, 11 Dec 2008 23:18:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:127760</guid><dc:creator>Quique</dc:creator><slash:comments>23</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/erodriguez/rsscomments.aspx?PostID=127760</wfw:commentRss><comments>http://geeks.ms/blogs/erodriguez/archive/2008/12/12/datasets-datatables-y-cambios-a-todas-horas.aspx#comments</comments><description>&lt;p&gt;Siempre recordaré cuando jugábamos de pequeños, en todos los grupos siempre había un &amp;quot;listillo&amp;quot; o &amp;quot;aventajado&amp;quot; que cuando estábamos en plena partida siempre se inventaba alguna nueva regla o norma para intentar ganar, eso siempre nos obligaba a hacer cambios en nuestras estrategias, para intentar ser el ganador del juego.&lt;/p&gt;
&lt;p&gt;Algo parecido me ha pasado desde que trabajo con datos, primero con los recordsets de VB y ahora con los datasets y datatables del Visual Studio .net; es decir, siempre accediendo a los datos&amp;nbsp;de las consultas a través de cadenas de texto, pero claro siempre hay un &amp;quot;listillo&amp;quot;, en estos casos los administradores de bases de datos o los jefes o cualquier persona con poder suficiente para decirte: &amp;quot;bien ahora que tienes el campo Codigo de la tabla clientes que seguro que usas en 3 sitios muy concretos, se va a llamar Id_Cliente, así que en 1 hora estará todo cambiado, así que venga a por ello&amp;quot;. Tu como buen, rápido y eficiente&amp;nbsp;empleado ctrl + h o replace&amp;nbsp;&amp;quot;Codigo&amp;quot; por &amp;quot;Id_cliente&amp;quot;, justo cuando lo vas a hacer cumpliendo plazos (te sientes el rey del mundo), te das cuenta de que &amp;quot;mierda a quien se le ocurriría poner como campo principal de la tabla proveedores Codigo también&amp;quot;, mi gozo en un pozo, ahora toca revisar todos los códigos y ver donde se puede cambiar. Tras las 8 horas de rigor llega el jefe y te pregunta: &amp;quot;Que ya acabaste eso?, si es un cambio sencillo, se hace de 2 patadas&amp;quot;, y tu acordándote de la persona que le cambio los pañales.&lt;/p&gt;
&lt;p&gt;Seguro que esta situación la hemos vivido, la vivimos y la viviremos muchos desarrolladores en&amp;nbsp;nuestro dia a día.&lt;/p&gt;
&lt;p&gt;Una forma que hace tiempo &amp;quot;descubrí&amp;quot; se trata de un pequeño truquito, que gracias al EDM averiguamos, es, crear un enumerador por cada&amp;nbsp;tabla de la BBDD con todos los campos de la misma, entonces cuando queremos acceder a un campo tenemos que&amp;nbsp;hacer algo como:&lt;/p&gt;
&lt;p&gt;String field = dTable.Rows[0][Clientes.Codigo.ToString()].ToString() //Accedemos al valor de la fila 0, de la columna código de un datatable&lt;/p&gt;
&lt;p&gt;Si ya tenemos una clase con los datos de las columnas (segun el modelo de aplicacion que usamos en Maldivas)&amp;nbsp;, podemos insertar un enumerador que se llame por ejemplo Fields y que contenga lo de antes. Esto tiene una pega y es que los que useis FxCop os dara un warning en la definición de la clase por tener el enumerador dentro de la clase, entonces nos quedaria así:&lt;/p&gt;
&lt;p&gt;String field = dTable.Rows[0][Clientes.Fields.Codigo.ToString()].ToString() &lt;/p&gt;
&lt;p&gt;Con esto podemos estar preparados para cuando llegue el malvado administrador de base de datos o tu jefe y diga: &amp;quot;Cambia el campo&amp;quot;, y con un simple refactoring del enumerador, tendríamos en todos los sitios del programa nuestro campo cambiado.&lt;/p&gt;
&lt;p&gt;Ahora llega el momento de los &amp;quot;menos trabajadores&amp;quot; que estarán pensando, ya pero claro yo que tengo 1000 tablas de 1000 campos cada una, tengo que mantener eso....¡¡¡INMANTENIBLE!!! Para eso tenemos una herramienta que se llama CodeDom, desde la cual se puede generar código simplemente leyendo información de la base de datos, generando el fichero de código a través de los datos obtenidos de las columnas. &lt;/p&gt;
&lt;p&gt;Otra ventaja que tenemos con este metodo es que tenemos un &amp;quot;intellisense&amp;quot; para poder acceder de forma facil a los campos que queremos que contenga la fila.&lt;/p&gt;
&lt;p&gt;Otra forma de resolver este metodo es creando constantes de tipo string y con el nombre del campo como valor de la constate. Esto tiene algunos problemas, mucho lio, muchas variables, y que perdemos ese intellisense que con el otro caso tendríamos.&lt;/p&gt;
&lt;p&gt;Espero que os sea de utilidad y si conoceis otros metodos que sirvan para resolver este tema, me encantaria comentarlo con vosotros.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=127760" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/erodriguez/archive/tags/Desarrollo/default.aspx">Desarrollo</category></item><item><title>Los analistas no son dioses (pero casi)...</title><link>http://geeks.ms/blogs/erodriguez/archive/2008/12/09/los-analistas-no-son-dioses-pero-casi.aspx</link><pubDate>Tue, 09 Dec 2008 18:43:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:126624</guid><dc:creator>Quique</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/erodriguez/rsscomments.aspx?PostID=126624</wfw:commentRss><comments>http://geeks.ms/blogs/erodriguez/archive/2008/12/09/los-analistas-no-son-dioses-pero-casi.aspx#comments</comments><description>&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Una pregunta que siempre me hago a mi mismo es: ¿Se debe dedicar mucho tiempo a analizar los requerimientos de una aplicación? o ¿es mejor&amp;nbsp; pasar mas rápido y volver siempre atrás para no perder mucho tiempo en analizar?, con esto me refiero también a los sprint planning meeting de scrum.&lt;/span&gt;&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Una cosa que no me gustan y que me ponen de mala leche, son los continuos cambios y el &amp;quot;volver&amp;quot; siempre a re-re-re-re-re-hacer lo mismo, porque un analista o analista-programador, por no querer &amp;quot;perder&amp;quot; mucho tiempo dice el primer día: &amp;quot;Hay que hacer las cosas así A-B-C&amp;quot;, (como dijo mi profesor de autoescuela), la primera impresión es la que cuenta. El 2º día cuando lo ve dice: &amp;quot;pero como está hecho esto asiiii no sirve porque es B-A-C&amp;quot;, ya pero me dijiste que lo hiciera así pero bueno a re-hacer toca. 3º Día: &amp;quot;Como esta echo asiiiiiiii si es C-A-B ahora que me acuerdo &amp;quot; aggggggg otra vez noooooo. No hubiera sido más fácil que el analista tomara aire, pensara 10 min, reflexionara un poco todos los aspectos y dijera: &amp;quot;Después de analizarlo fríamente, despacio tienes que hacerlo así: D-J-K&amp;quot; , hubiera ahorrado mucho tiempo, dinero y quebraderos de cabeza.&lt;/span&gt; 
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Sé que los analistas no son dioses, pero deberían serlo?, con esto que ahorraríamos? muchas veces creo que tiempo, esfuerzo y sobre todo alguna reprimenda a muchos desarrolladores por no tener algo tan sencillo y rápido que se hace en 1 día (sabiendo que es lo que hay que hacer y cómo hacerlo claro).&lt;/span&gt; 
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=126624" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/erodriguez/archive/tags/Analisis/default.aspx">Analisis</category></item><item><title>Enumeradores, desarrolladores y cambios en aplicaciones</title><link>http://geeks.ms/blogs/erodriguez/archive/2008/11/21/enumeradores-y-combos.aspx</link><pubDate>Fri, 21 Nov 2008 17:54:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:118818</guid><dc:creator>Quique</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/erodriguez/rsscomments.aspx?PostID=118818</wfw:commentRss><comments>http://geeks.ms/blogs/erodriguez/archive/2008/11/21/enumeradores-y-combos.aspx#comments</comments><description>&lt;p&gt;Una de las cosas que menos me gustan cuando he desarrollado aplicaciones son los cambios en cadenas de texto, sobre todo&amp;nbsp;en los ComboBox y demas objetos similares, lo tipico del: &amp;quot;En vez de que ponga Izquierda que ponga Izda&amp;quot;, entonces habia que buscar todos y hacer cambios, si es poco usado va rapido pero si se usa mucho mas tiempo...&lt;/p&gt;
&lt;p&gt;Se que mucha de esta funcionalidad se puede resolver con controles heredados, pero no es el fondo del asunto, supongamos que ...&lt;/p&gt;
&lt;p&gt;Cargar estos valores fijos&amp;nbsp;en un combo a la antigua usanza tendriamos que hacer:&lt;/p&gt;
&lt;p&gt;Combo.Items.add(&amp;quot;Izquieda&amp;quot;)&lt;/p&gt;
&lt;p&gt;Combo.Items.add(&amp;quot;Derecha&amp;quot;)&lt;/p&gt;
&lt;p&gt;Combo.Items.add(&amp;quot;Ambas&amp;quot;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Pero porque no usar otro metodo:&lt;/p&gt;
&lt;p&gt;Creamos&amp;nbsp;un enumerador:&lt;/p&gt;
&lt;p&gt;public enum Mano&lt;/p&gt;
&lt;p&gt;{Izquierda,Dercha,Ambas}&lt;/p&gt;
&lt;p&gt;Usamos su nombre como cadenas, ademas es constante en todo el programa y ademas&amp;nbsp;es facil hacer refactoring?&lt;/p&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;foreach&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; (&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;Mano&amp;nbsp;item&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;in&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;Enum&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;.GetValues(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;typeof&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;Mano&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;)))&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; 
&lt;p&gt;{Combo.Items.add(item.ToString());}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Con&amp;nbsp;el&amp;nbsp;enumerador&amp;nbsp;podemos hacer comparaciones con los datos (poniendo el ToString() al campo del enumerador):&lt;/p&gt;
&lt;p&gt;if (Combo.Text == Mano.Izquierda.ToString())&amp;nbsp;&amp;nbsp; {//Operaciones}&lt;/p&gt;
&lt;p&gt;Con refactoring podemos cambiar en todo el programa Izquierda por Izda, y solventarlo rapidamente.&lt;/p&gt;
&lt;p&gt;Para los que os pregunteis, ya y como hago yo para hacerlo con frases en vez de palabras: &amp;quot;Mano izquierda&amp;quot;, pues bien lo mismo pero con un &amp;quot;truquito&amp;quot;&lt;/p&gt;
&lt;p&gt;public enum Mano&lt;/p&gt;
&lt;p&gt;{Mano_Izquierda,Mano_Dercha,Ambas}&lt;/p&gt;
&lt;p&gt;Al cargar simplemente hacemos un replace: &lt;/p&gt;&lt;font color="#0000ff"&gt;foreach&lt;/font&gt;&lt;font size="2"&gt; (&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;Mano&amp;nbsp;item&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;in&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;Enum&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;.GetValues(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;typeof&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;Mano&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;)))&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;
&lt;p&gt;{Combo.Items.add(item.ToString().Replace(&amp;quot;_&amp;quot;, &amp;quot; &amp;quot;));}&lt;/p&gt;
&lt;p&gt;Y claro siempre que queramos usar el enumerador hay que poner el replace..&lt;/p&gt;
&lt;p&gt;El fondo del asunto es el de acceder a una forma facil al enumerador para poder usarlo de &amp;quot;otra forma&amp;quot;.&lt;/p&gt;
&lt;p&gt;Espero que os sea de utilidad....&lt;/p&gt;&lt;/font&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/font&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=118818" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/erodriguez/archive/tags/Desarrollo/default.aspx">Desarrollo</category></item><item><title>Union Vs Union All</title><link>http://geeks.ms/blogs/erodriguez/archive/2008/11/20/union-vs-union-all.aspx</link><pubDate>Thu, 20 Nov 2008 21:47:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:118369</guid><dc:creator>Quique</dc:creator><slash:comments>10</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/erodriguez/rsscomments.aspx?PostID=118369</wfw:commentRss><comments>http://geeks.ms/blogs/erodriguez/archive/2008/11/20/union-vs-union-all.aspx#comments</comments><description>&lt;p&gt;El otro día en un curso sobre las novedades de SQL Server 2008 con los chicos del CIIN, hablando sobre los operadores Union salió a relucir. ¿Es lo mismo dos sentencias Unidas por un Union que por un Union ALL? &lt;/p&gt;
&lt;p&gt;A primera vista las sentencias no dan error, pero no&amp;nbsp; es lo mismo poner Union que Union ALL.&lt;/p&gt;
&lt;p&gt;¿Diferencia?, básicamente cuando concatenamos con un Union el resultado nos saca sólo los resultados distintos, en cambio con el Union ALL, nos selecciona todos los registros, aunque este duplicado.&lt;/p&gt;
&lt;p&gt;Con una tabla con datos: 1,2,3,4,5,6,7&lt;br /&gt;Otra tabal con datos: 2,3,8,9,0&lt;/p&gt;
&lt;p&gt;El resultado con Union seria: 1,2,3,4,5,6,7,8,9,0&lt;br /&gt;El resultado con Union ALL seria: 1,2,2,3,3,4,5,6,7,8,9,0&lt;/p&gt;
&lt;p&gt;Para resultados en los que tenemos claro que no se van a repetir los valores es conveniente usar Union ALL, debido a que Union hace un distinct de los datos, penalizando el rendimiento. &lt;/p&gt;
&lt;p&gt;Interesante diferencia...&lt;/p&gt;
&lt;p&gt;PD.1.: Union no sirve para campos Text y NText, pero si sirve el Union ALL (gracias Juan Ignacio).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=118369" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/erodriguez/archive/tags/Sql+Server/default.aspx">Sql Server</category></item><item><title>VS Team Database RC1</title><link>http://geeks.ms/blogs/erodriguez/archive/2008/11/19/vs-team-database-rc1.aspx</link><pubDate>Wed, 19 Nov 2008 22:47:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:117849</guid><dc:creator>Quique</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/erodriguez/rsscomments.aspx?PostID=117849</wfw:commentRss><comments>http://geeks.ms/blogs/erodriguez/archive/2008/11/19/vs-team-database-rc1.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;Una herramienta del Visual Studio, que todos sabemos que existe y creo que ha pasado desapercibido en Geeks, si me equivoco corregirme (será que le usamos todos), es que Microsoft ha liberado VSTS 2008 Database Edition GDR Release Candidate:&lt;/p&gt;&lt;p&gt; &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=bb3ad767-5f69-4db9-b1c9-8f55759846ed&amp;amp;displaylang=en" title="http://www.microsoft.com/downloads/details.aspx?FamilyID=bb3ad767-5f69-4db9-b1c9-8f55759846ed&amp;amp;displaylang=en" target="_blank"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=bb3ad767-5f69-4db9-b1c9-8f55759846ed&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Así que si alguno estáis usando alguna CTP, Agosto o Septiembre, podéis descargarla, han mejorado alguna cosa, y algún error sigue habiendo, a ver si van mejorando. Ya os iré comentando alguna cosa sobre ella.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=117849" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/erodriguez/archive/tags/Team+Database/default.aspx">Team Database</category></item><item><title>Mi primer post…</title><link>http://geeks.ms/blogs/erodriguez/archive/2008/11/19/mi-primer-post.aspx</link><pubDate>Wed, 19 Nov 2008 22:19:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:117837</guid><dc:creator>Quique</dc:creator><slash:comments>13</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/erodriguez/rsscomments.aspx?PostID=117837</wfw:commentRss><comments>http://geeks.ms/blogs/erodriguez/archive/2008/11/19/mi-primer-post.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;Quiero empezar esta aventura en Geeks, saludando a tod@s.&lt;br /&gt;&lt;br /&gt;Primero dar las gracias a Rodrigo y a la gente de Plain, por darme la alternativa, como se suele decir en los toros. Tampoco me quiero olvidar de mis compañeros y mis jefes tanto de Energy Watch, como de Oran (de ser bien nacido es ser agradecido como se suele decir).&lt;br /&gt;&lt;br /&gt;Espero estar a la altura de este blog, mi idea es de comentar cosas sobre desarrollo , C#, Sql server, Team Database, DevExpress, Resharper y en general cualquier Add-In que cae en mis manos, aunque sin olvidarnos de todo lo nuevo con lo que Microsoft nos “obsequia” cada poco tiempo.&lt;br /&gt;&lt;br /&gt;Sobre mi rápidamente:&lt;br /&gt;&lt;br /&gt;Tengo 28 años, Vivo en Solares, empecé con esto del desarrollo con 11 años haciendo cursos de Basic, Lotus, DBase III… Hasta que no empecé la carrera de Ing. Informática no empezó a interesarme realmente el desarrollo. Llevo 6 años trabajando. Estuve a punto de “quemarme” pero ahora disfruto el doble (siempre que no me toque limpiar la fibra óptica, o buscar un toro de 3000 Kg ;-)…).&lt;br /&gt;&lt;br /&gt;Otro aspecto que me apasiona es discutir con mi jefe y mis compañeros, hace la jornada más “agradable”&amp;nbsp; (el día que no hayas discutido con tu jefe es un día perdido). &amp;nbsp;&lt;br /&gt;&lt;br /&gt;No os quiero aburrir más, asi que lo dicho, un saludo a todos. &lt;br /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=117837" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/erodriguez/archive/tags/Off+Topic/default.aspx">Off Topic</category></item></channel></rss>
