C#使用oledb连接excel执行Insert Into语句出现“操作必须使用一个可更新的查询”的解决办法

我发生错误时的环境:Windows 7,Framework 4、0,Microsoft Office 2007,VS2010,c# WinForm;
部分代码:
[csharp] view plaincopy
  1. string strConn = "Provider=Microsoft.Ace.OleDb.12.0;Persist Security Info=False;" + "data source=" + @excelPath + ";Extended Properties='Excel 12.0; HDR=yes; IMEX=2'";
  2. OleDbConnection conn = new OleDbConnection();
  3. conn.ConnectionString = strConn;
  4. try
  5. {
  6. OleDbCommand cmd = null;
  7. try
  8. {
  9. cmd = new OleDbCommand("Insert Into [Sheet1$] Values('abc', 'bac', '0', '123456', 'test','测试','aa')", conn);//(A,B,C,D,E,F,G)
  10. cmd.ExecuteNonQuery();
  11. }
  12. catch (System.Exception ex)
  13. {
  14. textBox1.Text += ("插入数据失败:" + ex.Message);
  15. textBox1.Text += ("\r\n");
  16. }
遇到此错误的时候第一想到的就是没有权限,但使用管理员身份运行依然是相同的错误!
又通过以下代码添加权限,还是一样的错误:
[csharp] view plaincopy
  1. FileInfo fi = new FileInfo(excelPath);
  2. System.Security.AccessControl.FileSecurity fileSecurity = fi.GetAccessControl();
  3. fileSecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));
  4. fileSecurity.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl, AccessControlType.Allow));
  5. fi.SetAccessControl(fileSecurity);
  6. DirectoryInfo di = new DirectoryInfo(Path.GetDirectoryName(excelPath));
  7. System.Security.AccessControl.DirectorySecurity dirSecurity = di.GetAccessControl();
  8. dirSecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));
  9. dirSecurity.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl, AccessControlType.Allow));
  10. 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不行,真是坑爹的节奏啊

连接excel执行Insert Into语句出现“操作必须使用一个可更新的查询”的解决相关推荐

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

    我错误发生时的环境:Windows 7,Framework 4.0,Microsoft Office 2007,VS2010,c# WinForm. 部分代码: string strConn = &q ...

  2. 操作必须使用一个可更新的查询的解决方法

    来自Asp.net精英论坛:bbs.1aspx.com 今天遇到了一个错误: 我把网站添加到IIS后浏览,提示"操作必须使用一个可更新的查询的解决方法" 有些奇怪,刚刚在vs里运行 ...

  3. Access update语句 提示 操作必须使用一个可更新的查询Access update语句 提示 操作必须使用一个可更新的查询

    <script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.cr ...

  4. 操作必须使用一个可更新的查询 ,解决

    操作必须使用一个可更新的查询. 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.Data. ...

  5. Access提示“操作必须使用一个可更新的查询”的解决办法

    问题: 软件工程师开发了一个asp.net+access网站,本地调试增.删.改和查都没有异常.部署到服务器windows2008 R2的IIS上运行后,查询没有异常. 可是在修改操作提交时,产生异常 ...

  6. ”操作必须使用一个可更新的查询“的解决

    今天在把做好的网站放到局域网的服务器时候碰到了一个问题,在上传文件之后提示"操作必须使用一个可更新的查询",然后点击去查看显示上传文件信息的gridview时上传上去的文件根本显示 ...

  7. “操作必须使用一个可更新的查询”故障解决

    这个错误发生在当你的程序试图执行更新数据库或其它类似操作时,这是因为由于访客权限不够而不能够写数据库造成的:此类错误多发生在用ACCESS数据库的小活动程序,解决办法如下: 1.       最普遍的 ...

  8. access数据库出现操作必须使用一个可更新的查询的解决办法

    查看相应数据库文件,发现ACCESS数据库文件只有读权限,没有写和修改的权限,所以对于update.delete等的操作无法正确完成. 解决办法: 在IIS中修改mdb文件的权限,针对user用户(以 ...

  9. Access数据库:它已经被别的用户以独占方式打开,操作必须使用一个可更新的查询,不能锁定文件

    转自:http://iasp.bokee.com/  笔名:iasp 由于网络开发过程,或者一些下载的例子工程一般都用Access数据库,因为它方便不需要服务器,以文件方式就可以访问. Access数 ...

最新文章

  1. apache http server指的是什么
  2. ngx_lua_API 指令详解(三)怎样理解 cosocket指令
  3. 通俗易懂!白话朴素贝叶斯
  4. monit 内存 监控_如何借助Monit搭建服务器监控系统?(1)
  5. 测试工具:Windows下超强日志工具BareTail
  6. WebService和Netty的区别
  7. linux mysql主从配置_linux下mysql主从配置
  8. 与其他.Net异步模式和类型进行互操作
  9. MEMORY系列之“DRAM概述”
  10. 记录一下Base64 在线编码解码
  11. 消除红眼效应及matlab实现
  12. 广州蓝景分享—前端开发JavaScript中的Array对象与其他数组
  13. 数字信号处理专业术语翻译
  14. linux编译各种报错(拙见)
  15. Bzoj4766 文艺计算姬
  16. python自动化------问卷星刷问卷3.0版本
  17. 会放弃的人生才会更洒脱
  18. 解决IDEA占用C盘空间过大的问题
  19. 如何查看PHP得版本?
  20. 【FPGA教程案例96】控制案例1——基于FPGA的自适应PID控制器verilog实现

热门文章

  1. 公众平台模板消息所在行业_微信公众号模板消息功能怎么快速推送?
  2. 自由存储区和堆的区别_区块链发展阶段:IPFS和Filecoin赋能分布式存储
  3. 交公粮了:国庆在家我都逛哪些技术网站?
  4. 为什么8位数据范围是-128到127,而不是-127到128?
  5. 易创互联 php,易创网站管理系统(DIRCMS) 2011 SP3 UTF8
  6. java传值的代码_SpringMVC的简单传值(实现代码)
  7. C语言求积标识符,《C语言程序设计》模拟试卷四.doc
  8. php5.3.3php5.4如何支持zend,PHP5.3、PHP5.4下安装ZendOptimizer或Zend Guard Loader的方法
  9. linux有防火墙么,Linux防火墙Firewall和Iptables的使用
  10. .NetCore 下开发独立的(RPL)含有界面的组件包 (四)授权过滤