Jquery – la potencia sin control no sirve de nada !!

Yo soy de esos programadores web que están disfrutando con las bondades que nos ofrece JQuery desde su aparición. Esta librería nos simplifica enormemente nuestros desarrollos con JavaScript y los hace mucho más productivos.

Pero hasta ahora realmente no había aprovechado todo su potencial y es precisamente en  esta situación cuando me ha defraudado un poco.

Me explico:

He querido tratar todo un interfaz de usuario con JQuery para optimizar la presentación y evitar las idas y venidas de la página para consultar los datos. Para eso recupero la información para rellenar un control, desde mi capa de datos utilizando un método de página y formato Json, de esta manera se evita enviar la información innecesaria de la página.

Estos datos tienen una estructura mas o menos compleja o al menos más compleja que una simple tabla, porque se tiene que representar en diferentes niveles. Sigue leyendo

Evento Seguridad Web XSS y buenas prácticas

Para los despistados o los que no se hayan enterado aún del evento, mañana Martes 17 de Noviembre de 2009, los chicos de secondnug con sus ya famosos  webCasts, me han pedido que repita la charla que hice en el CodeCamp 09 sobre como podemos evitar los típicos ataques web XSS, Inyección SQL, etc.

Si os interesa el tema no os podéis perder esta introducción 100% práctica de la seguridad web con buenas prácticas.

Apuntaros antes de que se cierren las inscripciones !!!

Microsoft Facebook en mi Windows Mobile 6.1

scr_facebook01Hace poquito tiempo que he estrenado un nuevo teléfono con Windows Mobile 6.1

Tengo que reconocer que no tengo mucha experiencia con este sistema y me ha costado un poco configurar el acceso a datos del dispositivo.

Pero lo bueno ha sido cuando he querido instalar la versión de Facebook que Microsoft a creado para Windows Mobile para las versiones 6.*

No ha habido manera que utilizará la conexión correctamente y se conectara a internet, he reinstalando una y otra vez la versión castellana, ingles y porque no tenía el chino. Pero finalmente después de navegar mucho he encontrad la versión que conecta y me deja disfrutar de esta aplicación en mi móvil.

Os adjunto los ficheros necesarios.

Aplicación  images     Idioma Castellano  images

¿Existe la columna con DataReader?

En mi empresa desde un principio hemos utilizado una herramienta propia para generar la capa de lógica de negocios, adaptada  al 100% a nuestras necesidades  y que ha ido creciendo con el tiempo. Eso nos ha beneficiado en tener controlado en todo momento nuestros objetos de negocio y nos ha evitado tener que hacer un salto obligatorio para utilizar alguno de los ORM que existen en el mercado, como puede ser: Entity Framework, NHibernate, etc.

Nuestra capa de acceso a datos “DAL” encapsula toda la lógica de conexiones a datos independientemente del proveedor y hay una de las funciones que retorna un lector de datos para poder personalizar la lectura de los datos desde la capa de lógica de Negocios.

/// <summary>
/// Ejecuta el comando creado y retorna el lector.
/// </summary>
/// <returns>El resultado de la consulta.</returns>
public DbDataReader EjecutarConsulta(string cmd, CommandType tipo)
{
   this.comando.CommandText = cmd;
   this.comando.CommandType = tipo;
   this.Conectar();
   return this.comando.ExecuteReader();
}

Eso facilita la carga del objeto de negocio y optimiza la lectura.

DbDataReader reader = null;
Using (Dal dal = new Dal())
{
  string command = "select id, nombre, descripcion from productos";
  reader = dal.EjecutarConsulta(command, CommandType.Text);
  while (reader.Read())
  {
    ...

Pero uno de los problemas habituales que nos encontraremos con el objeto DataReader es que si no nos gusta leer los datos por posición, como es mi caso y preferimos controlar la columna que deseamos leer. Nos podemos encontrar con el horrible error que no se encuentra la columna que estamos intentando leer.

Ya podemos intentar validar si el objeto es null, pero no funciona:

O si el dato está vacio:

Para poder validar si la columna que estamos consultando existe podemos tener una función en nuestro DAL que valide esta situación utilizando el propio esquena de la tabla:

public bool ValidarColumna( DbDataReader reader, string nombreColumna)
{
   reader.GetSchemaTable().DefaultView.RowFilter =
     "ColumnName= '"  + nombreColumna + "'";

   return (reader.GetSchemaTable().DefaultView.Count > 0);
}

Finalmente cuando queramos hacer la consulta de los datos utilizaremos el validador para evitar errores no controlados en el acceso a datos.

using (Dal dal = new Dal())
{
   string command = @"select id, nombre, descripcion
       from productos";

    reader = dal.EjecutarConsulta(command, CommandType.Text);

    while (reader.Read())
    {
      ProductoData produc = new ProductoData();
      produc.ID = (dal.ValidarColumna(reader, "ID")
        && reader["ID"] != DBNull.Value)?(int)reader["ID"]:0;

      produc.Nombre = (dal.ValidarColumna(reader, "Nombre")
        && reader["Nombre"] != DBNull.Value)
        ?reader["Nombre"].ToString():string.Empty;

      listaProductos.Add(produc);
    }
}

Es una forma un poco rebuscada, pero no conozco ninguna otra forma de verificar esta información.

Espero que os sea útil.