C# Excel을 사용하는 OLEDB와 COM 방식 비교

2374 단어
Excel에서 읽기와 쓰기를 수행할 때 Microsoft 자체 솔루션으로 OLEDB와 COM 구성 요소를 호출하는 두 가지 방법이 있습니다.
1. OLEDB방식
이런 방법으로 Excel을 읽는 속도는 COM 구성 요소를 호출하는 것에 비해 매우 빠르다. 왜냐하면 OLEDB방식은 Excel을 하나의 데이터베이스로 조작하는 것이기 때문이다. Excel을 데이터 원본으로 하고 Sql문장으로 직접 데이터를 얻기 때문이다.Office Excel을 설치하지 않고도 사용할 수 있다는 장점도 있습니다.그러나 이런 방식은 데이터만 읽거나 쓸 수 있지만 엑셀 자체의 복잡한 논리, 예를 들어 셀 합병, 셀 착색 등은 지원할 수 없다.
string connStr="";
if (fileType == ".xls")  
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\""; 
else   
connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";  
string strCom = "SELECT * FROM [Part$A7:AE] where [Part No]=" + PartNO; 
OleDbConnection myConn = new OleDbConnection(strCon); 
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom) 
System.Data.DataTable partTable = new System.Data.DataTable();   
myCommand.Fill(partTable);

이렇게 하면 Excel의 내용이 DataTable에 저장됩니다.OLEDB를 사용하여 데이터를 DataTable에 읽어서 캐시한 다음 DataTable에서 조건에 맞는 필터링이나 처리를 하는 것이 일반적인 방법입니다.물론 Excel에 데이터를 써야 할 경우 insert 문구를 사용하여 Excel에 직접 입력해야 합니다.Excel의 셀이 비어 있을 때 DataTable로 되돌아오는 값은 DBNull이고 Convert를 사용합니다.Convert를 사용하는 경우 ToString() 변환 후 ""입니다.ToInt32() 변환은 0이 아니라 예외를 발생시킵니다.
2. COM 구성 요소를 호출하는 방법
이런 방식은 먼저 Microsoft를 인용해야 한다.Office.Interop.Excel .Excel의 데이터를 매우 유연하게 읽을 수 있고 사용 방식이 풍부하다. 기본적으로 Office Excel 소프트웨어를 켜면 마우스 클릭으로 완성할 수 있는 일, VSTO를 사용하여COM 구성 요소를 호출하면 완성할 수 있고 Excel 자체가 가지고 있는 매크로 방법을 호출할 수 있다.그러나 웹 사이트가 IIS에 배치된 경우 Excel이 설치된 서버 컴퓨터가 필요하고 IIS 권한을 설정해야 할 때도 있습니다.가장 중요한 것은 칸을 기반으로 읽기 때문에 데이터가 느리다는 것이다.개인 건의는 만약에 빅데이터의 순환 중, 예를 들어 for(int i=0;i<10000;i++) {...} 이 논리에서 COM 대상을 사용하지 말라는 것이다. 왜냐하면COM 대상은 비위탁 관리 코드이기 때문에 호출할 때 위탁 관리 대상이 비위탁 관리 대상으로 전환될 수 있기 때문이다. 이것은 지나가는 문과 같이 시간이 많이 걸리기 때문이다.
Excel에 데이터를 쓸 때 10000줄이 있으면 COM의 Range row 대상을 호출하는 것이 상당히 느리다.이때 하나의 수조를 사용하여 값을 수조에 누적하고 마지막으로 수조를 모든 값을 부여해야 하는 구역에 한 번에 부여할 수 있다.이때 Range의 구역은 수조의 차원과 완전히 대응해야 하며, 그렇지 않은 사람은 이상한 기호가 나타날 수 있음을 주의해야 한다.실제 개발에서 데이터 양이 많고 여러 개의 Excel이 비례해야 한다면 두 가지 방식을 결합하여 사용할 수 있다. 어떤 Excel의sheet를 DataTable에 캐시한 다음에 다른 Excel과 비교할 수 있다. 만약에 최종적으로 대량의 데이터를 Excel에 써야 할 때 2차원 그룹으로 값을 부여하는 방식으로 다시 Excel에 쓸 수 있다.

좋은 웹페이지 즐겨찾기