문제

C#에서 OLEDB를 통해 Excel 파일(.xls)에 쓰는 방법을 아는 사람이 있습니까?나는 다음을 수행하고 있습니다 :

   OleDbCommand dbCmd = new OleDbCommand("CREATE TABLE [test$] (...)", connection);
   dbCmd.CommandTimeout = mTimeout;
   results = dbCmd.ExecuteNonQuery();

하지만 메시지와 함께 OleDbException이 발생합니다.

"테이블 '테스트 $'의 디자인을 수정할 수 없습니다.읽기 전용 데이터베이스에 있습니다. "

연결 상태가 양호하고 데이터를 잘 선택할 수 있지만 Excel 파일에 데이터를 삽입할 수 없는 것 같습니다. OLEDB를 통해 Excel 파일에 대한 읽기/쓰기 액세스를 얻는 방법을 아는 사람이 있습니까?

도움이 되었습니까?

해결책

당신은 추가해야합니다 ReadOnly=False; 연결 문자열에

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=fifa_ng_db.xls;Mode=ReadWrite;ReadOnly=false;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";

다른 팁

나는 또한 찾고 대답했지만 Zorantula의 솔루션은 나에게 효과가 없었습니다.나는 해결책을 찾았다 http://www.cnblogs.com/zwwon/archive/2009/01/09/1372262.html

나는 ReadOnly=false 매개변수와 IMEX=1 확장된 속성.

그만큼 IMEX=1 속성은 가져오기 모드에서 통합 문서를 열므로 구조 수정 명령(예: CREATE TABLE 또는 DROP TABLE) 작동하지 않습니다.

내 작업 연결 문자열은 다음과 같습니다

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=workbook.xls;Mode=ReadWrite;Extended Properties=\"Excel 8.0;HDR=Yes;\";"

나도 같은 문제가있었습니다.확장 속성만 제거 IMEX=1.그러면 문제가 해결될 것입니다.테이블은 Excel 파일로 생성됩니다...

몇 가지 질문:

  • 귀하의 앱을 실행하는 사용자(당신?)에게 파일에 쓸 수 있는 권한이 있습니까?
  • 파일이 읽기 전용인가요?
  • 연결 문자열은 무엇입니까?

ASP를 사용하는 경우 다음과 같이 IUSER_* 사용자를 추가해야 합니다. 이 예.

  • 내 응용 프로그램의 Excel 파일 쓰기 권한을 어떻게 확인합니까(Excel 2007을 사용하고 있습니까)?
  • 파일이 읽기 전용이 아니거나 (내가 아는 한) 보호되지 않습니다.
  • 내 연결 문자열은 다음과 같습니다

"제공자 = microsoft.jet.oledb.4.0; data source = fifa_ng_db.xls; mode = readWrite; 확장 속성 = "excel 8.0; hdr = 예; imex = 1 ""

Michael Haren의 답변에 더 가깝습니다.이 코드가 ASP.NET 응용 프로그램(IIS 응용 프로그램 풀에 지정됨)에서 실행 중인 경우 XLS 파일에 수정 권한을 부여하는 데 필요한 계정은 NETWORK SERVICE일 가능성이 높습니다.코드가 어떤 계정으로 실행되고 있는지 정확히 확인하려면 다음과 같이 간단하게 수행할 수 있습니다.

Response.Write(Environment.UserDomainName + "\\" + Environment.UserName);

ASP.NET에서 실행 중이었고 "디자인을 수정할 수 없습니다..." 및 "ISAM을 찾을 수 없습니다..." 오류 메시지가 모두 나타났습니다.

나는 다음과 같은 일이 필요하다는 것을 깨달았습니다.

) 다음 연결 문자열을 사용합니다.

Provider=Microsoft.Jet.OLEDB.4.0;Mode=ReadWrite;Extended Properties='Excel 8.0;HDR=Yes;';Data Source=" + {path to file};

참고로 나 역시 문제가 있었다 IMEX=1 그리고 ReadOnly=false 연결 문자열의 특성.

) 모든 사람에게 파일이 기록되는 폴더에 대한 전체 권한을 부여합니다.일반적으로 ASP.NET은 NETWORK SERVICE 계정으로 실행되며 해당 계정에는 이미 권한이 있습니다.그러나 OleDb 코드는 관리되지 않으므로 다른 보안 컨텍스트에서 실행되어야 합니다.(현재는 어떤 계정인지 파악하기가 너무 게으른 관계로 그냥 모두 사용했습니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top