2010-07-14 8 views
0

좋아, 이것은 고객 데이터를 데이터베이스로 가져 오는 아주 간단한 작업으로 시작되었습니다. 아래 스크립트는 모든 데이터를 메모리에로드 한 다음 조작을 허용합니다.CSV에서 데이터 가져 오기

string ConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"" + FileLoc + "\"; Extended Properties=\"text;HDR=Yes;FMT=Delimited(,)\""; 

using (OleDbConnection conn = new OleDbConnection(ConString)) 
{ 
    using (OleDbCommand cmd = new OleDbCommand("SELECT * FROM DataInput.csv", conn)) 
    { 
     conn.Open(); 

     using (OleDbDataReader dr = cmd.ExecuteReader(CommandBehavior.SequentialAccess)) 
     { 
      int RowNumber = 0; 
      while (dr.Read()) 
      { 


       if(RowNumber==0) 
       { 
        for (int i = 0; i < dr.FieldCount; i++) 
        { 
         TitleData.Add(new CSVTitleData() {ColumnID = i,ColumnName = dr.GetValue(i).ToString()}); 
        } 
       } 
       else 
       { 
        var DataToInsert = new List<CSVData>(); 
        for (int i = 0; i < dr.FieldCount; i++) 
        { 
         if (i == 8) 
         { 
          var A = dr.GetValue(i); 
          Console.WriteLine(A.GetType().ToString() + " - " + i); 
         } 
         DataToInsert.Add(new CSVData(){ColumnID = i,Value = dr.GetValue(i).ToString()}); 
        } 

        Content.Add(DataToInsert); 
       } 
       RowNumber++; 
      } 
     } 
    } 
} 

Excel에서 영리을 시도하고 int로 각 필드를 읽어

4950 
4951 
4952 
4998 
2024 
4176 
7025-1 
RVAC010 
RVAC011 
4945 
4946 
4947 
4948 

같은 데이터가있을 때까지이 잘 작동합니다. 결과 int는 DBNull로 읽히는 글자를 가진 것입니다.

이제 약간의 독서를 했으므로이 질문에는 해결책이 없지만 많은 사람들이 있습니다. 가능한 해결책 중 하나는 Scheme.ini를 만드는 것입니다. 누군가 내가 정확한 형식으로 나를 도울 수 있는지 궁금합니다.

아니면 CSV로 읽는 것이 더 쉬웠습니까?

답변

4

가 .... 내가 CSV 파일을 읽기 위해 CodeProject의 환상적인 라이브러리를 발견

http://www.codeproject.com/KB/database/CsvReader.aspx

라이브러리는 구문 분석 CSV를 모든 항목을 처리합니다 올바르게 이러한 문제에 대해 걱정할 필요가 없습니다. 사용하기가 매우 쉽고 DataTable을 통해 데이터를 반환 할 수 있습니다.

내 코드 라이브러리의 필수 구성 요소가되어 매우 유용합니다. 파일을 읽을 수있는

+0

그냥 참고로 ... CsvReader, CSV로 LINQ는 달리, 읽는 각 값을 변환해야합니다. LINQ to CSV를 사용하면 CSV 파일의 행을 나타내는 구체적인 클래스를 정의 할 수 있으며 각 값을 속성으로 자동 변환합니다. – jrista

2

저는 ditching Excel을 권장하고 LINQ to CSV 행을 따라 뭔가 처리하여 처리합니다. Excel에 대한 의존성을 제거하고 타이핑을 직접 제어 할 수 있으며 부팅하는 데 더 가볍습니다. 나는이와 같은 경험을 했어

http://www.codeproject.com/KB/linq/LINQtoCSV.aspx

1

내가 가장 좋아하는 방법은 외부 라이브러리를 사용하는 것입니다 http://www.filehelpers.com/

설명 :
FileHelpers는 고정 길이 또는 구분에서/내보내기 데이터를 가져올 수있는 무료이며 사용하기 쉬운 .NET 라이브러리입니다 파일, 문자열 또는 스트림의 레코드.

그것은 모든 부엌 싱크대 여전히 작은을 가지고 ..

엑셀을 실행하는 것은 asp.net 응용 프로그램의 좋은 방법이없고, 개별적으로 마이크로 소프트에 의해 금지되어 있습니다.

당신은 항상 ODBC의 날이 번호가 불구하고 마이크로 소프트 유일한 해결책에 대한 INI 파일 레이아웃을 지정하는 방법이 ODBC를 시도 할 수

+0

+1 당신이 찾은 훌륭한 링크입니다! – Dal