lunes, 15 de octubre de 2007

XML en SQL Server 2005: Métodos del tipo XML

El tipo de datos XML de SQL Server 2005 posee un conjunto de métodos que son utilizados para las operaciones de búsqueda y actualización de contenido XML.
Los métodos del tipo de dato XML son:

  • query(): Ejecuta una expresión XPath o Xquery y retorna el XML resultante

  • value(): Ejecuta una expresión XPath o Xquery y retorna el valor de un único resultado. Este valor puede ser transformado a otro tipo de datos.

  • exist(): Ejecuta una expresión XPath o Xquery y retorna si el resultado es distito de vacio (true) o no (false).

  • modify(): Permite modificar un documento o fragmento XML.

  • nodes(): Ejecuta una expresión XPath o Xquery y retorna el XML resultante.

lunes, 8 de octubre de 2007

Operadores C#: as e is

Hace un tiempo me encontre en muchos trozos de codigo con expresiones en c# que contenian el operador as, operador que no conocia y por ende me vi en la obligacion de investigar su proposito.
Para poder explicar el operador as es recomendable primero conocer el operador is. Este es un operador binario que retorna un booleano y se utiliza de la siguiente manera:

bool retorno = objeto is Clase_X

Si el objeto no tiene el valor null y además es posible obtener este objeto como una instancia de la Clase_X (mediante polimorfismo) sin producirse una Excepcion, entonces el valor devuelto es true, en cualquier otro caso el retorno sera false.
Conociendo este operador se puede comprender de manera simple el operador as.
La forma de utilizar el operador as es la siguiente:

Clase_X MiClase = objeto as Clase_X;

Esta expresion es equivalente a lo siguiente:

Clase_X Miclase;
if( objeto is Clase_X ){
Miclase = (Clase_X)objeto;
} else {
MiClase = null;
}

Se entiende?, la idea principal es tener un operador que realiza cast, pero en caso de no ser posible el cast requerido devuelva el valor null y no lance una CastException como lo haria una expresion como la siguiente.

Clase_X Miclase = (Clase_X)objeto;

Espero sea de utilidad a más de alguien.

viernes, 5 de octubre de 2007

XML en SQL Server 2005: Tipo de Dato XML

SQL Server 2005 posee un nuevo tipo de datos que permite representar un documento XML. Con este tipo de datos se puede utilizar para definir el tipo de dato almacenado en una columna de una tabla, para definir el tipo de una variable declarada, para definir parámetros de procedimientos almacenados, entre otras cosas.

El tipo de datos XML permite almacenar tanto documentos como fragmentos XML.

Algunos de los beneficios de utilizar el tipo de datos XML son:

  • Está completamente integrado al motor de SQL Server 2005.

  • Los datos contenidos en este tipo son manipulados nativamente como XML en el motor de datos.

  • Ofrece soporte para operaciones de selección, inserción, modificación y eliminación a nivel de nodos.

  • Permite mejorar el rendimiento de las operaciones indexando los campos XML de una tabla

  • Se preserva por completo el orden y la estructura del documento


Este tipo de almacenamiento presenta algunas desventajas con respecto al almacenamiento como texto de documentos XML. Algunas de ellas son:

  • Se pierden comentarios, espacios y tabulaciones en el contenido del documento

  • La jerarquía contenida está limitada a 128 niveles

  • El contenido total del tipo XML no puede superar los 2GB de tamaño

jueves, 4 de octubre de 2007

Almacenamiento Aislado en .NET

Esta clase permite definir la creación y utilización de archivos y directorios en entornos aislados.
Los entornos aislados son útiles cuando se necesita acceder a datos contenidos en archivos (por ejemplo configuraciones) y se quiere evitar que el assembly pueda ser explotado con fines maleficos (por ejemplo, acceder a otros recursos dentro del sistema de archivos).

Antes de utilizar almacenamiento aislado es necesario definir el alcance de dicho almacenamiento, es decir, quien y desde donde podrá acceder a los datos ahí almacenados. Los métodos de almacenamiento son:

Assembly/Machine: Corresponde a información del Assembly a nivel de máquina, por ejemplo, archivos de configuración que tendrá una aplicación comúnes para todos los usuarios de una máquina.
Asssembly/User: Datos del assembly a nivel de usuario, sólo cuando el usuario en cuestión ejecute el assembly dado se podrá acceder a los datos almacenados.
Domain/Machine: Similar a Assembly/Machine, pero a nivel de dominio de apicación (AppDomain).
Domain/User: Similar a Assembly/User, pero a nivel de dominio de apicación (AppDomain).

A continuación ejemplos de como crear almacenamientos aislados.

// nivel Assembly/Machine
IsolatedStorageFile machineStorage = IsolatedStorageFile.GetMachineStoreForAssembly();

// nivel Assembly/User
IsolatedStorageFile userStorage = IsolatedStorageFile.GetUserStoreForAssembly();

// nivel Domain/Machine
IsolatedStorageFile machineDomainStorage = IsolatedStorageFile.GetMachineStoreForDomain();

// nivel Domain/User
IsolatedStorageFile userDomainStorage = IsolatedStorageFile.GetUserStoreForDomain();

Con la clase IsolatedStorageFileStream es posible crear archivos en un almacenamiento aislado. IsolatedStorageFileStream deriva de la clase FileStream, por lo que su comportamiento es muy similar a cualquier Stream de datos.

A continuación, un ejemplo del uso de IsolatedStorageFileStream:

IsolatedStorageFile almacen = IsolatedStorageFile.GetUserStoreForAssembly();

IsolatedStorageFileStream configuracion = new IsolatedStorageFileStream("Configuracion.dat", FileMode.Create, almacen);

StreamWriter sw = new StreamWriter(configuracion)
sw.WriteLine("Nombre = francisco");
sw.Close();
configuracion.Close();

miércoles, 3 de octubre de 2007

String v/s StringBuilder

Un objeto de tipo String permite Almacenar una cadena de texto o cadena de caracteres. De la misma manera un objeto de tipo StringBuilder almacena una cadena de caracteres o texto.

Existe una gran diferencia entre ambas implementaciones: String es inmutable, mientras que StringBuilder permite mutaciones.

¿Qué significa realmente esto?
Bueno tal como lo dice el concepto, String es inmutable, por ende no puede cambiar. Esto significa que no es posible agregar contenido a un String ya definido.
¿Cómo dice?, ¿Entonces qué diablos hace el siguiente código?

string miString = "Hola";
miString = miString + " Mundo";

Bueno, la primera línea crea un objeto de tipo String inicializándolo en un valor de texto "Hola", luego, en la segunda línea, lo que efectivamente se realiza es:

  • Crear un nuevo objeto String, que tendrá como valor el valor del objeto miString concatenado con el valor " Mundo".

  • Asignar a miString este nuevo objeto creado.


En resumen, un String no es mutable y cada vez que se "modifica" su valor, realmente lo que se hace es crear un nuevo objeto String y asignarlo a la variable "modificada".

Esta acción puede traer serios problemas de eficiencia y seguridad, ya que eventualmente podría acarrear problemas de desborde de memoria (sobretodo en witios web) lo que implica una serie de riesgos en cuanto a seguridad.

En la otra esquina tenemos la clase StringBuilder, la que mencione es mutable y por ende, puede variar su contenido. Un objeto de tipo StringBuilder permite agregar, eliminar, sustituir e insertar datos sin crear una nueva instancia de la clase, lo que significa un ahorro e recursos comparado con un objeto String.

La manera de trabajo de StringBuilder es la siguiente:

  • maneja un buffer que permite agregar datos directamente si el dato agregado es menor al espacio libre en el buffer.

  • Si el dato es mayor que el buffer, entonces se solicita un nuevo buffer con tamaño mayor, se copian los datos actuales, y finalmente se agregan los nuevos datos.


Al comparar ambos tipos de datos, es posible identificar las siguientes características.

  • Si la cantidad y tamaño de datos a agregar a un string es constante y conocida, entonces es más eficiente utilizar un objeto de tipo String.

  • Si la cantidad y tamaño de datos a agregar a un string es variable y/o desconocida, entonces una intancia de StringBuilder presenta mayores beneficios que una instancia de String.

martes, 2 de octubre de 2007

1, 2, 3 | Mi Sitio Web

Hace un par de meses, Microsoft lanzó un sencillo Sistema de Gestión de Contenidos (CMS) basado en ASP.NET 2.0.

Este CMS en sí es bastante sencillo y permite, de una manera simple, crear un sitio Web dinámico con funcionalidades básicas para las personas que no posean un gran nivel de experticia en cuanto a la creación de páginas Web. La administración es vía web y no se requiere de programación para utilizarlo.

En el siguiente enlace, hay una guía para comenzar a utilizar este CMS desde cero.





Saludos.

Volviendo a las pistas

Luego de varios meses de inactividad, este blog vive nuevamente....

chachannnnnn