2011-10-01 14 views
7

Voglio capire lo scopo dei dataset quando possiamo comunicare direttamente con il database usando semplici istruzioni SQL. Inoltre, qual è il modo migliore? Aggiornare i dati nel set di dati e quindi trasferirli al database in una sola volta o aggiornare direttamente il database?Qual è lo scopo dei set di dati?

risposta

28

voglio capire lo scopo della serie di dati quando possiamo comunicare direttamente con il database utilizzando semplici istruzioni SQL.

Perché hai del cibo nel tuo frigo, quando puoi andare direttamente al supermercato ogni volta che vuoi mangiare qualcosa? Perché andare al supermercato ogni volta che vuoi uno spuntino è estremamente scomodo.

Lo scopo di DataSets è di evitare di comunicare direttamente con il database utilizzando semplici istruzioni SQL.Lo scopo di un DataSet è di agire come una copia locale economica dei dati a cui tieni, in modo da non dover continuare a effettuare costose chiamate ad alta latenza nel database. Ti lasciano guidare fino al data store una volta, raccogli tutto ciò che ti servirà per la prossima settimana e lo infili nel frigo in cucina in modo che sia lì quando ne hai bisogno.

Inoltre, quale modo è migliore? Aggiornare i dati nel set di dati e quindi trasferirli al database in una sola volta o aggiornare direttamente il database?

Ordinate una dozzina di prodotti diversi da un sito web. Qual è il modo migliore: consegnare gli articoli uno alla volta non appena sono disponibili presso i loro produttori o attendere che siano tutti disponibili e spedirli tutti in una volta? Il primo modo, ottieni ogni oggetto il prima possibile; il secondo modo ha costi di consegna inferiori. Quale è il migliore? Come diamine dovremmo saperlo? Spetta a voi decidere!

La strategia di aggiornamento dei dati è migliore è quella che fa la cosa in un modo che soddisfa meglio le esigenze e le esigenze del cliente. Non ci hai detto quale sia la metrica del cliente per "migliore", quindi la domanda non può essere risolta. Cosa vogliono i tuoi clienti: le ultime cose non appena disponibili o una tariffa di consegna bassa?

+0

grazie per la spiegazione: D – Lihini

+0

A proposito, nessun cliente. Solo io. È solo un sistema di gestione delle scorte che sto facendo per la pratica. Poiché i dati vengono ripetutamente utilizzati per la visualizzazione e l'aggiornamento, suppongo che i set di dati siano la risposta. Tuttavia, c'è questo problema che in caso di un errore del sistema, tutto il lavoro svolto dall'utente verrà perso a meno che il database non venga aggiornato per ogni singolo aggiornamento eseguito dall'utente. È possibile prevenirlo con i set di dati? – Lihini

+0

@Lizzie: È un ottimo candidato per una nuova domanda. –

0

In genere mi piace esercitarmi, se devo eseguire un gruppo di processi analitici su un grande insieme di dati, verrà riempito un set di dati (o un datatable a seconda della struttura). In questo modo è un modello disconnesso dal database.

Ma per le query DML preferisco le risposte rapide direttamente al database (preferibilmente tramite stored proc). Ho trovato questo è il più efficiente, e con query ben sintonizzati non è affatto male sul db.

11

I set di dati supportano l'architettura disconnessa. È possibile aggiungere dati locali, eliminarli e quindi utilizzare SqlAdapter è possibile trasferire tutto nel database. È anche possibile caricare il file xml direttamente nel set di dati. Dipende davvero da quali sono le tue esigenze. È anche possibile impostare le relazioni di memoria tra le tabelle in DataSet.

E btw, l'utilizzo di query sql dirette incorporate nell'applicazione è un modo davvero pessimo e poco efficace di progettazione dell'applicazione. La tua applicazione sarà soggetta a "Sql Injection". In secondo luogo, se si scrivono query come quelle incorporate nell'applicazione, Sql Server deve eseguire il suo piano di esecuzione ogni volta che le stored procedure vengono compilate e l'esecuzione è già decisa al momento della compilazione. Anche il server Sql può modificare il suo piano quando i dati diventano grandi. In questo modo otterrai un miglioramento delle prestazioni. Atleast usa le stored procedure e convalida l'input junk in quello. Sono intrinsecamente resistenti a Sql Injection.

Stored procedure e set di dati sono la strada da percorrere.

Vedere questo diagramma:

enter image description here

Edit: Se siete in .NET Framework 3.5, 4.0 è possibile utilizzare il numero di ORM come Entity Framework, NHibernate, Subsonic. Gli ORM rappresentano il tuo modello di business in modo più realistico. È sempre possibile utilizzare stored procedure con ORM se alcune delle funzionalità non sono supportate in ORM.

Per esempio: Se si scrive un CTE ricorsivo (Common Table Expression) le procedure memorizzate sono molto utili. Si verificheranno troppi problemi se si utilizza Entity Framework per questo.

+0

Mi piacerebbe non essere d'accordo - direi che usare un mappatore oggetto-relazionale (come Entity Framework, che supporta anche stored procedure) per trasformare i tuoi dati relazionali in oggetti appropriati è la strada da percorrere ..... –

+0

@ marc_s: sarei anche d'accordo. Ma questa domanda si occupa di .Net Framework 2.0 e I quando ho detto "Stored Procedures and Dataset" intendevo che erano la strada da seguire per Ado.Net insieme alla buona vecchia classe SqlHelper. – TCM

+0

@GertArnold: Grazie per l'individuazione. Ho corretto. – TCM

3

This page spiega in dettaglio in quali casi è necessario utilizzare un Dataset e in quali casi si utilizza l'accesso diretto alle banche dati