L'environnement dans lequel l'erreur s'est produite : Windows 7, Framework 4, 0, Microsoft Office 2007, VS2010, c# WinPourm
Partie du 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"); }
La première chose qui me vient à l'esprit lorsque je rencontre cette erreur est qu'il n'y a pas d'autorisation, mais qu'il s'exécute en tant que un administrateur est toujours le même Erreur !
Ajoutez des autorisations via le code suivant, mais toujours la même erreur :
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);
Tutoriel de connaissances, ici il y a plus de chaînes de connexion : Extended Properties='Excel 12.0 ; HDR=oui; IMEX=2'
Valeur du paramètre HDR :
HDR=Oui, ce qui signifie que la première ligne est le titre et n'est pas utilisée comme données. Si HDR=NO est utilisé, cela signifie que la première ligne n'est pas le titre et est utilisée comme données. La valeur par défaut du système est OUI
Paramètre Excel 8.0 Pour Excel 97 et supérieur jusqu'en 2003, utilisez Excel 8.0, et pour 2007 ou 2010, utilisez Extended Properties=Excel 12.0
Paramètres IMEX (mode IMport EXport)
IMEX a trois modes :
0 est Le mode d'exportation
1 est le mode d'importation
2 est le mode lié (capacités complètes de mise à jourdate)
I Ce qui nécessite une explication particulière ici, c'est le paramètre IMEX, car différents modes représentent différents comportements de lecture et d'écriture :
Lorsque IMEX=0, c'est le "mode export". Seul le fichier Excel ouvert dans ce mode peut être utilisé. être utilisé à des fins « d’écriture ».
Lorsque IMEX=1, c'est "mode importation". Le fichier Excel ouvert dans ce mode ne peut être utilisé qu'à des fins de "lecture".
Lorsque IMEX=2, c'est le "mode lien". Le fichier Excel ouvert dans ce mode peut prendre en charge à la fois des fins de "lecture" et "d'écriture".
signifie comme suit :
0 ---mode de sortie
1---mode d'entrée
2----Mode lien (capacité de mise à jour complète)
Selon la description ci-dessus, la chaîne de connexion ci-dessus doit être lisible et enregistrée par le plug-in
Mais ce n'est pas le cas lors de l'exécution de l'instruction Insert Into, une exception se produit : « L'opération doit utiliser une requête actualisable.
Notez qu'il s'agit d'un programme c# WinForm, pas d'une application Web ; s'il s'agit d'une application Web, vous devez ajouter les autorisations d'accès au répertoire. de l'utilisateur IIS_IUSRS ou IIS_Service
Il est préférable de rechercher et de voir comment les autres l'ont résolu , mais j'ai lu partout d'autres La méthode pour résoudre le problème n'a pas réussi le test quand il m'est venu ! Je suppose que c'est toujours un problème avec la valeur IMEX. Si la changer à 1 ne fonctionne pas, alors changez-la à 0.
Bon sang, un miracle s'est produit !
Ensuite, j'ai essayé de régler IMEX sur 4 ou 10, et les résultats étaient tous bons, sauf 1 et 2. C'était vraiment un rythme de triche.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!