오류가 발생한 환경: Windows 7, Framework 4, 0, Microsoft Office 2007, VS2010, c# WinForm; code:
string strConn = "Provider=Microsoft.Ace.OleDb.12.0;Persist Security Info=False; " + "data source=" + @excelPath + ";Extended Properties='Excel 12.0; HDR=yes; IMEX=2'"; OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = strConn; try { OleDbCommand cmd = null; try { cmd = new OleDbCommand("Insert Into [Sheet1$] Values('abc', 'bac', '0', '123456', 'test','测试','aa')", conn);//(A,B,C,D,E,F,G) cmd.ExecuteNonQuery(); } catch (System.Exception ex) { textBox1.Text += ("插入数据失败:" + ex.Message); textBox1.Text += ("\r\n"); }
이 오류가 발생하면 가장 먼저 떠오르는 것은 권한이 없지만 관리자로 실행한다는 것입니다. 여전히 같은 오류가 발생합니다!
다음 코드를 통해 권한을 추가해도 여전히 동일한 오류가 발생합니다.
FileInfo fi = new FileInfo(excelPath); System.Security.AccessControl.FileSecurity fileSecurity = fi.GetAccessControl(); fileSecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow)); fileSecurity.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl, AccessControlType.Allow)); fi.SetAccessControl(fileSecurity); DirectoryInfo di = new DirectoryInfo(Path.GetDirectoryName(excelPath)); System.Security.AccessControl.DirectorySecurity dirSecurity = di.GetAccessControl(); dirSecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow)); dirSecurity.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl, AccessControlType.Allow)); di.SetAccessControl(dirSecurity);
지식 튜토리얼, 여기에
문자열이 더 있습니다: Extended Properties='Excel 12.0 =yes; ; IMEX=2'
HDR 매개변수 값:
HDR= 예 , 이는 첫 번째 행이 제목이 아니며 데이터로 사용되지 않음을 의미합니다. HDR=NO를 사용하면 첫 번째 행이 제목이 아니며 데이터로 사용됨을 의미합니다. 시스템 기본값은 YES매개변수 Excel 8.0 IMEX(IMport EXport 모드) 설정 그러나 이는 사실이 아닙니다. Insert Into 문이 실행되면 "작업은 업데이트 가능한 쿼리를 사용해야 합니다."라는 예외가 발생합니다. ! 웹 애플리케이션인 경우 디렉터리 액세스 권한을 추가해야 합니다. IIS_IUSRS 또는 IIS_Service 사용자 검색하여 다른 사람들이 어떻게 해결했는지 확인하는 것이 좋습니다. , 하지만 다른 사람들의 책을 다 읽었습니다. 문제를 해결하는 방법이 나에게 왔을 때 테스트를 통과하지 못했습니다! 아직도 IMEX 값 문제인 것 같아요. 1로 바꿔도 안되면 0으로 바꿔주세요. 젠장, 기적이 일어났어요! 그런 다음 IMEX를 4 또는 10으로 설정해 보았는데 1과 2를 제외하고는 모두 괜찮았습니다. 정말 치팅리듬이었습니다.
Excel 97 이상~2003의 경우 Excel 8.0을 사용하고, 2007 또는 2010의 경우 확장 속성=Excel 12.0을 사용합니다
IMEX에는 세 가지 모드가 있습니다.
0은 내보내기 모드
1은 가져오기 모드
2는 연결 모드(전체날짜 기능)
I 여기에서 특별한 설명이 필요한 것은 IMEX 매개변수입니다. 다양한 모드가 다양한 읽기 및 쓰기 동작을 나타내기 때문입니다.
IMEX=0이면 "내보내기 모드"입니다. 이 모드에서 열린 Excel 파일만 가능합니다. "쓰기" 목적으로 사용됩니다.
IMEX=1이면 "가져오기 모드"입니다. 이 모드에서 열린 Excel 파일은 "읽기" 목적으로만 사용할 수 있습니다.
IMEX=2이면 "링크 모드"입니다. 이 모드에서 열린 Excel 파일은 "읽기" 및 "쓰기" 목적을 모두 지원할 수 있습니다.
은 다음과 같습니다.
0 ---출력 모드
1---입력 모드; > 2---링크 모드(전체 업데이트 기능)
위 내용은 C#은 oledb를 사용하여 Excel에 연결하여 Insert Into 문을 실행합니다. '업데이트 가능한 쿼리를 사용해야 합니다'라는 문제를 해결하기 위한 샘플 코드입니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!