Domanda

Qual è l'approccio migliore per sincronizzare un DataSet con i dati in un database? Ecco i parametri:

  • Non possiamo semplicemente ricaricare i dati perché è associato a un controllo UI che un utente potrebbe aver configurato (è una griglia ad albero che può espandere / comprimere)
  • Non possiamo usare un flag di modifica (come un UpdatedTimeStamp) nel database perché le modifiche non sempre fluiscono attraverso l'applicazione (ad esempio un DBA potrebbe aggiornare un campo con un'istruzione SQL)
  • Non è possibile utilizzare un trigger di aggiornamento nel database perché è un sistema multiutente
  • Stiamo utilizzando DataSet ADO.NET
  • Più campi possono cambiare di una determinata riga

Ho esaminato la funzionalità Unisci del DataSet, ma questo non sembra mantenere l'idea di un "ID". colonna. Ho esaminato la funzionalità DiffGram ma il problema qui è che sembrano essere generati da modifiche all'interno dello stesso DataSet piuttosto che da modifiche avvenute su una fonte di dati esterna.

Sono in esecuzione da questa soluzione da un po 'ma l'approccio che conosco funzionerebbe (con molta inefficacia) è quello di creare un DataSet separato e quindi ripetere tutte le righe applicando le modifiche, campo per campo, al DataSet su a cui è legato.

Qualcuno ha avuto uno scenario simile? Cosa hai fatto per risolvere il problema? Anche se non hai riscontrato un problema simile, qualsiasi raccomandazione per una soluzione è apprezzata.

Grazie

È stato utile?

Soluzione

DataSet.Merge funziona bene per questo se è stata definita una chiave primaria per ogni DataTable; il DataSet genererà eventi modificati su qualsiasi controllo dell'interfaccia grafica del database

se la tua tabella è piccola, puoi semplicemente rileggere tutte le righe e unirle periodicamente, altrimenti è una buona idea limitare il set da leggere con un timestamp - basta dire ai DBA di seguire le regole e aggiornare il timestamp; -)

un'altra opzione - che è un po 'di lavoro - è quella di mantenere una coda di righe modificate (timestamp, ID riga) utilizzando un trigger o una procedura memorizzata e basare le query di aggiornamento al di fuori del timestamp nella coda; questo sarà più efficiente se la tabella di base contiene molte righe, consentendo all'utente (tramite un join interno sul record della coda) di estrarre solo le righe modificate dall'ultimo tempo di polling.

Altri suggerimenti

Penso che sarebbe più facile memorizzare un elenco dei nodi che l'utente ha espanso (supponendo che sia possibile identificarli in modo univoco), quindi caricare nuovamente i dati e ricollegarli alla vista ad albero, quindi espandere tutti i nodi precedentemente espansi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top