我错误发生时的环境:Windows 7,Framework 4、0,Microsoft Office 2007,VS2010,c# WinForm。
部分代码:
                    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; HDR=yes; IMEX=2'

參数HDR的值:

HDR=Yes。这代表第一行是标题。不做为数据使用 。假设用HDR=NO,则表示第一行不是标题。做为数据来使用。系统默认的是YES
參数Excel 8.0 对于Excel 97以上到2003版本号都用Excel 8.0,2007或2010的都用Extended Properties=Excel 12.0
IMEX ( IMport EXport mode )设置
  IMEX 有三种模式:
  0 is Export mode
  1 is Import mode
  2 is Linked mode (full update capabilities)
  我这里特别要说明的就是 IMEX 參数了。由于不同的模式代表著不同的读写行为:
  当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案仅仅能用来做“写入”用途。
  当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案仅仅能用来做“读取”用途。
  当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同一时候支援“读取”与“写入”用途。

意义例如以下:
0 ---输出模式;
1---输入模式;
2----链接模式(全然更新能力)

依照以上描写叙述,上面的连接字符串应该是能够读取,插件记录的

可是事实并不是如此,当执行Insert Into语句时却出现异常:“操作必须使用一个可更新的查询”!

注意是c# WinForm程序,不是Web应用程序;假设是Web应用程序。那须要加入IIS_IUSRS或IIS_Service用户的文件夹訪问权限;
还是去搜索看看别人是怎么解决的吧,可是看遍了别人解决这个问题的方法,到我这里就是測试不通过!
推測还是IMEX值的问题,改为1不行。那就改为0,尼马,奇迹出现了! 
接着又測试将IMEX设置为4或10,结果都没问题,只有1和2不行。真是坑爹的节奏啊。

C#使用oledb连接excel运行Insert Into语句出现“操作必须使用一个可更新的查询”的解决的方法的更多相关文章

  1. 问题.NETSystem.Data.OleDb.OleDbException 操作必须使用一个可更新的查询

    问题:System.Data.OleDb.OleDbException 操作必须使用一个可更新的查询 问题现象:用asp.net连access数据库,查询可以,插入数据报错.在.NET中F5可以使用方 ...

  2. 关于OleDB连接Excel的Extended Properties(扩展属性)HDR=YES; IMEX=2个人理解心得

    近期在用C#写一个创建Excel并将数据导出到Excel的WinForm程序, 让我对OleDB连接Excel的Extended Properties(扩展属性)HDR=YES; IMEX=2有了深刻 ...

  3. C#彻底解决Oledb连接Excel数据类型不统一的问题

    在使用Microsoft.Jet.OLEDB.4.0连接Excel,进行读取数据,相对使用传统的COM来读取数据,效率是很高的.但相对传统COM操作Excel来说,及存在数据类型转换的问题.因为使用O ...

  4. OLEDB 连接EXCEL的连接字符串IMEX的问题(Oledb)

    今天碰到一个问题需要想EXCEL表中写数据,折腾了好久才发现是IMEX惹得祸,所以记录下提醒自己,也希望大家不要出同样的错. 碰到问题:使用语句 "insert into [Sheet1$] ...

  5. 连接Excel数据库

    SQL语法:http://www.w3school.com.cn/sql/sql_syntax.asp Ctrl键拖(也就是复制) 先输入1,2,然后下拉 一.问题的提出 在ASP编程中会遇到很多大大 ...

  6. Excel数据生成Sql语句的方法

    选中想要生成的列,套用表格格式,选中表包含标题的选项确定,然后在最右边的一列第二行处,点击函数功能,选择CONCATENATE,在文本里输入想要的结构即可  代码如下 复制代码 ,=CONCATENA ...

  7. [Java][Android][Process] 暴力的服务能够解决一切,暴力的方式运行命令行语句

    不管是在Java或者Android中运行命令行语句殊途同归都是创建一个子进程运行调用可运行文件运行命令.类似于Windows中的CMD一样. 此时你有两种方式运行:ProcessBuilder与Run ...

  8. C#读取Excel文件:通过OleDb连接,把excel文件作为数据源来读取

    转载于:http://developer.51cto.com/art/200908/142392.htm C#读取Excel文件可以通过直接读取和OleDb连接,把excel文件作为数据源来读取:   ...

  9. Excel的 OleDb 连接串的格式

    Excel的 OleDb 连接串的格式(Provider=Microsoft.ACE.OLEDB)(2012-08-02 13:04:20) string strCon = "Provide ...

随机推荐

  1. webSql的简单小例子

    初始化websql数据库的参数信息 var config = { name: 'my_plan', version: '', desc: 'manage my plans', size: 20 * 1 ...

  2. Java 基础入门随笔(8) JavaSE版——静态static

    面向对象(2) this:代表对象.代表哪个对象呢?当前对象. 当成员变量和局部变量重名,可以用关键字this来区分. this就是所在函数所属对象的引用.(简单说:哪个对象调用了this所在的函数, ...

  3. CentOS上oracle 11g R2数据库安装折腾记

    1.虚拟机上centos镜像的获取.这里推荐网易镜像站中的CentOS7版本(其他开源镜像站亦可).这里给出链接: http://mirrors.163.com/centos/7.3.1611/iso ...

  4. 踩过好多次的坑 - ajax访问【mango】项目的service

    这个坑真的是踩过好多次了,好记性不如烂笔头,我总是太高估我的记忆力,这次真的是要写下来了. 项目是用的seam框架 + hibernate搭建的,架构是前辈们搭好的劳动成果,在配置service的访问 ...

  5. 梦想CAD控件关于标注的系统变量说明

    主要用到函数说明: IMxDrawDimension::SetDimVarDouble 设置标注属性的实数类型变量值,详细说明如下: 参数 说明 [in] LONG iType 该属性的类形值 dVa ...

  6. Java变量及数据类型

    变量及数据类型 变量 变量定义格式:数据类型 变量名 = 初始化值; 基本数据类型 整形数据 package com.ahabest.demo; //输出整形数据的最小值,默认值,最大值,二进制位数 ...

  7. luogu P4137 Rmq Problem / mex 主席树 + 思维

    Code: #include<bits/stdc++.h> #define maxn 200001 using namespace std; void setIO(string s) { ...

  8. BLOCK层基本概念:bio,request,request_queue

    Summary bio 代表一个IO 请求 request 是bio 提交给IO调度器产生的数据,一个request 中放着顺序排列的bio 当设备提交bio 给IO调度器时,IO调度器可能会插入bi ...

  9. time模块,补上之前拉下的作业。

    time,时间模块比较重要,但不难学,主要是要学会转换时间格式.计算机的时间都是时间戳.人是看不懂的.写出时间转换的固定格式语句.import time   # 首先就是引入时间模块. time.ti ...

  10. python3 时间模块 random模块之两个小练习

    话不多说,一个是算时间的,还有一个是生成验证码的 #!usr/bin/env/ python # -*- coding:utf-8 -*- # Author: XiaoFeng import time ...