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

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

黄舟
黄舟원래의
2017-03-13 17:46:372088검색

오류가 발생한 환경: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.