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

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

 
阅读更多

最近在用C#写一个创建Excel并将数据导出到Excel的WinForm程序

让我对OleDB连接Excel的Extended Properties(扩展属性)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----链接模式(完全更新能力)

按照以上描述,下面的连接字符串应该是可以读取,插件记录的:
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;
但是事实并非如此,当执行Insert Into语句时却出现异常:“操作必须使用一个可更新的查询”!
这里需要说明一下我发生错误时的环境:Windows 7,Framework 4、0,Microsoft Office 2007,VS2010,c# WinForm;
注意是c# WinForm程序,不是Web应用程序;我刚遇到此错误的时候以为是没有权限,但使用管理员身份运行依然是相同的错误!
又通过以下代码添加权限,还是一样的错误:
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);
还是去搜索看看别人是怎么解决的吧,但是看遍了别人解决问题的方法,到我这里就是测试不通过!
猜测还是IMEX值的问题,改为1不行,那就改为0,尼马,奇迹出现了!
接着又测试将IMEX设置为4或10,结果都没问题,唯独1和2不行,真是坑爹的节奏啊。
分享到:
评论

相关推荐

    使用oledb读写excel出

    - `ExtendedProperties`:包含额外的连接属性,如Excel版本、头行处理方式等。 2. **Extended Properties详解** - **HDR (Header Row)**:用于指定Excel文件中的第一行是否为表头。 - `HDR=yes`:表示第一行是...

    上传并读取EXCEL的数据,显示到GridView中

    Extended Properties=\"Excel 8.0;IMEX=1;HDR=No\";";//这是excel2003的写法 } else { strConn = "Provider=Microsoft.ace.oledb.12.0;Data Source=" + filepath + ";Extended Properties=\"Excel 12.0;HDR=No;...

    Excel连接字符串中的HDR、IMEX参数详解

    在使用Excel进行数据导入导出操作时,连接字符串中的HDR与IMEX参数扮演着重要的角色,尤其是在与数据库进行数据交换时。HDR参数用于指示数据表的第一行是否作为字段名称处理,而IMEX参数则定义了Excel在打开数据文件...

    如何在Sqlserver 中查询Excel.txt

    Extended Properties=Excel 12.0 Xml;HDR=YES;IMEX=1;', '[Sheet2$]')` - **对于Excel 97-2003**:使用`Microsoft.Jet.OLEDB.4.0`提供程序。 - 示例命令:`SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', '...

    Asp.Net(C#)使用oleDbConnection 连接Excel的方法

    针对如果上连接字符串 对相关属性进行说明如下:”HDR=Yes;”指示第一行中包含列名,而不是数据,”IMEX=1;”通知驱动程序始终将“互混”数据列作为文本读取。Excel 8.0 针对Excel2000及以上版本,Excel5.0 针对...

    C#使用oledb操作excel文件的方法

    - `Extended Properties`:定义特殊属性,如Excel版本、是否包含列头(HDR)以及数据导入模式(IMEX)。 1. **读取Excel文件** 要读取Excel文件,我们创建一个`OleDbConnection`对象并打开连接。然后创建一个`...

    C#使用oledb读取excel表格内容到datatable的方法

    本文实例讲述了C#使用oledb读取excel表格内容到datatable的方法。分享给大家供大家参考。具体分析如下: 首先看一段实例代码 代码如下:string strCon = @”Provider=Microsoft.ACE.OLEDB.12.0;Data Source=” + ...

    VS2017连接数据库

    - 在“所有”选项卡中更改Extendedproperties属性为:“Excel12.0;HDR=YES;IMEX=1”。 6. **测试连接**: - 测试连接以确保一切正常。 7. **获取连接字符串**: - 点击确定后,在“高级”选项卡中可以查看到...

    解决C#上传Excel文本数字混合不能识别的情况

    为了确保C#能够正确地识别并读取Excel文件中的文本数字混合格式,我们可以通过修改OLEDB连接字符串中的`IMEX`参数来实现。`IMEX`参数(ImportMixedAsText)用于控制导入时混合类型数据的行为,默认值为0,意味着数据...

    ado连接excel

    - `ExtendedProperties`: 附加属性,如指定Excel版本(如`Excel8.0`)、是否包含表头(如`HDR=YES`)以及导入模式(如`IMEX=1`表示处理混合类型的数据列)。 示例代码如下: ```cpp CString ConnectionString = _T...

    c#读取excel文件的几种方法.docx

    这里的关键在于`connectionString`,它指定了我们正在使用Jet OLEDB提供程序来连接到Excel文件,并且设置`Extended Properties`为`Excel 8.0`以兼容Excel 97-2003格式。如果你需要读取的是Excel 2007或更高版本的`....

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

    其中,provider 指定了使用的数据库提供程序,data source 指定了 Excel 文件的路径,extended properties 指定了连接属性。 使用 OleDbConnection 类来连接 Excel 文件,然后使用 OleDbCommand 类来执行 SQL 语句...

    SQL Server 2016 多种导入EXCEL 2013表数据的方法

    Extendedproperties="Excel 12.0;HDR=Yes;IMEX=1;"')...[Sheet1$]` - 将数据插入现有表:`INSERT INTO Table01 SELECT * FROM OpenDataSource('Microsoft.ACE.OLEDB.12.0', 'Data Source="E:\123.xlsx";Extended...

    OleDb数据库连接通用类库

    `OleDb`(Open Database Connectivity)是微软提供的一种数据访问接口,它允许程序员使用统一的方式连接到多种不同的数据库系统,如Microsoft Access、Excel、SQL Server等。本主题将深入探讨如何使用C#编写一个`Ole...

    c#读取excle连接字符串 (兼容64位机器

    ### 二、理解连接字符串 #### 2.1 连接字符串的概念 连接字符串是数据库驱动程序用来连接数据库的一组键值对参数。在C#中,通常使用`OleDbConnection`类来建立与Excel文件的连接。连接字符串中包含了关于数据库驱动...

    OleDbConnectionStringBuilder.txt

    在使用`OleDbConnectionStringBuilder`时,可以通过`ExtendedProperties`属性来设置更多的连接选项,这些选项对于特定的数据源非常重要。 - **HDR**: 表示是否将第一行视为表头,默认值为"Yes"。如果文件的第一行...

    asp vbscript 常用函数大全

    这里的`Provider`参数指定了OLEDB驱动器的类型,`Data Source`指定了Excel文件的路径,而`Extended Properties`则包含了额外的选项,如`HDR=YES`表示Excel文件的第一行是表头,`IMEX=2`则用于处理特殊字符编码问题。...

    c#.net导入excel数据到datagridview

    在 C#.NET 中,通常使用 OleDb (Object Linking and Embedding Database) 来连接和操作 Excel 文件。OleDb 是一个提供访问多种数据库格式(包括 Excel)的接口。在代码片段中,首先定义了一个连接字符串 `strConn`,...

    SQL导入Execl数据.txt

    例如,在本例中使用的`OpenDataSource('Microsoft.Jet.OLEDB.4.0',...)`就是用来连接Excel文件的。 - **参数解释**: - `'Microsoft.Jet.OLEDB.4.0'`:指定使用的是哪个OLE DB提供程序,这里是针对Excel文件的提供...

Global site tag (gtag.js) - Google Analytics