miércoles, 13 de junio de 2012

Caracteres especiales XML

Para introducir caracteres especiales en un archivo xml debemos hacer una pequeña transformación para que puedan ser reconocidos correctamente. Estos caracteres especiales son:

                - &  & (ampersand)
                - &lt;  < (menor que)
                - &gt;  > (mayor que)
                - &quot;  " (dobles comillas)
                - &apos;  ' (apóstrofe)

domingo, 8 de abril de 2012

Visualizar el número de lecturas y escrituras en SQLServer

Con esta select podemos ver el número de lecturas y escrituras que se realizan en nuestro servidor SQLServer

SELECT @@TOTAL_READ [Lecturas]
             , @@TOTAL_WRITE as [Escrituras]

sábado, 4 de febrero de 2012

Copiar contenido de un directorio a otro en C#

Os dejo un procedimiento que encontré (no se donde...) y que utilicé una vez para copiar el contenido de una carpeta en otra.

DirectoryInfo origen = new DirectoryInfo(@"C:\Origen");
DirectoryInfo destino = new DirectoryInfo(@"C:\Destino");
CopyDirectory(origen, destino);


     static void CopyDirectory(DirectoryInfo origen, DirectoryInfo destino)
             {
                 if (!destino.Exists)
                 {
                    destino.Create();
                 }

                 FileInfo[] files = origen.GetFiles();
                 foreach (FileInfo file in files)
                 {
                     file.CopyTo(Path.Combine(destino.FullName,file.Name));
                 }

                 // Subcarpetas
                 DirectoryInfo[] dirs = origen.GetDirectories();
                 foreach (DirectoryInfo dir in dirs)
                 {
                     string destinoDir = Path.Combine(destino.FullName, dir.Name);
                     // llamada recusriva
                     CopyDirectory(dir, new DirectoryInfo(destinoDir));
                 }
        }


Para ello se ha usado el método CopyTo y una llamada recursiva para copiar también todas las subcarpetas contenidas en el directorio origen.


sábado, 28 de enero de 2012

Windows Phone 7.5. Desarrollo de aplicaciones en Silverlight

Windows Phone 7 Mango es el nuevo sistema operativo móvil desarrollado por Microsoft, y diseñado para su uso en  Smartphones. Ofrece más de 500 nuevas características diseñadas para mejorar las actividades multitarea, integrar mejor nuestras aplicaciones, ofrecer información más dinámica y mejorar el desempeño del sistema operativo. Además los nuevos teléfonos que se están lanzando (Nolia Lumia) con este nuevo sistema operativo poseen características técnicas que serán del agrado del público aficionado a la tecnología.

Si estais interesados en empezar a programar aplicaciones con Windows Phone os dejo un enlace de un completísimo libro de Josué Yeray Julián e Ibon Landa.
Windows Phone 7.5. Desarrollo de aplicaciones en Silverlight 

Os dejo también un Cheat Sheet (pdf, png) en tamaño A3 del blog Nordkapp:



domingo, 22 de enero de 2012

Exportar resultados de una query a una hoja Excel

Podemos usar el siguiente script para exportar los resultados de una query a una hoja excel utilizando el comando sp_makewebtask.

En primer lugar debemos habilitar las siguientes opciones:

       EXECUTE sp_configure 'show advanced options', 1;
       RECONFIGURE;
       EXECUTE sp_configure 'Web Assistant Procedures', 1;
       RECONFIGURE;

Lanzando el siguiente scipt podremos exportar los resultados de la consulta a una hoja de Excel.

       DECLARE @cons NVARCHAR(MAX)
       SET @cons = 'SELECT * FROM NOMBRE_TABLA'
       EXEC sp_makewebtask
         @outputfile = 'C:\ARCHIVO_EXCEL.xls',
         @query = @cons,
         @colheaders =1,
         @FixedFont=0,
         @lastupdated=0,
         @resultstitle='titulo'

El comando tiene muchas más opciones y parámetros configurables que podemos ver en MSDN

lunes, 16 de enero de 2012

Pequeñas grandes ayudas para SQLServer

Estas pequeñas ayudas son las que te salvan la vida en muchas ocasiones, ya que no es nada fácil recordar todas las funciones que utiliza cada lenguaje de programación ni la nomenclatura más adecuada. 
Os dejo algunos pdfs que he encontrado de SQLServer en el foro de www.pinaldave.com y que os pueden hacer la vida un poco más fácil:

sábado, 7 de enero de 2012

C# for Sharp Kids

Si estás iniciándote en el mundo de la programación en c# o tienes 12 años y no tienes otra cosa mejor que hacer que dedicarte a la programación, C# for Sharp Kids te vendrá de perlas. Este eBook está pensado para niños y tiene un enfoque muy didáctico para conocer las bases de este lenguaje de programación.
El libro consta de 5 partes:
       parte 1: Primeros pasos
       parte 2: Aprender a comunicarse
       parte 3: El lenguaje c#
       parte 4: Programación con .Net Framework
       parte 5: Más alla de este libro
Para descargar el libro completo pincha aquí. 

viernes, 30 de diciembre de 2011

Is64BitOperatingSystem y Is64BitProcess

Las propiedades estáticas Is64BitOperatingSystem y Is64BitProcess nos permiten saber si el sistema operativo donde se está ejecutando la aplicación es de 64 bits y si el proceso en ejecución es de 64 bits o no, respectivamente. Estas propiedades están disponibles a partir de .Net Framework 4.0 y la clase Environment puede ser localizada en la librería mscorlib.dll del namespace System.

public static bool Is64BitOperatingSystem { get; }
public static bool Is64BitProcess { get; }

lunes, 19 de diciembre de 2011

Parámetros adicionales Specified en WCF desde .Net 1.1

Añadiendo un Web Reference a un servicio WCF en 4.0 desde un proyecto en Visual Studio 2003 en .Net 1.1, observé que se duplicaban los parámetros de los métodos del servicio WCF al hacer la instancia. Los parámetos extra tenían el mismo nombre pero con el sufijo SPecified y eran de tipo Bool. Observando la referencia al método, efectivamente contenía el doble de parámetros.

public string NOMBRE_METODO(int param1, [System.Xml.Serialization.XmlIgnoreAttribute()] bool param1Specified, int param2, [System.Xml.Serialization.XmlIgnoreAttribute()] bool param2Specified) {
object[] results = this.Invoke("NOMBRE_METODO", new object[] {
param1,
param1Specified,
param2,
param2Specified});
return ((string)(results[0]));
}

El problema se debía a los diferentes mecanismos de serialización que utiliza WCF y los servicios ASMX. Los servicios en .Net 1.1 no tienen el concepto de nulo y añaden esos parámetros extra para especificar la opcionalidad de los mismos. La solución al problema es bastante simple, basta con añadir el atributo

[XmlSerializerFormat]
al contrato que estamos utilizando.

Herramienta para comparar Bases de Datos

Hace poco descubrí una herramienta bastante útil que incorpora Visual Studio 2010 para comparar esquemas y datos de bases de datos. Lo único que debemos haces es especificar las 2 bases de datos a comparar (Origen y Destino) y automáticamente nos crea un Script con las querys necesarias para generar la base de datos Destino a partir de la de Origen.
La herramienta tiene muchas más posibilidades pero vamos a describir las nociones básicas para su utilización.
El primer paso es seleccionar desde la barra de menú: Data->Schema Compare->New Schema Comparison
y nos aparecerá la siguiente ventana donde especificamos las 2 bases de datos de 3 formas diferentes: desde proyecto de Visual Studio, desde una conexión a bd o desde archivo de bd.
Una vez seleccionadas pinchamos en OK y obtendremos un esquema de comparación donde podremos elegir los elementos que queremos actualizar o crear de cero en la base de datos Origen.
Solo nos queda pinchar en el botón Export to Editor y obtendremos un Script con el que actualizar el esquema de la base de datos Origen para que sea idéntica a la de Destino. Si quisieramos actualizar además de los esquemas, los registros de la base de datos, seleccionaríamos Data->Data Compare->New Data Comparison y de forma análoga haríamos la comparación.
Espero os sea de gran ayuda.

domingo, 18 de diciembre de 2011

Como resetear un campo IDENTITY

Muchas veces hemos borrado todos los registros de una tabla pero hemos comprobado que la columna IDENTITY no se ha inicializado a 0. Con este comando DBBC podemos reiniciar el valor autoincremental de una columna IDENTITY. Tan solo debemos especificar el nombre de la tabla y el valor que comenzará a incrementarse tras la siguiente inserción.

         DBCC CHECKIDENT (nombre_tabla, RESEED,valor_inicio)

Si lo que queremos es reiniciar este contador interno pondremos el valor_inicio a 0

sábado, 17 de diciembre de 2011

Query para detectar registros iguales en una tabla

Muchas veces nos hemos dejado los ojos en la pantalla buscando campos repetidos en una tabla, pues bien, con esta sencilla consulta podemos detectar los registros de una tabla con idénticos campos. Tán solo debemos especificar los campos que queremos chequear:
SELECT count(*), campo_1, campo_2 
FROM NOMBRE_TABLA 
GROUP BY campo_1, campo_2 
HAVING COUNT(*)>1  

El resultado de la cosulta es una lista de registros cuyos campos especificados son iguales además del número de repeticiones en la tabla.

Query SQL Server para obtener lista de procedimientos que utiliza una tabla

Lanzando la siguiente consulta en nuestra base de datos SQL Server obtendremos una lista de procedimientos almacenados que utiliza una determinada tabla.

SELECT OBJECT_NAME(referencing_id)
FROM sys.sql_expression_dependencies
WHERE referenced_entity_name = 'NOMBRE_TABLA' 
and OBJECT_NAME(referencing_id) in
(
'NOMBRE_PROCEDIMIENTO_1',
'NOMBRE_PROCEDIMIENTO_2', 
'NOMBRE_PROCEDIMIENTO_3' 
) 
De igual forma podemos obtener una lista de tablas que utiliza un procemiento almacenado con la siguiente consulta:

SELECT distinct referenced_entity_name
FROM sys.sql_expression_dependencies
WHERE referencing_id = OBJECT_ID('NOMBRE_PROCEDIMIENTO')