`
testcs_dn
  • 浏览: 113924 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多
我发生错误时的环境: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#操作Excel(OLEDB)

    只需创建一个新的`OleDbCommand`对象,使用`INSERT INTO` SQL语句,然后通过`OleDbCommand.ExecuteNonQuery()`执行即可。对于更新和删除操作,情况类似,只是SQL语句会相应地变成`UPDATE`和`DELETE`。 在实际应用中...

    OLEDB.rar_CSharp oledb_GenericOLEDB_c# oledb语句_c#oledb_oledb

    在C#编程中,OLEDB(Object Linking and Embedding, Database)是一个强大的数据访问接口,用于连接多种数据源,包括Microsoft Access、Excel、SQL Server等。本教程将基于"OLEDB.rar"压缩包中的"CSharp oledb_...

    C# 通过 oledb 操作Excel实例代码

    使用SQL语句“INSERT INTO”将数据插入到Excel表中。需要提供表名和要插入的列名及其对应的值。 6. 更新Excel表中的数据: 使用SQL语句“UPDATE”来更新表中的数据。需要指定表名、更新的字段和更新条件。 7. ...

    C#操作Excel(导入导出)

    接下来,方法遍历一个名为`fp2`的对象(假设是处理数据的类或对象)的第一张工作表,检查每一行的数据,并用`INSERT INTO` SQL语句将数据插入到Excel的Sheet1中。 这两个方法都是基于Jet Engine(也称为ACE.OLEDB)...

    C#使用oledb导出数据到excel的方法

    以下是一个使用OLEDB导出数据到Excel的基本步骤: 1. **创建连接字符串**: 连接字符串是连接到Excel文件的关键。例如: ```csharp string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\2.xls;...

    C# 读写,删除,更新Excel表格记录

    "C# 读写、删除、更新Excel表格记录" ...我们使用 OleDb 连接 Excel 文件,使用 Microsoft.Office.Interop.Excel 名字空间来实现删除记录的功能,并使用 OleDbCommand 类来执行 SQL 语句来读写、更新 Excel 记录。

    C#程序-----OLEDB

    主要涉及的类有`System.Data.OleDb.OleDbConnection`(用于建立与数据源的连接)、`System.Data.OleDb.OleDbCommand`(用于执行SQL命令)和`System.Data.OleDb.OleDbDataReader`(用于读取查询结果)。 **三、查询...

    C# 导出DBF的两种方法

    以下是一个使用Jet引擎导出数据到DBF的基本步骤: 1. 引入所需的库: 在C#项目中,需要添加对`System.Data.OleDb`命名空间的引用,以便使用Jet引擎。 2. 创建OLEDB连接字符串: 连接字符串用于指定要连接的数据...

    c#处理EXCEL操作包括查询以及增改.pdf

    总的来说,C#处理Excel文件主要依赖于ADO.NET的`OleDbConnection`、`OleDbCommand`和`OleDbDataAdapter`等组件,通过构造合适的SQL语句来实现对Excel数据的查询、更新和插入操作。这种方式简单直接,但可能不适用于...

    C#与Access数据库的链接并进行查询等操作

    本文将深入探讨如何使用C#与Access数据库进行交互,包括建立连接、执行查询以及进行其他数据库操作。 首先,我们需要了解.NET Framework中的`System.Data.OleDb`命名空间,它提供了对OLE DB数据提供程序的支持,...

    C#读写Excel文件

    **解析**:该方法使用OLEDB连接,通过SQL查询语句从Excel文件的指定工作表中读取所有数据,并填充到`DataSet`对象中。 ##### 4.2 批量写入数据 ```csharp public bool WriteExcel(string path) { try { string ...

    C# 数据库中导入导出excel

    本主题聚焦于“C#数据库中导入导出Excel”,这是一个常见的需求,尤其是在数据分析、报表生成或用户交互场景下。Access数据库是Microsoft Office套件的一部分,常用于小型数据管理任务,它也支持与Excel的数据交互。...

    C# Excel 导入到 Access数据库表

    基于给定的C#代码片段,我们可以深入探讨这一过程的关键知识点,包括如何使用C#读取Excel文件、如何连接并操作Access数据库,以及在这一过程中可能遇到的问题及解决方案。 ### 1. 使用C#读取Excel文件 #### 1.1 ...

    C#操作EXCEL

    总的来说,C#操作Excel涉及到了数据库操作的基础知识,如连接字符串的构造、SQL查询的编写和数据适配器的使用。同时,需要注意的是,对于较新的Excel文件(.xlsx),需要使用`Microsoft.ACE.OLEDB.12.0`提供者而不是...

    C# Excel导入数据库

    具体来说,我们需要创建一个连接字符串,指定 Excel 文件的位置以及一些连接选项。然后,通过 `OleDbDataAdapter` 对象从 Excel 文件中读取数据,并填充到 `DataTable` 中。 ```csharp string strConn = "Provider=...

    C#操作Excel的方法方法比较

    在C#中操作Excel是一个常见的需求,特别是在处理大量数据时。本文将详细介绍两种常用的方法:直接调用COM组件和通过OLEDB操作Excel,并对这两种方法进行比较分析。 #### 一、直接调用COM组件 **1.1 引用与配置** ...

    C# 常用数据库连接 sql语句实例

    本主题主要关注"C#常用数据库连接sql语句实例",这涉及到如何使用C#与数据库进行交互,包括建立连接、执行SQL语句以及处理结果。在此,我们将深入探讨C#中的ADO.NET框架,它是连接到各种数据库(如Access和SQL ...

    C#与access连接方法

    根据题目中的描述,我们将详细探讨如何使用C#连接到Access数据库,并进行基本的操作,包括连接数据库、添加记录、更新数据、删除数据以及使用DataGrid显示数据。 ##### 2.1 连接数据库 连接数据库是进行任何数据库...

    C#连接瀚高数据库示例

    而在`ConsoleApp1`项目中,你将找到一个简单的控制台应用示例,该示例可能展示了上述步骤的实现,用于演示如何使用C#连接瀚高数据库并执行基本操作。 总之,通过C#和瀚高数据库的集成,开发者可以构建高效、可靠的...

    C#连接数据库之查询功能的实现

    本篇文章将探讨如何在C#中实现数据库查询功能,特别是通过使用OleDb连接方式。 首先,我们要了解SQL的基本查询语句。这些包括: 1. 查询:`SELECT * FROM 表名 WHERE 条件`,这将返回满足特定条件的所有记录。 2. ...

Global site tag (gtag.js) - Google Analytics