none
Obtener datos en tiempo real ADO.Net

    Question

  • Hola,

    Soy nueva en el desarrollo en Visual Studio .Net y estoy intentando hacer un sistema que me permita mostrar en tiempo real los datos que generan las transacciones hechas por varios usuarios a la vez. Mi base de datos esta en Sql Server y ya desarrolle un prototipo utilizando dataset, pero solo he logrado datos desconectados, si quiero datos actualizados debo refrescar el dataset. Mi pregunta es ¿existe la posibilidad de tener datos que estén conectados siempre a la base datos mediante el uso de los dataset? o si existe algun tipo de comunicación donde pueda tener datos en tiempo real y mostrarlos en Windows Form?.

    Espero su ayuda.

    Thursday, June 17, 2010 3:46 PM

Answers

  • No llegará a ser tiempo real, lo más que puedes hacer desde un simle programa cliente es realizar un "polling" cada cierto tiempo para obtener datos nuevos. Por ejemplo, cada 5 segundos puedes enviar un SELECT al servidor para que traiga datos nuevos. Esto lo puedes hacer con un DataAdapter que te llene un DataSet si quieres, pero tembién puedes usar un SqlCommand para enviar directamente una sentencia y recoger los datos con un ExecuteScalar o un ExecuteReader (o ExecuteNonquery si devuelves los resultados como parámetros de salida).

    Si se vuelve muy lenta la consulta directa contra la tabla que contiene los datos, puedes ponerle a esa tabla un trigger que incremente un único campo en un único registro de una pequeña tabla creada sólo para ese fin. De esta manera, el polling lo haces contra esa diminuta tabla y así no se vuelve lento. De hecho, esto es lo que hace internamente ASP.NET cuando configuras las dependencias de cache contra base de datos por medio de polling.

    Si lo del polling no es suficientemente bueno para lograr la inmediatez de respuesta que deseas, otra alternativa es instalar un Trigger de CLR en el servidor (suponiendo que sea un SQL Server 2005 o posterior), usando una DLL de .Net para detectar los cambios de la tabla. Esta DLL puede enviar notificaciones a un programa cliente usando cualquier mecanismo de comunicación inter-procesos, como por ejemplo Remoting.

     

    • Marked as answer by diolennisg Thursday, June 17, 2010 8:25 PM
    Thursday, June 17, 2010 8:07 PM

All replies

  • No llegará a ser tiempo real, lo más que puedes hacer desde un simle programa cliente es realizar un "polling" cada cierto tiempo para obtener datos nuevos. Por ejemplo, cada 5 segundos puedes enviar un SELECT al servidor para que traiga datos nuevos. Esto lo puedes hacer con un DataAdapter que te llene un DataSet si quieres, pero tembién puedes usar un SqlCommand para enviar directamente una sentencia y recoger los datos con un ExecuteScalar o un ExecuteReader (o ExecuteNonquery si devuelves los resultados como parámetros de salida).

    Si se vuelve muy lenta la consulta directa contra la tabla que contiene los datos, puedes ponerle a esa tabla un trigger que incremente un único campo en un único registro de una pequeña tabla creada sólo para ese fin. De esta manera, el polling lo haces contra esa diminuta tabla y así no se vuelve lento. De hecho, esto es lo que hace internamente ASP.NET cuando configuras las dependencias de cache contra base de datos por medio de polling.

    Si lo del polling no es suficientemente bueno para lograr la inmediatez de respuesta que deseas, otra alternativa es instalar un Trigger de CLR en el servidor (suponiendo que sea un SQL Server 2005 o posterior), usando una DLL de .Net para detectar los cambios de la tabla. Esta DLL puede enviar notificaciones a un programa cliente usando cualquier mecanismo de comunicación inter-procesos, como por ejemplo Remoting.

     

    • Marked as answer by diolennisg Thursday, June 17, 2010 8:25 PM
    Thursday, June 17, 2010 8:07 PM
  • Gracias por tan clara respuesta
    Thursday, June 17, 2010 8:27 PM