Dateien auslesen und Tabelle in DB auf SQL-Server füllen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Dateien auslesen und Tabelle in DB auf SQL-Server füllen

    Hallo,

    ich habe ein neues Vorhaben am Start, aber ich finde nicht den "Dreh" wie ich am besten vorgehen kann.

    Auf einem Server habe ich ein Share zu unserem File-Server angelegt, hier sind derzeit knapp 17.000 Dateien mit der gesuchten Endung vorhanden. Diese Endung ist aber die mit den wenigsten Dateien, das mal zum testen.

    Mein erster Schritt wäre nun das auslesen der Dateien mit Endung .xx1 und befüllen einer Tabelle auf unserem SQL-Server, ich möchte jedoch die Anzeige gefundener Dateien in Echtzeit anzeigen da sonst der Eindruck entsteht, es tut sich nichts und die Applikation wäre eingefroren.

    Ich erstelle kleinere Programme die mir das Arbeiten erleichtern, daber das ist dann doch ein für mich recht grosses Projekt.

    Wie muss ich vorgehen, vor allem welche Funktionen kann ich nutzen, um ein Zähler und die zuletzt gefundene Datei in meinem Programm in Echtzeit auszugeben?

    Für Eure Tipps lieben Dank im Voraus.

    Viele Grüsse,
    Daniel
    Hi,

    zuerst mal die obligatorische Frage nach dem Sinn. Was hast du mit den Daten vor wenn sie in der Tabelle stehen?

    Welche Informationen der Dateien sollen in die Datenbank?
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Ups, sorry, ein Teil fehlt ja noch :)

    Also, ich möchte vorerst nach den Dateien suchen und in der Tabelle die Dateinamen mit Pfad ablegen, in einem weiteren Feld kommt noch eine Job-Kennung (GUID).

    Die so eingelesenen Dateien werden dann in einem zweiten Schritt abgearbeitet, die Ergebnisse daraus werden dann später in eine weitere Tabelle geschrieben.

    Wichtig ist mir vorerst die Erfassung der Dateien (inkl Pfad) in einer Tabelle als Arbeits-Vorlage für die weiteren Schritte sowie der Anzeige wieviel Dateien schon gefunden und welche die letzte Datei war.

    Viele Grüsse,
    Daniel
    Am Besten du suchst dir mal alle Dateien mit dieser Dateiendung raus und erstellst dir daraus eine Auflistung

    VB.NET-Quellcode

    1. Dim files = New IO.DirectoryInfo("DeinPfad").GetFiles("*.xx1")

    Anschließend kannst du mit der Count Erweiterung anzeigen wie viele Dateien nun bearbeitet werden. Diesen Wert würd ich zB. einer Progressbar als Maximum einstellen.

    Dann gäbe es die Möglichkeit zum Einarbeiten in einem externen Thread welcher per Control.Invoke den Wert der Progressbar verändert und die Anwendung somit nicht einfrieren lässt.
    Andere Möglichkeit wäre dies über Async bzw. Await zu lösen (müsstest danach googlen).

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Die parallel laufende Busy-Anzeige - egal, wie du sie gestaltest - solltest du unbedingt von der eigentlichen Arbeit entkoppeln.
    Also nutze einen Timer, der diese Anzeige nur alle 300ms aktualisiert.
    Weil schneller als alle 300ms kann eh keiner gucken, das würde nur irre Resourcen fressen, für jede gefundene Datei die Busy-Anzeige aktualisieren zu wollen.

    Edit: Jo, und das mit dem Count kannste imo vergessen, denn dafür musste den Count ja erstmal ermitteln, und dann biste ja eiglich schon fertig.
    @DniBo möchtest du die Filenamen erst mal einfach in der Datenbank haben?

    Dann kannst du das direkt durch den SQL Server lösen lassen

    SQL-Abfrage

    1. ​declare @files table (ID int IDENTITY, FileName varchar(100))
    2. insert into @files execute xp_cmdshell 'dir c:\ /b'
    3. select * from @files
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Hi,

    cool, wusste ich nicht das sowas geht :)

    Leider wird so alles eingelesen, nicht nur die mit der gesuchten Endung. Aber ich muss nun schon während dem suchen ein Teil auslesen und daher brauche ich eine andere Möglichkeit.

    Kennt jemand ein funktionierenden Code zur Anwendung der Win32-API (Kernel32.dll) mit FindFirstFile und FindNextFile in vb.net?

    Viele Grüsse,
    Daniel