C#은 oledb를 사용하여 Excel에 연결하여 Insert Into 문을 실행합니다. '업데이트 가능한 쿼리를 사용해야 합니다'라는 문제를 해결하기 위한 샘플 코드입니다.

黄舟
풀어 주다: 2017-03-13 17:46:37
원래의
2138명이 탐색했습니다.

오류가 발생한 환경: 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
Excel 97 이상~2003의 경우 Excel 8.0을 사용하고, 2007 또는 2010의 경우 확장 속성=Excel 12.0을 사용합니다

IMEX(IMport EXport 모드) 설정
 IMEX에는 세 가지 모드가 있습니다.
 0은 내보내기 모드
 1은 가져오기 모드
 2는 연결 모드(전체날짜 기능)
I 여기에서 특별한 설명이 필요한 것은 IMEX 매개변수입니다. 다양한 모드가 다양한 읽기 및 쓰기 동작을 나타내기 때문입니다.
IMEX=0이면 "내보내기 모드"입니다. 이 모드에서 열린 Excel 파일만 가능합니다. "쓰기" 목적으로 사용됩니다.
IMEX=1이면 "가져오기 모드"입니다. 이 모드에서 열린 Excel 파일은 "읽기" 목적으로만 사용할 수 있습니다.
IMEX=2이면 "링크 모드"입니다. 이 모드에서 열린 Excel 파일은 "읽기" 및 "쓰기" 목적을 모두 지원할 수 있습니다.
은 다음과 같습니다.
0 ---출력 모드
1---입력 모드; > 2---링크 모드(전체 업데이트 기능)

위 설명에 따르면 위 연결 문자열은 플러그인에서 읽을 수 있고 기록할 수 있어야 합니다


그러나 이는 사실이 아닙니다. Insert Into 문이 실행되면 "작업은 업데이트 가능한 쿼리를 사용해야 합니다."라는 예외가 발생합니다. !

웹 애플리케이션이 아니라 c# WinForm 프로그램이라는 점에 유의하세요.

웹 애플리케이션인 경우 디렉터리 액세스 권한을 추가해야 합니다. IIS_IUSRS 또는 IIS_Service 사용자

검색하여 다른 사람들이 어떻게 해결했는지 확인하는 것이 좋습니다. , 하지만 다른 사람들의 책을 다 읽었습니다. 문제를 해결하는 방법이 나에게 왔을 때 테스트를 통과하지 못했습니다!

아직도 IMEX 값 문제인 것 같아요. 1로 바꿔도 안되면 0으로 바꿔주세요.

젠장, 기적이 일어났어요!

그런 다음 IMEX를 4 또는 10으로 설정해 보았는데 1과 2를 제외하고는 모두 괜찮았습니다. 정말 치팅리듬이었습니다.

위 내용은 C#은 oledb를 사용하여 Excel에 연결하여 Insert Into 문을 실행합니다. '업데이트 가능한 쿼리를 사용해야 합니다'라는 문제를 해결하기 위한 샘플 코드입니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!