我发生错误时的环境: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不行,真是坑爹的节奏啊。
分享到:
相关推荐
只需创建一个新的`OleDbCommand`对象,使用`INSERT INTO` SQL语句,然后通过`OleDbCommand.ExecuteNonQuery()`执行即可。对于更新和删除操作,情况类似,只是SQL语句会相应地变成`UPDATE`和`DELETE`。 在实际应用中...
在C#编程中,OLEDB(Object Linking and Embedding, Database)是一个强大的数据访问接口,用于连接多种数据源,包括Microsoft Access、Excel、SQL Server等。本教程将基于"OLEDB.rar"压缩包中的"CSharp oledb_...
使用SQL语句“INSERT INTO”将数据插入到Excel表中。需要提供表名和要插入的列名及其对应的值。 6. 更新Excel表中的数据: 使用SQL语句“UPDATE”来更新表中的数据。需要指定表名、更新的字段和更新条件。 7. ...
接下来,方法遍历一个名为`fp2`的对象(假设是处理数据的类或对象)的第一张工作表,检查每一行的数据,并用`INSERT INTO` SQL语句将数据插入到Excel的Sheet1中。 这两个方法都是基于Jet Engine(也称为ACE.OLEDB)...
以下是一个使用OLEDB导出数据到Excel的基本步骤: 1. **创建连接字符串**: 连接字符串是连接到Excel文件的关键。例如: ```csharp string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\2.xls;...
"C# 读写、删除、更新Excel表格记录" ...我们使用 OleDb 连接 Excel 文件,使用 Microsoft.Office.Interop.Excel 名字空间来实现删除记录的功能,并使用 OleDbCommand 类来执行 SQL 语句来读写、更新 Excel 记录。
主要涉及的类有`System.Data.OleDb.OleDbConnection`(用于建立与数据源的连接)、`System.Data.OleDb.OleDbCommand`(用于执行SQL命令)和`System.Data.OleDb.OleDbDataReader`(用于读取查询结果)。 **三、查询...
以下是一个使用Jet引擎导出数据到DBF的基本步骤: 1. 引入所需的库: 在C#项目中,需要添加对`System.Data.OleDb`命名空间的引用,以便使用Jet引擎。 2. 创建OLEDB连接字符串: 连接字符串用于指定要连接的数据...
总的来说,C#处理Excel文件主要依赖于ADO.NET的`OleDbConnection`、`OleDbCommand`和`OleDbDataAdapter`等组件,通过构造合适的SQL语句来实现对Excel数据的查询、更新和插入操作。这种方式简单直接,但可能不适用于...
本文将深入探讨如何使用C#与Access数据库进行交互,包括建立连接、执行查询以及进行其他数据库操作。 首先,我们需要了解.NET Framework中的`System.Data.OleDb`命名空间,它提供了对OLE DB数据提供程序的支持,...
**解析**:该方法使用OLEDB连接,通过SQL查询语句从Excel文件的指定工作表中读取所有数据,并填充到`DataSet`对象中。 ##### 4.2 批量写入数据 ```csharp public bool WriteExcel(string path) { try { string ...
本主题聚焦于“C#数据库中导入导出Excel”,这是一个常见的需求,尤其是在数据分析、报表生成或用户交互场景下。Access数据库是Microsoft Office套件的一部分,常用于小型数据管理任务,它也支持与Excel的数据交互。...
基于给定的C#代码片段,我们可以深入探讨这一过程的关键知识点,包括如何使用C#读取Excel文件、如何连接并操作Access数据库,以及在这一过程中可能遇到的问题及解决方案。 ### 1. 使用C#读取Excel文件 #### 1.1 ...
总的来说,C#操作Excel涉及到了数据库操作的基础知识,如连接字符串的构造、SQL查询的编写和数据适配器的使用。同时,需要注意的是,对于较新的Excel文件(.xlsx),需要使用`Microsoft.ACE.OLEDB.12.0`提供者而不是...
具体来说,我们需要创建一个连接字符串,指定 Excel 文件的位置以及一些连接选项。然后,通过 `OleDbDataAdapter` 对象从 Excel 文件中读取数据,并填充到 `DataTable` 中。 ```csharp string strConn = "Provider=...
在C#中操作Excel是一个常见的需求,特别是在处理大量数据时。本文将详细介绍两种常用的方法:直接调用COM组件和通过OLEDB操作Excel,并对这两种方法进行比较分析。 #### 一、直接调用COM组件 **1.1 引用与配置** ...
本主题主要关注"C#常用数据库连接sql语句实例",这涉及到如何使用C#与数据库进行交互,包括建立连接、执行SQL语句以及处理结果。在此,我们将深入探讨C#中的ADO.NET框架,它是连接到各种数据库(如Access和SQL ...
根据题目中的描述,我们将详细探讨如何使用C#连接到Access数据库,并进行基本的操作,包括连接数据库、添加记录、更新数据、删除数据以及使用DataGrid显示数据。 ##### 2.1 连接数据库 连接数据库是进行任何数据库...
而在`ConsoleApp1`项目中,你将找到一个简单的控制台应用示例,该示例可能展示了上述步骤的实现,用于演示如何使用C#连接瀚高数据库并执行基本操作。 总之,通过C#和瀚高数据库的集成,开发者可以构建高效、可靠的...
本篇文章将探讨如何在C#中实现数据库查询功能,特别是通过使用OleDb连接方式。 首先,我们要了解SQL的基本查询语句。这些包括: 1. 查询:`SELECT * FROM 表名 WHERE 条件`,这将返回满足特定条件的所有记录。 2. ...