2

C#ではSQL Server Expressの新機能です。多くのテキストファイルをSQL Server Expressに読み込む

私は2000個のテキストファイルのディレクトリを持っており、それを1行ずつデータベースに読み込み、ファイルパス、行番号、行のテキストを保存します。何が最善の方法、Linq-to-SQL、または接続文字列ですか?

私はちょうど私がそれをデータベース

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 

に読み取るためにとても長い時間がかかるので、それはあるかもしれないと仮定ループし続けるこの下の使用は、これは迅速に読み取ることができるものですか?

+0

*** SQL ***は*多くのデータベースシステムで使用される言語ですが、データベース製品ではありません。多くのものはベンダー固有のものなので、本当に必要ですあなたが使用している具体的なデータベースシステム**(およびどのバージョン)を知っていますか(それに応じてタグを更新してください).... –

答えて

1

textFilesCompleteを正しく作成していません。あなたの正しい解決策はSqlBulkCopyMSDN Documentationを使用してロードするテキストファイルのためのよりよい解決策があるところで、この

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); 
} 

ようにする必要があり、その使用はこれのようにIEnumerable<T>を公開ObjectDataReaderDocumentation & download

のようなものを利用することによって簡素化することができますIDataReader

ここに実例があります。

string[] files = Directory.GetFiles(@"C:\data\", "*.txt", SearchOption.AllDirectories); 

    using(SqlBulkCopy sbc = new SqlBulkCopy(@"Server=.\SQLExpress; Database= AAA; Integrated Security=SSPI;")) 
    { 
     sbc.DestinationTableName = "dbo.textFilesCompletes"; 
     sbc.EnableStreaming = true; 
     foreach(string file in files) 
     { 
      int lineNumber = 1; 
      var lines = from a in File.ReadLines(file,Encoding.Default) 
         select new {FileName = file,Text = a,LineNumber = lineNumber++}; 
      sbc.WriteToServer(lines.AsDataReader());    

     } 
    } 
+0

ありがとうございます、これは正しい軌道に乗りました。 –

関連する問題