2014-07-21 8 views
1

Excel (.xlsx, .xls) 파일을 읽는 응용 프로그램을 빌드하려고합니다. 불행히도 OleDbDataAdapter.Fill() 성능은 놀랍게도 좋지 않습니다. 파일에서 한 레코드를 읽는 데 최대 2 분이 걸립니다. 2백57메가바이트 OleDbDataAdapter.Fill()이 매우 느린 이유는 무엇입니까?

  • 열 - - 104
  • 행 - 나는 현재 파일을 읽을 수 사용하고 1 000 000
  • 코드

    1. 크기 :

      파일에 대한

      더 많은 정보

      string conStr = string.Empty; 
          string strQuery = string.Empty; 
          switch (extension) 
          { 
           case ".xls": //Excel 97-03 
            conStr = @"Provider=Microsoft.Jet.OleDb.12.0;Data Source=" + file_source + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';"; 
            strQuery = "SELECT " + col_no + " * FROM [" + workbook + "] "; 
            break; 
      
           case ".xlsx": //Excel 07 
            //connection string to connect to the xlsx file 
            conStr = @"Provider=Microsoft.Ace.OleDb.12.0;Data Source=" + file_source + ";Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1;';"; 
            strQuery = "SELECT " + col_no + " * FROM [" + workbook + "] "; 
            break; 
          } 
          DataTable tbl = new DataTable(); 
          OleDbDataAdapter ada = new OleDbDataAdapter(strQuery, conStr); 
          ada.Fill(tbl); 
          ada.Dispose(); 
      
          return tbl; 
      

      귀하의 도움이 될 것입니다. 대단히 감사합니다!

      감사합니다.

    +0

    일부 대안은 여기에서 얻을 수 있습니다 : http://stackoverflow.com/questions/15828/reading-excel-files-from-c-sharp 거대한 데이터 세트를위한 데이터베이스로 Excel을 사용하는 @semao가 지적한 것처럼 매우 성능이 뛰어난 솔루션이 아닙니다. 예 : XLSX 파일의 경우 파일을 압축 해제하고 메모리에로드하고 인덱싱 한 다음 쿼리 할 수 ​​있어야합니다. 빠른 랜덤 액세스에 적합한 파일 형식이 아닙니다. – xmojmr

    답변

    3

    큰 데이터 세트를 Excel 파일에 저장하는 것은 좋지 않습니다. 내 의견으로는 2 분 안에 250MB Excel 파일을 읽는 것이 예상됩니다.

    나는 모든 데이터베이스 솔루션으로 전환하는 것이 좋습니다. 그러나 데이터 저장소를 변경할 수없는 경우 Excel COM 개체를 사용해 볼 수 있습니다 (서버 컴퓨터에도 Excel을 설치해야합니다). Here은 Teddy Garland의 산책로입니다.

    +0

    감사합니다. 제가 확인하겠습니다. – user2090983