Maison > développement back-end > Tutoriel C#.Net > C# utilise Oledb pour se connecter à Excel afin d'exécuter l'instruction Insert Into. L'exemple de code de la solution « doit utiliser une requête pouvant être mise à jour » apparaît.

C# utilise Oledb pour se connecter à Excel afin d'exécuter l'instruction Insert Into. L'exemple de code de la solution « doit utiliser une requête pouvant être mise à jour » apparaît.

黄舟
Libérer: 2017-03-13 17:46:37
original
2182 Les gens l'ont consulté

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");
                        }
Copier après la connexion


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);
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal