2016-09-05 5 views
0

Ich muss Daten aus einer Textdatei in eine Flat-File-Datenbank importieren. Ich bin mir sicher, dass es einen schnelleren Weg gibt, alle Daten in die Datenbank zu laden, aber ich weiß nicht wie.schnellere Methode zum Importieren von Daten aus der Textdatei

private void ImportButton_Click(object sender, EventArgs e) 
{ 
    string Path = string.Empty; 

    OpenFileDialog ofd = new OpenFileDialog(); 
    ofd.Filter = "Text File|*.txt"; 
    ofd.ShowDialog(); 

    if (ofd.FileName == string.Empty) return 

    Path = ofd.FileName; 

    string data; 
    using (var sr = new StreamReader(Path)) 
    { 
     data = sr.ReadToEnd(); 
    } 

    var items = data.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); 

    var count = 0; 
    foreach (var info in items.Select(ItemInfo.FromText).Where(info => info != null)) 
    { 
     count++; 
     info.Index = ++Envir.ItemIndex; 
     Envir.ItemInfoList.Add(info); 
    } 

    MessageBox.Show(count + " Items have been imported"); 
    UpdateInterface(true); 
} 
+0

Das sieht aus wie es wäre ziemlich schnell. Sie könnten den Code verkleinern, indem Sie 'var items = File.ReadAllLines (Path);'. – Enigmativity

+1

'Envir.ItemInfoList.Add (info);' - Ist das, wo Sie in die db schreiben? –

+3

Sie sagen nicht, wie Envir.ItemInfoList implementiert ist. Wenn es sich um einen synchronen Aufruf an etwas wie Entity Framework handelt, könnte dieser Schritt verbessert werden. Unterstützt die DB Masseneinfügung? Untersuche das. –

Antwort

0

Wenn Sie dies über C# tun, würde ich SqlBulkCopy empfehlen. Ich stellte eine similar answer zu einer anderen Frage vor einer Weile zur Verfügung. Siehe diesen Link für ein Beispiel, wie ich es in der Vergangenheit implementiert habe.

Wenn Sie wissen möchten, welche anderen Optionen Ihnen zur Verfügung stehen, hat MSDN eine recht gute Liste mit Optionen in der Datenladeanleitung; http://msdn.microsoft.com/en-us/library/dd425070(v=sql.100).aspx

Verwandte Themen