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)
- < < (menor que)
- > > (mayor que)
- " " (dobles comillas)
- ' ' (apóstrofe)
miércoles, 13 de junio de 2012
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]
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));
}
}
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:
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:
Lanzando el siguiente scipt podremos exportar los resultados de la consulta a una hoja de Excel.
El comando tiene muchas más opciones y parámetros configurables que podemos ver en MSDN
En primer lugar debemos habilitar las siguientes opciones:
EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
EXECUTE sp_configure 'Web Assistant Procedures', 1;
RECONFIGURE;
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í.
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.
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
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:
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.
SELECT count(*), campo_1, campo_2
FROM NOMBRE_TABLA
GROUP BY campo_1, campo_2
HAVING COUNT(*)>1
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.
De igual forma podemos obtener una lista de tablas que utiliza un procemiento almacenado con la siguiente consulta:
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'
)
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'
)
SELECT distinct referenced_entity_name
FROM sys.sql_expression_dependencies
WHERE referencing_id = OBJECT_ID('NOMBRE_PROCEDIMIENTO')
FROM sys.sql_expression_dependencies
WHERE referencing_id = OBJECT_ID('NOMBRE_PROCEDIMIENTO')
Suscribirse a:
Entradas (Atom)