본문 바로가기

프로그래밍/C,C++

C# OLEDB 엑셀 읽기

엑셀 OLEDB 연결 스트링


- XLS

Provider=Microsoft.Jet.OLEDB.4.0;

Data Source="파일명";

Mode=ReadWrite|Share Deny None;

Extended Properties='Excel 8.0; HDR=YES; IMEX=1';

Persist Security Info=False


- XLSX

Provider=Microsoft.ACE.OLEDB.12.0;

Data Source="파일명";

Mode=ReadWrite|Sare Deny None;

Extened Properties='Excel 12.0; HDR=YES; IMEX=1';

Persist Security Info=False;


HDR: 첫행이 데이터가 아닌 필드명인 경우 YES, 첫행부터 데이터면 NO

IMEX: 0 export모드, 1 import 모드, 2 링크드 모드.

데이터를 가져올때는 1번을 사용해 데이터 타입이 다르더라도 모두 string으로 가져오게 할 수 있다.

하지만 update 의 경우 imex=1이나 2를 사용하면, 업데이트 할 수있는 쿼리를 입력하라는 참 알아먹지도 못할 에러를 내곤 한다. 이때는 export모드인 0으로 설정하면 이미 들어있던 데이터 타입으로 update가 이루어지게 된다.




엑셀은 OLEDB 스키마를 지원하기에 해당 스키마 함수를 사용하면, 별도의 쿼리문이 필요하지 않다. 범용적인 사용예를 들기위해 GetOleDBSchemeTable() 을 사용하지 않는 방식만 정리해둔다.


연결 스트링을 만들어 접속.

string connStr="Provider=Microsoft. 어쩌구 저쩌구");

OleDbConnection conn = new OleDbConnection( connStr );

conn.Open();

OleDbCommand cmd = new OleDbCommand("SELECT * FROM [sheet1$]", conn);



아답터를 사용한 쿼리

OleDbDataAdapter adapter = new OleDbDataAdapter();

adapter.SelectCommand = cmd;

DataSet dsData = new DataSet();

adapter.Fill(dsData);

foreach( DataTable table in dsData.Tables )

{

// table.Rows[행]["필드명"].ToString() 형태로 데이터 조회.

}


리더를 통한 쿼리

DataTable dtData = new DataTable();

dtData.Load( cmd.ExecuteReader() );

// dtData[행]["필드명"].ToString() 형태로 데이터 조회.


데이터 업데이트

OleDbCommand cmd = new OleDbCommand();

cmd.Connection = conn;

cmd.CommandText = "Update [Sheet1$] set 필드명='값' where 필드명=값";

cmd.ExecuteNonQuery();




'프로그래밍 > C,C++' 카테고리의 다른 글

MS 프로젝트 파일  (0) 2018.10.02
Boost 라이브러리 빌드  (0) 2018.08.28
[Win API] Console project  (0) 2017.12.06
[C++] 시스템 클럭 밀리세컨드 얻기  (0) 2017.12.06
Kinect sdk 이미지 얻기  (0) 2017.10.26
[C#] 파일 읽고,쓰기 기초  (0) 2013.09.12
[C#] 이미지 처리 기본 사항들  (0) 2013.09.12
[C#] 이벤트  (0) 2013.09.12
[C#] 폼 띄우기  (0) 2013.09.12
GCC 옵션  (0) 2011.07.21