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

2023-05-16

我发生错误时的环境:Windows 7,Framework 4、0,Microsoft Office 2007,VS2010,c# WinForm;
部分代码:
[csharp]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  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 plain  copy   在CODE上查看代码片 派生到我的代码片
  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.   
  7. DirectoryInfo di = new DirectoryInfo(Path.GetDirectoryName(excelPath));  
  8. System.Security.AccessControl.DirectorySecurity dirSecurity = di.GetAccessControl();  
  9. dirSecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));  
  10. dirSecurity.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl, AccessControlType.Allow));  
  11. 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不行,真是坑爹的节奏啊  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 如何从 PowerQuery/Excel 数据模型中具有多对多关系的两个表中选取数据?

    这是我第一次在 stackoverflow 上提问 让我们看看进展如何 我正在尝试将不同规模资产的场景管理器连接到其所属的成本时间序列 以便我可以计算属于特定场景的资产配置的现金流 这就是我需要连接的两个表 简而言之 的样子 场景管理器 S
  • 如何将数据插入 Microsoft Access 数据库?

    我正在尝试将数据插入 Microsoft Access 数据库 我将数据插入到 Access 数据库中 但只有第一次和第二次显示我插入的数据 当我重建应用程序时 我插入的数据消失了 我不知道他们去了哪里并且没有出现 我使用 C 和 NET
  • Excel VBA - 循环文件夹中的文件、复制范围、粘贴到此工作簿中

    我有 500 个包含数据的 Excel 文件 我会将所有这些数据合并到一个文件中 实现此目标的任务列表 我想循环遍历文件夹中的所有文件 打开文件 复制此范围 B3 I102 将其粘贴到活动工作簿的第一张工作表中 重复但在下面粘贴新数据 我已
  • 检查所选单元格是否在特定范围内

    我正在使用 C 创建 Excel 加载项 如何检查选定的 或代码中范围表示的单元格 是否在特定范围内 例如如何检查单元格 P 5 是否在 A 1 Z 10 范围内 Use Application Intersect 像这样 在VBA中 Su
  • 如何将 Excel 中的图表导出为图形

    我有一系列 Excel 电子表格 每个电子表格至少包含一页数据和一页根据数据创建的图表 我需要捕获 不从数据中重新生成 将现有图表作为网络友好图像 这可以通过 Java 或 Net 实现吗 我知道 POI 的东西 Java 不会这样做 或者
  • 如何以编程方式从 Excel 中的 VBA 宏中删除数字签名?

    有没有办法以编程方式从 Excel 工作表的 VBA 宏中删除数字签名 即相当于进入 VBA 编辑器 转到 工具 菜单 gt 数字签名 并单击 删除 的代码 有趣的问题 出于安全原因 它故意不属于 Excel 对象模型的一部分 可以从证书存
  • 如何每次使用按钮将数据添加到 MATLAB 中的现有 XLSX 文件?

    我有一个函数可以生成一些变量 例如分数 对 错 未回答 使用按钮调用此功能 问题是如何每次将函数生成的这些值添加 附加到 XLSX 文件中 或者 如何创建 MAT 文件以便可以添加它 可能的解决方案是什么 附加到 xls 文件所涉及的挑战是
  • 如何在Java,Apache POI中获取Excel单元格字段的字体样式?

    我想用Java捕获Excel中单元格字段的字体 我正在使用 Apache POI 如果可以的话我想捕捉font color font family font weight font size etc 我怎样才能实现这个目标 根据评论进行编辑
  • 非相邻单元格作为数组函数的输入(MIN 和 ISBLANK)

    提出了这个问题 由于具体问题的答案是一个拼写错误 因此被删除 https stackoverflow com questions 59289065 excel non adjecent cells as input to array fun
  • 需要在Excel中合并3列

    我有 3 列 A B C 我需要合并这 3 列 并且我已经应用了 forumala A1 B1 C1输出为 E 列 我需要输出为 D 列 下面的公式将达到您想要的结果 TEXTJOIN TRUE A1 C1 Textjoin 的工作方式类似
  • 调用退出后应用程序未退出

    我有一个小问题 我似乎无法弄清楚 我正在将 DataGridView 它的内容 保存到 xls 文件中 我这样做没有任何问题 除了在我的任务管理器中它仍然显示它正在运行 我已致电 xlApp Application Quit 这被声明为 D
  • 你将如何开始自动化我的工作? - 第2部分

    后续这个问题 https stackoverflow com questions 2796128 how would you start automating my job 在经历了第一波进货 9 小时的复制 粘贴 后 我现在相信我已经满足
  • 实体框架、dll、excel

    我用C 编写了Excel使用的dll 该dll是COM注册的 我与 Excel 的连接没有问题 该 dll 使用实体框架 5 从 SQL Server 数据库检索数据 如果我通过控制台应用程序运行该 dll 则该 dll 工作正常 但是当我
  • 如何将 HTML 表格导出为 .xlsx 文件

    我有一个关于导出的问题HTML表格 as an xlsx文件 我做了一些工作 现在我可以将其导出为xls 但我需要将其导出为xlsx 这是我的 jsFiddle https jsfiddle net 272406sv 1 https jsf
  • 即使 Excel 中存在多条记录,CopyFromRecordset 也仅复制并粘贴第一行

    我有一个包含表格数据的 Excel 工作表 strSQL SELECT S FIELD NAME1 S FIELD NAME2 S FIELD NAME3 from SourceData A1 IV6 S Dim cn as ADODB C
  • 选择在 Excel 宏(VBA 中的范围对象)中具有值的列

    如何修改 VBA 中的这一行以仅选择具有值的列 Set rng Range A1 Range A65536 End xlUp SpecialCells xlCellTypeVisible 我不认为我做的事情是正确的CountLarge财产是
  • Excel VBA 导出到文本文件。需要删除空行

    我有一个工作簿 使用以下脚本将其导出到文本文件 它工作正常 但是当我打开文本文件时 末尾总是有一个空行 这导致我在生成此文本文件后运行的另一个脚本出现问题 有关如何从导出中删除空行的任何帮助 Code Sub Rectangle1 Clic
  • 如何在字符串vba中包含引号

    我想存储以下文本 Test1 Monday Test Abcdef 全部在字符串中包含引号 我知道要在字符串中包含引号 我必须包含 之前 但在这里这不是一个很好的解决方案 因为我在文本中有太多这样的解决方案 知道如何一次完成这一切吗 您有两
  • 字典、集合和数组的比较

    我正在尝试找出字典与集合和数组相比的相对优点和功能 我发现了一篇很棒的文章here http www experts exchange com articles 3391 Using the Dictionary Class in VBA
  • laravel中过滤后如何导出excel?

    我想仅导出视图刀片中过滤的数据 我正在使用 Laravel 7 和 maatwebsite excel 3 1 和 PHP 7 4 2 我浏览了文档并应用了这个 View a href class btn btn success i cla

随机推荐

  • 动态存储和静态存储区域区别

    动态存储方式 所谓动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式 动态存储变量是在程序执行过程中 xff0c 使用它时才分配存储单元 xff0c 使用完毕立即释放 典型的例子是函数的形式参数 xff0c 在函数定义时并不
  • c++中默认32位int类型转换截取高位部分

    int类型的变量固定为4个字节 xff0c 共32位 int类型变量初始值一般为0 xff0c 范围 2 31 2 31 1 即 2147483648 xff0c 2147483647 16 位系统下 xff0c int 是 2 个字节 x
  • c#-接口

    c 中的接口中必须是未实现的方法 xff0c 例如属性 xff0c 事件 xff0c 索引器 xff0c 一般函数等 除此之外不能有其他的成员 xff0c 类可以继承两个或两个以上的接口 xff0c 派生类中必须实现接口中的所有方法
  • C# SerialPort 读写三菱FX系列PLC

    1 xff1a 串口初始化 com 61 new SerialPort 34 COM3 34 9600 Parity Even 7 StopBits One 2 xff1a 打开关闭串口 if com IsOpen com Close co
  • c++中用new和不用new创建对象的本质区别

    1 xff1a 作用域不同 不用new xff1a 作用域限制在定义类对象的方法中 xff0c 当方法结束时 xff0c 类对象也被系统释放了 xff0c xff08 安全不会造成内存系统泄漏 xff09 用new xff1a 创建的是指向
  • ubuntu系统通过ifconfig查看eth0只有ipv6没有ipv4的解决方案

    只有inet6 addr 配置eth0 3 重新启动sudo etc init d networking restart IP地址出来了 看起来就正常 4 看其他资料 xff0c linux 43 QT4 0 xff0c 在这个开发板上的l
  • Action<T> 无参数委托详解

    C 委托Action Action lt T gt Func lt T gt Predicate lt T gt CLR环境中给我们内置了几个常用委托Action Action lt T gt Func lt T gt Predicate
  • 在C++里,有两种方法创建对象:

    方法一 xff1a ClassName object param 这样就声明了一个ClassName类型的object对象 xff0c C 43 43 会为它分配足够的存放对象所有成员的存储空间 注意 xff1a 为节省存储空间 xff0c
  • C++中引用(&)的用法和应用实例

    对于习惯使用C进行开发的朋友们 xff0c 在看到c 43 43 中出现的 amp 符号 xff0c 可能会犯迷糊 xff0c 因为在C语言中这个符号表示了取地址符 xff0c 但是在C 43 43 中它却有着不同的用途 xff0c 掌握C
  • C++中重载与重写函数区别及虚函数(转载)

    C 43 43 中重载与重写函数区别及虚函数 C 43 43 中的虚函数 virtual function 1 简介 虚函数是C 43 43 中用于实现多态 polymorphism 的机制 核心理念就是通过基类访问派生类定义的函数 假设我
  • c#中的静态构造函数

    静态构造函数是C 的一个新特性 xff0c 其实好像很少用到 不过当我们想初始化一些静态变量的时候就需要用到它了 这个构造函数是属于类的 xff0c 而不是属于哪里实例的 xff0c 就是说这个构造函数只会被执行一次 也就是在创建第一个实例
  • C++中重写与覆写(虚函数virtual)的区别

    本文章已收录于 xff1a 虚函数的情况下调用成员函数时调用的是指向对象的所属类的成员函数例子中为apple class fruit public void func printf 34 fruit n 34 virtual void vf
  • duilib入门问题集

    引入duilib时 请确保引入头文件开始时先引入COMUTIL H头文件 include 34 COMUTIL H 34 include 34 UIlib h 34 duilib基本程序结构 在stdafx h文件中加入 cpp view
  • C#中常用的几种读取XML文件的方法

    XML文件是一种常用的文件格式 xff0c 例如WinForm里面的app config以及Web程序中的web config文件 xff0c 还有许多重要的场所都有它的身影 Xml是Internet环境中跨平台的 xff0c 依赖于内容的
  • C++(1) 指针 new 和delete

    1 概念 new typeName pointer name 61 new typeName delete delete pointer name 注意 xff1a 1 new之后要判断 xff0c 指针是否为NULL xff0c 内存被耗
  • C++的new

    C 43 43 中的new其实是一个很糊弄人的术语 xff0c 它有两种不同的含义 xff0c new运算符 xff08 new operator xff09 和new函数 xff08 operator new xff09 xff0c 值得
  • s32ds

    S32DS使用复位窗口的方式还原 xff1a 在S32DS菜单栏 Windows Perspective Reset Perspective 添加组件 xff0c 自动生成代码 xff1a
  • 在C#中使用SerialPort类实现串口通信 遇到多线程问题

    在C 中使用SerialPort类实现串口通信 遇到多线程问题 在C 中使用SerialPort类实现串口通信 2009年11月01日 星期日 10 03 在 NET work 2 0中提供了SerialPort类 xff0c 该类主要实现
  • [C#]委托和事件(详细讲解)

    引言 委托 和 事件在 Net Framework中的应用非常广泛 xff0c 然而 xff0c 较好地理解委托和事件对很多接触C 时间不长的人来说并不容易 它们就像是一道槛儿 xff0c 过了这个槛的人 xff0c 觉得真是太容易了 xf
  • 连接excel执行Insert Into语句出现“操作必须使用一个可更新的查询”的解决

    C 使用oledb连接excel执行Insert Into语句出现 操作必须使用一个可更新的查询 的解决办法 我发生错误时的环境 xff1a Windows 7 xff0c Framework 4 0 xff0c Microsoft Off