2014-11-14 4 views
0

특정 폴더에 저장된 Excel 파일을 처리해야합니다.SSIS 스크립트 작업을 통해 OLEDBConnection을 여는 방법은 무엇입니까?

내 SSIS 패키지에서 File Enumérator로 구성된 Foreach 루프를 추가하여 filepath 변수를 채 웁니다. 그런 다음 스크립트 태스크는이 변수를 사용하여 Excel 파일을 열고 처리합니다.

enter image description here

그러나, 나는 스크립트 작업에서 내 파일에 OLEDB 연결을 열 수 아니에요. filepath에 올바른 경로가 포함되어 있습니다. 스크립트에서 파일을 검사하는 테스트를 추가했습니다.

// Check file to process. 
string rawfilePath = Dts.Variables["User::FilePath"].Value.ToString().Replace(@"\",@"\\"); 

if (rawfilePath == String.Empty || !File.Exists(rawfilePath)) 
      Dts.Events.FireError(0, SCRIPT_TASK_NAME, "Invalid input file '" + rawfilePath + "'...", String.Empty, 0); 

MessageBox.Show(rawfilePath); 

// Open connection. 
string rawFileConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" 
+ rawfilePath + "';Extended Properties='Excel 12.0;HDR=NO;IMEX=1'"; 

MessageBox.Show(rawFileConnectionString); 

OleDbConnection rawExcelConnection = new OleDbConnection(rawFileConnectionString); 
rawExcelConnection.Open(); 

내 폴더 C:\TestFolder입니다 : 여기

내 코드의 샘플입니다. 이 파일에는 C:\TestFolder\export_20140101.xlsC:\TestFolder\export_20140102.xls의 두 파일이 있습니다. "를 교체 할 필요가 영어

enter image description here

예외가 호출

+0

메시지 상자가 작동합니까? 'rawExcelConnection' 또는'Open' 호출의 인스턴스 생성에 실패한 행은 무엇입니까? – billinkc

+2

디버그 모드로 실행하거나 전체 코드를 try catch 블록에 넣은 다음 Dts를 사용하십시오.catch 블록의 예외 메시지가있는 FireError – jazzytomato

+0

try/catch 블록이 내 목숨을 구했습니다! 오류는 데이터베이스 엔진 (ACE 12.0)에 관한 것입니다. 드라이버를 찾을 수 없으며 이전에 설치하지 않았습니다. – K4timini

답변

0

string rawfilePath = Dts.Variables["User::FilePath"].Value.ToString().Replace(@"\",@"\\"); 

을 변경하면 그것은 작동합니다, 내 스크립트가 작동합니다.

데이터베이스 엔진 ACE 12.0이 로컬 컴퓨터에 설치되어 있지 않습니다. Microsoft website에서 .exe 패키지를 다운로드 한 다음 설치된 Microsoft Office 버전이 Run30BitsRuntime에서 까지 프로젝트 설정에서 인 경우 패키지가 실행 비트가 64 비트에서 32 비트로 변경되었습니다.

여기 게시물은 how to run a 32 bit package in a 64 bit environnent입니다.

1

의 대상이 throw되었습니다 없습니다 : 여기

오류입니다 \ "와"\\ ​​"를 비교할 수 있습니다.

DTS 변수를 변환 할 때 컴파일러에서이를 인식합니다.

컴파일러는 C로 경로를 인식한다 : \\ TestFolder \\ export_20140102.xls

그게 두 개의 빈 디렉토리를보고 값을 반환 할 수 없습니다 발생합니다.

컴파일러에서 DTS 변수를 읽으면이를 리터럴 문자열로 읽습니다.

당신이

마지막으로
string rawfilePath = Dts.Variables["User::FilePath"].Value.ToString()); 
+0

사실 두 솔루션 모두 작동합니다. 문제는 URL 형식이 아닙니다. – K4timini