2014-08-18 2 views
0

도와주세요!CSV를 Gridview로 가져 오기

데이터베이스에 데이터를 저장하기 전에 CSV (Csv)에서 데이터를 그리드로 가져 오려고합니다 ... 문제는 내가 시도한 것이 든 상관없이 그 라인이 가비지 또는 일부 포맷을 읽지 못하는 것입니다. 알고있다. 이것은 내 asp.net Gridview로 가져 오려고하지만 처음에는 작동하지 않습니다. 만약 누군가가 나를 바른 길로 인도 해 주시면 감사하겠습니다!

이 내가 무슨 짓을했는지 있습니다 :

private object ReadToEnd(string filePath) 
{ 
    DataTable dtDataSource = new DataTable(); 

    string[] fileContent = File.ReadAllLines(filePath); 

    if (fileContent.Count() > 0) 
    { 
     string[] columns = fileContent[0].Split(','); 
     for (int i = 0; i < columns.Count(); i++) 
     { 
      dtDataSource.Columns.Add(columns[i]); 
     } 

     for (int i = 1; i < fileContent.Count(); i++) 
     { 
      string[] rowData = fileContent[i].Split(','); 
      dtDataSource.Rows.Add(rowData); 
     } 
    } 

    gvTest.DataSource = dtDataSource; 
    gvTest.DataBind(); 

} 

나는 단지 SerialNo입니다 전체 CSV에서 하나의 컬럼이 필요합니다.

enter image description here

데이터를 읽은 후 : 내가 올바른 정보를받은 후 나는

이 읽고 년대 무엇인가 ... 데이터베이스 (SQL)에 삽입하기 전에 데이터의 나머지 부분을 바인딩 "입력 배열이이 테이블의 열 수보다 깁니다."라는 오류 메시지가 나타납니다.
![enter image description here][2] 

그러나

이 방법에 내가 오류 및 그리드를받을 수 없습니다 :

 private static DataTable GetDataTabletFromCSVFile(string path) 
{ 
    DataTable csvData = new DataTable(); 
    csvData.Columns.Add("SerialNo", typeof(string)); 
// csvData.Columns.Add("MachineDetailsRef", typeof(int)); 

    try 
    {   
     using (TextFieldParser csvReader = new TextFieldParser(path)) 
     { 
      csvReader.SetDelimiters(new string[] { "," }); 
      csvReader.HasFieldsEnclosedInQuotes = true; 
      string[] colFields = csvReader.ReadFields(); 
      foreach (string column in colFields) 
      { 
       DataColumn serialno = new DataColumn(column); 
       serialno.AllowDBNull = true; 
       csvData.Columns.Add(serialno); 
      } 

      while (!csvReader.EndOfData) 
      { 
       string[] fieldData = csvReader.ReadFields(); 
       //Making empty value as null 
       for (int i = 0; i < fieldData.Length; i++) 
       { 
        if (fieldData[i] == "") 
        { 
         fieldData[i] = null; 
        } 
       } 
       csvData.Rows.Add(fieldData); 
      } 

     } 
    } 
    catch (Exception ex) 
    { 
    } 
    return csvData; 
} 

이 이전의 시도와 동일한 데이터를 제공합니다

나는이 다른 방법을하고 시도했습니다

enter image description here

것은 어떤 도움이 GREA 될 것입니다 :로 채워됩니다 감사합니다! 감사합니다

편집 -------------

이 내 CSV 파일입니다 :

enter image description here

+2

입력 csv 파일을 표시하면 좋을 것입니다. 헤더를 포함하여 처음 2 ~ 3 라인? – Hassan

+0

@HassanNisar, 감사합니다. csv가 어떻게 생겼는지 업로드했습니다. – Kerieks

+0

csv 파일의 인코딩은 UTF-16입니까? –

답변

1

참고 : CSV 파일 인코딩은 ANSI 다른 경우 ? 그런 다음 StreamReader을 다음과 같이 사용해야합니다.

StreamReader MyStreamReader = new StreamReader(path, System.Text.Encoding.Unicode); 

그렇지 않으면 코드를 변경하지 않았습니다. 아래 참조 :

private static DataTable GetDataTabletFromCSVFile(string path) 
{ 
    DataTable csvData = new DataTable();   

    try 
    {   
     using (TextFieldParser csvReader = new TextFieldParser(path)) 
     { 
      csvReader.SetDelimiters(new string[] { "," }); 
      csvReader.HasFieldsEnclosedInQuotes = true; 
      string[] colFields = csvReader.ReadFields(); 

      foreach (string column in colFields) 
      { 
       DataColumn serialno = new DataColumn(column); 
       serialno.AllowDBNull = true;     
       csvData.Columns.Add(serialno); 
      } 

      while (!csvReader.EndOfData) 
      { 
       string[] fieldData = csvReader.ReadFields(); 
       DataRow dr = csvData.NewRow(); 
       //Making empty value as empty 
       for (int i = 0; i < fieldData.Length; i++) 
       { 
        if (fieldData[i] == null)      
         fieldData[i] = string.Empty; 

        dr[i] = fieldData[i]; 
       } 
       csvData.Rows.Add(dr);    
      } 

     } 
    } 
    catch (Exception ex) 
    { 
    } 
    return csvData; 
} 
+0

감사합니다. Hassan, 편집을 시도했지만 데이터가 여전히 동일하게 나오면 StreamReader에 시도해 볼 수 있습니다. 감사합니다. – Kerieks