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')