2

Ich bin sehr neu zu SQL Server Express in C#.Lesen Sie viele Textdateien in SQL Server Express

Ich habe ein Verzeichnis von 2000 Textdateien und möchte es Zeile für Zeile in eine Datenbank einlesen und den Dateipfad, die Zeilennummer und den Text der Zeile speichern. Was ist der beste Weg, Linq-to-SQL oder Verbindungszeichenfolge?

verwendete ich darunter die gerade halten Looping ich nehme an, es könnte sein, weil es so lange dauert, bis die Datenbank

private void button1_Click(object sender, EventArgs e) 
{ 
     string[] files = Directory.GetFiles(@"C:\Users\mchotu\Desktop\Sample data", "*.txt", SearchOption.AllDirectories); 

     foreach(string file in files) 
     { 
      using (StreamReader sr = new StreamReader(file)) 
      { 
       using (var db = new DataClasses1DataContext()) 
       { 
        string s; 
        int line = 0; 

        while((s=sr.ReadLine()) !=null) 
        { 
         db.textFilesCompletes.InsertOnSubmit(new textFilesComplete() { fileNameone = file }); 
         db.textFilesCompletes.InsertOnSubmit(new textFilesComplete() { text = s }); 
         db.textFilesCompletes.InsertOnSubmit(new textFilesComplete() { Linenumber = line }); 
        } 

        db.SubmitChanges(); 
       } 
      }     
     } 
     this.textFilesCompleteTableAdapter.Fill(this.database1DataSet.textFilesComplete);// this displays the updated table 
} //ends function 

ist dies etwas zu lesen, die schnell gelesen werden kann?

+0

*** SQL *** ist nur die * Structured Query Language * - eine Sprache, die von vielen Datenbanksystemen verwendet wird, aber kein Datenbankprodukt ... viele Dinge sind herstellerspezifisch - also müssen wir es wirklich tun wissen, was ** konkrete Datenbank-System ** (und welche Version) Sie verwenden (bitte Update-Tags entsprechend) .... –

Antwort

1

Sie erstellen textFilesComplete nicht korrekt. Ihre richtige Lösung sollte durch die Art und Weise eine bessere Lösung für das Laden von Textdateien wie diese

private void button1_Click(object sender, EventArgs e) 
{ 
     string[] ls = Directory.GetFiles(@"C:\Users\mchotu\Desktop\Sample data", "*.txt", SearchOption.AllDirectories); 

     foreach(string file in ls) 
     { 
      using (StreamReader sr = new StreamReader(file)) 
      { 
       using (var db = new DataClasses1DataContext()) 
       { 
        string s; 
        int line = 0; 

        while((s=sr.ReadLine()) !=null) 
        { 
         db.textFilesCompletes.InsertOnSubmit(new textFilesComplete() { fileNameone = file ,text = s ,Linenumber = line }); 

        } 

        db.SubmitChanges(); 
       } 
      }     
     } 
     // dont know what your doing here? 
     this.textFilesCompleteTableAdapter.Fill(this.database1DataSet.textFilesComplete); 
} 

werden soll, kann durch die Verwendung SqlBulkCopyMSDN Documentation und deren Nutzung durch die Nutzung vereinfacht werden so etwas wie ObjectDataReaderDocumentation & download

Dies setzt IEnumerable<T> als IDataReader

Hier ist ein funktionierendes Beispiel.

+0

Vielen Dank, das hat mich auf den richtigen Weg gebracht. –