IT정보공유/C#

외부 데이터베이스 드라이버 (1)에서 예기치 않은 오류가 발생하였습니다.

알지오™ 2017. 10. 13.

2017년 10월 11일 윈도우즈 업데이트 이후, 전에 개발해 놓은 프로그램이 문제가 생기기 시작했습니다.

다름이 아닌 ADO를 이용한 엑셀파일 임포트(Import) 불러오기 기능이 오류를 일으키고 있습니다.

오류 내용은 "외부 데이터베이스 드라이버 (1)에서 예기치 않은 오류가 발생하였습니다."

외부 데이터베이스 드라이버 (1)에서 예기치 않은 오류가 발생하였습니다.

 

 

C#에서 엑셀파일에 접근 할때는 보통 Microsoft JET Database Engine을 이용하는데

JET 엔진 자체가 엑셀파일을 읽을 때 에러가 나니 좀 황당하고 난감했습니다.

OLE객체를 이용한 접근이기에 문제가 생겨도 사실상 제가 수정을 할 수도 없는 노릇이고 보이 인터넷을 뒤지다 찾아냈네요.

 

윈도우즈 서비스팩 업데이트가 되면서 부터 Microsoft.Jet.OLEDB.4.0을 이용할 수 없게 되어버린것 같습니다.

그래서 JET 엔진이 아닌 Microsoft.ACE.OLEDB.12.0을 이용하면 엑셀파일에 접근을 할 수 있다고 하여 시험해 봤고 성공했네요.

 

 

주의사항

한가지 주의 하셔야 하는것이 있는데, Microsoft.ACE.OLEDB.12.0 Provider가 별도 설치되어 있지 않은 PC라면 설치를 해줘야 합니다.

 

 

Microsoft.ACE.OLEDB.12.0 Provider는 Microsoft Access Database Engine 2010 Redistributable을 다운 받아 설치하시면 됩니다.

(아마 엑셀 2010이상이 설치되신 분들이라면 별도 설치 하지 않아도 될 겁니다.)

 

C# OLEDB를 이용한 엑셀파일 열기 예제 소스

 

            //string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
            //"Data Source=" + filename + "; Extended Properties=Excel 8.0;";
			string ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;"+ //<-- 이렇게 바꿔주시면 됩니다.
			"Data Source="+ excelPath +"; Extended Properties=Excel 8.0;";  //<-- 이렇게 바꿔주시면 됩니다.

            OleDbConnection conn = new OleDbConnection(ConnectionString);
            OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", conn);

            DataSet ds = new DataSet();

            try
            {
                conn.Open();

                
                da.FillSchema(ds, SchemaType.Source, "[Sheet1$]");
                da.Fill(ds, "[Sheet1$]");
				
	    }
	    catch(Exception ex)
	    {
	    }

 

댓글

💲 추천 글