2013-10-09 4 views
0

shapefile 데이터를 내보내는 동안 dbf 파일을 만드는 데 문제가 있습니다. 시간 파일이 아직 존재하지 않는 경우에도, 그것은 작동하지만, 때로는 그냥 다음과 같은 오류를 생각하다거야 대부분 :dBase 파일을 생성 할 때 간헐적으로 예외가 발생합니다

파일 'C를 열 수 없습니다 Microsoft Jet 데이터베이스 엔진 : \ 테스트 \ 258ba2f1 -cc05-4a21-a047-ef060c46a3ca \ data \ tablename.DBF '. 이미 다른 사용자가 독점적으로 열었거나 해당 데이터를 볼 수있는 권한이 필요합니다.

코드는 다음과 같은 : 내가 Microsoft Jet 데이터베이스 엔진을 사용할 때

using (var dBaseConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + databasePath + ";Extended Properties=dBASE IV;")) 
     { 
      var createTableString = "Create Table " + tableName + ".dbf (p_id char(10), answered char(20), mnote char(50), descr char(50), grade char(50))"; 

      var cmd = new OleDbCommand(createTableString, dBaseConnection); 

      dBaseConnection.Open(); 
      cmd.ExecuteNonQuery(); 

에만이 발생합니다. Visual FoxPro를 사용하면 "_NullFlags"라는 추가 열이 만들어지고 dbf-file은 모든 GIS 소프트웨어에서 작동하지 않습니다.

아이디어가 있으십니까?

답변

1

"템플릿"테이블 구조를 항상 사용할 수 있고 프로덕션 환경에서는 사용하지 않는 것이 좋습니다. 그런 다음 템플릿 테이블을 새 테이블 이름이 무엇이든간에 복사하십시오. 그런 다음 해당 파일 버전을 쿼리하고 연결하여 수행 할 수 있습니다. 또한 .DBF에서 YourTable.GISDBF와 같은 파일 확장자로 파일 확장명을 바꿀 수 있으므로 다른 응용 프로그램에서도 우연히 열 수 없습니다.

그러나 그것이 작동하지 않는다면, another post을보고 싶을 수도 있습니다. 제트 엔진의 문제도 꽤 오래 전 대답했습니다. 이 경우 VFP OleDb 드라이버를 사용하고 ExecScript()를 사용하고 있습니다. 명령 줄 문을 작성한 다음 프로그램 인 것처럼 실행할 수 있습니다. 테이블 만들기와 같이 CURSOR를 생성 한 다음 대상 테이블에 "TYPE FOXPLUS"라는 이름으로 복사하면 GIS에서 읽을 수있는 이전 형식의 파일 형식으로 변환 할 수 있습니다.

string VFPScript = "ExecScript(" 
     + "[create cursor C_Tmp (fld1 i, fld2 c(50), fld3 c(10))] +chr(13)+chr(10)+ " 
     + "[copy to '" + YourFileNameVariable + "' type FoxPlus] "; 

// put this script into command object, then execute it... 
using (OleDbCommand comm = new OleDbCommand(VFPScript, connection)) 
{ 
    comm.ExecuteNonQuery(); 
} 
관련 문제