Riesige Datenmengen bearbeiten

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von mmgg.

    Riesige Datenmengen bearbeiten

    Ich habe einen DataGridView an eine Datenbanktabelle über eine DataSet gebunden.

    Soweit klappt alles ganz gut, nur was wenn die Tabelle Millionen von Datensätzen hat.

    So, wie sich mein Programm verhält, scheint es mir als ob der DataAdapter alle Records versucht in das DataSet zu laden und hängt ewig lang.

    Es gibt aber sicher Konzepte, welche nur einen kleinen Teil der Daten laden und dann bei Bedarf, etwa beim scrollen des DataGridViews weitere Daten nachladen.

    Wie nennt man sowas und wie packe ich das Problem an?

    Hier der Ausschnitt des Quellcodes:

    Quellcode

    1. Dim oCnn As System.Data.SqlClient.SqlConnection
    2. oCnn = New System.Data.SqlClient.SqlConnection(" ... ")
    3. oCnn.Open()
    4. m_DataAdapter = New System.Data.SqlClient.SqlDataAdapter(sSql, oCnn)
    5. m_DataAdapter.FillSchema(Me.ctr_DataSet, System.Data.SchemaType.Source, "REC")
    6. m_DataAdapter.Fill(Me.ctr_DataSet, "REC")
    7. Dim builder As System.Data.SqlClient.SqlCommandBuilder = New System.Data.SqlClient.SqlCommandBuilder(m_DataAdapter)
    naja, gib dem DataAdapter einen SqlCommandText, der eine Where-Klausel beinhaltet, die die Datenmenge einschränkt.

    Allerdings würde ich dir sehr empfehlen, mit typisierten DataSets zu arbeiten. Diese FillSchema-Geschichte da bei dir ist dann unnötig bzw. sogar destruktiv.

    warum typDataset? Weil man damit Daten vernünftig verarbeiten kann, gugge vier Views-Videos

    Dieses Thema - wie die Daten präsentieren und verarbeiten - ist viel wichtiger als wie die Daten vonne DB holen. IMO sollte man sich die DB erst dann vorknöpfen, wenn die Anwendung fast komplett fertig ist.

    Denn während einer Entwicklung muss das Datenmodel oft zig-fach geändert werden, und da jedesmal die DB neu aufsetzen ist total umständlich.
    Ausserdem ist ein DB-Projekt nicht portabel, ein DatasetOnly-Projekt hingegen schon.
    Das mit der where clausel trifft nicht so gnaz wonach er fragte.

    kuck mal auf deisne link, da findest du eien überladung der fill methode, sieht so aus
    openbook.galileocomputing.de/v…/visual_csharp_27_003.htm
    myDaTaAdapter.Fill(myDS, 0, 10, "myTbl")
    dabei werden nur die ersten zehn geladen, wobei die Abfrage trotzdem vollständig ausgeführt wird.
    Es lässt sich eventl aber weitertreiben

    Dann, auch wenn es eventl nicht viel bringt, aber lass doch einfach den commandbuilde an der stelle weg.
    Den brauchst du da nicht. Wenn du ihn aber da setzt wird er natürlich all seine statemenst generieren.
    JonDonym
    Eine Anonymisierung-Tool, das nicht nur deine IP verdeckt, sondern deine History, BrowserTyp, Windows-Version etc.
    Das Tool hat ca. 5 FreeKaskaden und ca. 10 Premium. Minimum 5 EUR für ein Volumen von 650MB.
    Das mit der where clausel trifft nicht so gnaz wonach er fragte.
    Tja, das ist bei mir ganz oft, dass meine Antworten nicht genau die Frage bedienen, sondern häufig auch darüber hinausgehende Ansätze aufzeigen.
    Vlt. nicht deutlich geworden: Zu überlegen ist doch, ob man wirklich 20000 Datensätze abrufen will. Zumindest dem User ist eiglich nicht zuzumuten, sich 20000 Datensätze angucken zu müssen.

    System.Data.Common.DbDataAdapter.Fill(Dataset, Int32, Int32, String) kannte ich noch gar nicht. Aber ist das nicht unperformant, ein Command abzufahren, was 20000 Datensätze erbringt, und davon aber nur 100 zu nehmen?
    @TE: kannst du das bitte ausprobieren, ob das wirklich Beschleunigung bringt?
    Nö - ist definitiv unperformant - hab jetzt nachgelesen: msdn.microsoft.com/de-de/library/kxs7kbfe%28v=vs.100%29.aspx

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ErfinderDesRades“ ()

    nicht 1:1 übernehmen, sonder "Es lässt sich eventl aber weitertreiben"

    EIne Where Klausel.... das ist was er nicht wusste?
    JonDonym
    Eine Anonymisierung-Tool, das nicht nur deine IP verdeckt, sondern deine History, BrowserTyp, Windows-Version etc.
    Das Tool hat ca. 5 FreeKaskaden und ca. 10 Premium. Minimum 5 EUR für ein Volumen von 650MB.