2017-06-06 13 views
0

CSVファイルを読み込み、C#でデータテーブルのデータを取得しようとしています。2行目をCSVのヘッダー列としてデータ変換可能に設定

public static System.Data.DataTable GetcsvExcelRecords(string csvPath, string CSVFileName) 
     { 
      string[] workSheetNames = new string[] { }; 
      System.Data.DataTable dtExcelData = new System.Data.DataTable(); 
      string SourceConstr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + csvPath + "';Extended Properties='Text;HDR=Yes;FMT=Delimited;'"; 

      using (OleDbConnection excelConn = new OleDbConnection(SourceConstr)) 
      { 
       excelConn.Open(); 
       OleDbCommand excelCommand = new OleDbCommand(); 
       OleDbDataAdapter excelDataAdapter = new OleDbDataAdapter(); 
       excelCommand = new OleDbCommand("SELECT * FROM [" + CSVFileName + "]", excelConn); 
       excelDataAdapter.SelectCommand = excelCommand; 
       excelDataAdapter.Fill(dtExcelData); 
       return dtExcelData; 
      } 

     } 

しかし、私は、2行目のデータは、ヘッダ列になりたい、次に行が続く:

Iが正常に動作し、以下のコードを使用しています。これを達成する方法は? ありがとう

+0

を知っているかもしれません小さいか巨大か?あなたはKB/MBでサイズを推測するかもしれません – Shankar

+0

ファイルが小さいです。最大サイズは100 kb – venkat14

答えて

0

代わりに既存のライブラリを使用することができます(再実装する)... FileHelpersが役に立つかもしれないと聞いています。

いずれにせよ、私たちはライブラリの必要性を認識する前に何か試してみるのが好きです。そのような場合...

csvファイルサイズが小さい場合、このような汚いものを試すことができます...これは些細なことかもしれませんが。作業しているCSVファイルならば、私はOleDbConnectionオブジェクトを使用するために、ディスク上に存在するファイルが必要であること 注意... が作成したファイルを削除することを忘れないでください...

public static System.Data.DataTable GetcsvExcelRecords(string csvPath, string CSVFileName) 
{ 
    string modCSVFileName = CreateFileRemovingFirstLine(csvPath, CSVFileName); 

    string[] workSheetNames = new string[] { }; 
    System.Data.DataTable dtExcelData = new System.Data.DataTable(); 
    string SourceConstr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + csvPath + "';Extended Properties='Text;HDR=Yes;FMT=Delimited;'"; 

    using (OleDbConnection excelConn = new OleDbConnection(SourceConstr)) 
    { 
     excelConn.Open(); 
     OleDbCommand excelCommand = new OleDbCommand(); 
     OleDbDataAdapter excelDataAdapter = new OleDbDataAdapter(); 
     excelCommand = new OleDbCommand("SELECT * FROM [" + modCSVFileName + "]", excelConn); 
     excelDataAdapter.SelectCommand = excelCommand; 
     excelDataAdapter.Fill(dtExcelData); 
     return dtExcelData; 
    } 
} 

private static string CreateFileRemovingFirstLine(string csvPath, string CSVFileName) 
{ 
    string filePath = Path.Combine(csvPath, CSVFileName); 
    string modifiedFileName = CSVFileName.Replace(".csv", "2.csv"); 
    using (StreamReader sr = new StreamReader(filePath)) 
    { 
     string headerLine = sr.ReadLine(); 
     string str = sr.ReadToEnd(); 
     // use the appropriate encoding... for example I am using ASCII 
     byte[] buffer = Encoding.ASCII.GetBytes(str); 

     MemoryStream ms = new MemoryStream(buffer); 
     // write to file... check for access permission to create file 
     FileStream file = new FileStream(Path.Combine(csvPath, modifiedFileName), FileMode.Create, FileAccess.Write); 
     ms.WriteTo(file); 
     file.Close(); 
     ms.Close(); 
    } 

    return modifiedFileName; 
} 
+0

です。申し訳ありませんが、私の質問が混乱した場合。私は、ファイル内ではなく、データテーブルの変更をしたい。 – venkat14

関連する問題