Hallo,
ich versuche gerade eine Menge Datensätze in eine SQLite Datenbank zu schreiben. Nach etwas suche im Web bin ich auf die möglichkeit gestossen den Insert-Prozess mit "Bulk Insert" wesentlich zu beschleunigen.
Leider durchläuft meine foreach-Schleife nicht alle Einträge sondndern nur 2 und ich finde den Fehler nicht. Liegt es an der Schleife selbst oder am umgeschriebenen Code mit Bulk.
Kann mir mal jemand einen Tip geben, finde leider nicht heraus warum die Schleife nicht bis zum Ende läuft.
ich versuche gerade eine Menge Datensätze in eine SQLite Datenbank zu schreiben. Nach etwas suche im Web bin ich auf die möglichkeit gestossen den Insert-Prozess mit "Bulk Insert" wesentlich zu beschleunigen.
Leider durchläuft meine foreach-Schleife nicht alle Einträge sondndern nur 2 und ich finde den Fehler nicht. Liegt es an der Schleife selbst oder am umgeschriebenen Code mit Bulk.
Kann mir mal jemand einen Tip geben, finde leider nicht heraus warum die Schleife nicht bis zum Ende läuft.
C#-Quellcode
- void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
- {
- //Durchlaufe das Verzeichniss und finde alle Audiodatein
- var allfiles = System.IO.Directory.GetFiles(Dirpath,
- "*.*",
- System.IO.SearchOption.AllDirectories).Where(
- s => s.EndsWith(".mp3") ||
- s.EndsWith(".wav") ||
- s.EndsWith(".wma") ||
- s.EndsWith(".flac") ||
- s.EndsWith(".ape"));
- using (var connection = new SQLiteConnection(@"Data Source = musikdb.db"))
- {
- connection.Open();
- using (var command = new SQLiteCommand(connection))
- {
- using (var transaction = connection.BeginTransaction())
- {
- int i = 0;
- foreach (string file in allfiles)
- {
- i++;
- try
- {
- TagLib.File soundfile = TagLib.File.Create(file);
- string[] filename_vor_split = file.Split('\\');
- string filename = filename_vor_split[filename_vor_split.Length - 1];
- string title = soundfile.Tag.Title;
- string[] artist = soundfile.Tag.Performers;
- string album = soundfile.Tag.Album;
- string tracknr = soundfile.Tag.TrackCount.ToString();
- string year = soundfile.Tag.Year.ToString();
- string genre = soundfile.Tag.TitleSort;
- command.Parameters.AddWithValue("@filename", filename);
- command.Parameters.AddWithValue("@title", title);
- command.Parameters.AddWithValue("@artist", artist);
- command.Parameters.AddWithValue("@album", album);
- command.Parameters.AddWithValue("@track", tracknr);
- command.Parameters.AddWithValue("@year", year);
- command.Parameters.AddWithValue("@genre", genre);
- command.Parameters.AddWithValue("@pfad", file);
- command.CommandText = String.Format(
- "INSERT INTO title (filename, title, artist, album, track, year, genre, pfad) VALUES (@filename, @title, @artist, @album, @track, @year, @genre, @pfad)");
- command.ExecuteNonQuery();
- int percentage = (i + 1) * 100 / anzahl;
- // Report progress to 'UI' thread
- backgroundWorker1.ReportProgress(i);
- }
- catch (Exception)
- {
- }
- transaction.Commit();
- }
- }
- connection.Close();
- }
- }
- MessageBox.Show("Fertig. Es wurden alle Titel importiert.");
- }