Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [VB.NET2010-SQLServer] Gestire dati di grandi dimensioni

    Buongiorno a tutti,
    stò scrivendo un gestionale in VB.Net con database SQL Server e tecnica LINQ to SQL.
    Premetto che leggo molto e mi piace rendermi la vita difficile ma non sono un programmatore professionista.
    Non intendo utilizzare DataGridView perchè i dati da visualizzare e gestire saranno tanti (ad esempio un listino di ricambi per autocarro contiene circa 200'000 record) pertanto sarebbe assurdo (credo) visualizzare tutti i dati in un controllo. Pertanto la mia scelta si è spostata sulle maschere.

    A questo punto espongo il mio quesito:
    Mi trovo sulla schermata degli articoli quindi diciamo che ho Produttore, Codice, Descrizione e tutto il resto delle info in dettaglio (peso,volume,ecc...) e tutte le tabelle referenziate... ovviamente posso visualizzare un solo articolo per volta ma se effetto una ricerca devo comunque scorrere tranquillamente (ad esempio con la freccia DOWN o UP) tra gli articoli interessati (salvati in qualche modo) e a tal proposito chiedevo qualche consiglio: una volta che effettuo la ricerca per esempio voglio sapere i ricambi FIAT e faccio una ricerca con una SELECT con produttore = "FIAT" mi conviene salvare tutti i dati oppure prendermi solo gli indici? se prendo solo gli indici è come se dovessi poi fare un SELECT ogni volta che scorro con DOWN o UP lungo la matrice...

    Come mi consigliate di gestire tanti dati?

    Non so' se sono stato chiaro e mi scuso se non lo sono stato...
    Grazie mille in ogni caso

  2. #2
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    ciao, Puoi gestire questa situazione con le query paginate.
    Le query paginate consistono nel prendere il risultato di una query a blocchi di N record. Linq (e di rimando linq to sql) offre i metodi Skip e Take atti allo scopo.

    lista = context.Pezzi.Where(c => c.Categoria == "CAMION").Skip(10).Take(10);

    recupera i record dall'11 al 20 del result filtrato.
    Occhio che una cosa del genere:
    codice:
    lista context.Pezzi.where(c => c.Categoria == "CAMION").ToList();
    listaPaginata = lista.Skip(10).Take(10);
    non serve a nulla dal momento che ToList() itera l'intero resulset.

    A questo punto sapendo (almeno) il numero totale dei record dell'intero result (te lo prendi sempre con Linq) e tenendo traccia dell'attuale record visualizzato, ogni volta che "esaurisci" il result parziale ne prendi un altro da dieci (10 è indicativo sei tu che decidi):

    listaParziale = context.Pezzi.where(...).Skip(posizioneAttuale + 1).Take(10);

    Abbiamo appena scalfito quello che è un argomento vastissimo ma che purtroppo è importante.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.