Pregunta

¿Cuál es el mejor enfoque para sincronizar un DataSet con datos en una base de datos? Aquí están los parámetros:

  • No podemos simplemente recargar los datos porque está vinculado a un control de IU que un usuario puede haber configurado (es una cuadrícula de árbol que puede expandir / contraer)
  • No podemos usar un cambio en la base de datos (como Updated TimeStamp) en la base de datos porque los cambios no siempre fluyen a través de la aplicación (por ejemplo, un DBA podría actualizar un campo con una declaración SQL)
  • No podemos usar un desencadenante de actualización en la base de datos porque es un sistema multiusuario
  • Estamos utilizando conjuntos de datos ADO.NET
  • Varios campos pueden cambiar de una fila dada

He analizado la capacidad de combinación del conjunto de datos, pero esto no parece mantener la noción de un " ID " columna. He analizado la capacidad de DiffGram, pero el problema aquí es que parecen generarse a partir de cambios dentro del mismo DataSet en lugar de cambios que ocurrieron en alguna fuente de datos externa.

He estado ejecutando desde esta solución por un tiempo, pero el enfoque que sé que funcionaría (con mucha inefectividad) es construir un DataSet separado y luego iterar todas las filas aplicando cambios, campo por campo, al DataSet en que está ligado.

¿Alguien ha tenido un escenario similar? ¿Qué hiciste para resolver el problema? Incluso si no se ha encontrado con un problema similar, se agradece cualquier recomendación para una solución.

Gracias

¿Fue útil?

Solución

DataSet.Merge funciona bien para este si tiene una clave principal definida para cada DataTable; el DataSet elevará los eventos modificados a cualquier control de GUI de base de datos

si su tabla es pequeña, puede volver a leer todas las filas y combinarlas periódicamente; de ??lo contrario, limitar el conjunto para que se lea con una marca de tiempo es una buena idea; simplemente diga a los DBA que sigan las reglas y actualicen la marca de tiempo; -)

otra opción, que es un poco de trabajo, es mantener una cola de fila modificada (marca de tiempo, ID de fila) usando un disparador o procedimiento almacenado, y basar las consultas de actualización fuera de la marca de tiempo en la cola; esto será más eficiente si la tabla base tiene muchas filas en ella, lo que le permite (a través de una unión interna en el registro de cola) extraer solo las filas modificadas desde la última vez que se realizó la encuesta.

Otros consejos

Creo que sería más fácil almacenar una lista de los nodos que el usuario ha expandido (asumiendo que puede identificar cada uno de forma única), luego volver a cargar los datos y volver a enlazarlos a la vista de árbol, y luego expandir todos los nodos previamente expandidos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top