频道栏目
首页 > 资讯 > Sybase > 正文

C#通过OleDb读写excel表格几个要点

15-05-25        来源:[db:作者]  
收藏   我要投稿

1,OleDbConnection 的连接字符串:

0ffice 97-2003 :

strConnection = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR={1};IMEX={2:D}\";", ExcelFilePath, HDR, IMEX);
//HDR=No 表示ADO将不把你Excel文件的第一行作为字段名(此时使用默认字段名:F1,F2。。)
//IMEX= 0写入模式,1读取模式,2连接读写模式(效率不高),"IMEX=1;" 则始终将“互混”数据列作为文本读取

office2007:

strConnection = string.Format("Provider==Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR={1};IMEX={2:D}\";", ExcelFilePath, HDR, IMEX);
 

2,建立连接并打开:

try
{
Connection = new OleDbConnection(strConnection);

/* 特别说明: 在C++中建立连接后,连接就可以直接使用。 在C#中,连接可以使用 datatable 等操作,但是连接此时处于关闭状态。//*/

Connection.Open();

/* 特别说明,如果没有这一句,连接处于关闭状态,执行sql语句会提示错误:连接关闭不可用。我用一天的时间才研究出来

这个貌似 MSDN 和 网上都没有相关资料和说明,我一直奇怪,建立连接都没任何错误,datatable.fill()都没问题,为何执行sql语句连接处于关闭不可用呢?

大部分情况大量数据回写导出到EXCEL表格,都会是SQL数据库,可以用 SqlBulkCopy ,只是我的数据库却是 SqlCe,不支持SqlBulkCopy

所以,只能自己做线程执行插入语句。

貌似在 C++ 中,建立连接后,从来没有自己手动去Open,,,,,,,,,,,,,

//*/

}

catch (OleDbException ex )
{
}

3,执行sql语句:

try
{
OleDbCommand comm = new OleDbCommand(sqlstr, Connection);

result = comm.ExecuteNonQuery(); //返回受影响的数据行数量。

}
catch (OleDbException e)
{
}

4,excel表格sql语句书写

string sqlstr="select F1,F2 from [Sheet1$] ";//注意表名称[] 和 $ 都不能少了。

5,读取的时候,部分数据丢失,或者错误。

excel默认扫描前8行数据,以便自动识别字段数据类型,故,后面如果字段类型不符合,或者字段超长度,就会出现丢失。

1,IMEX=1 连接的时候设为读取模式,将数字和字符始终做字符处理。

2,修改注册表,将行数改更大 0 - 16;0代表整个表格。

TypeGuessRows 设置为 0,,注意表格如果较大,10000行,改成0,则需要考虑性能和效率问题。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel]
Windows 7 的注册表项目
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Excel

3,修改注册表脚本

@echo off reg add HKLM\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel /v TypeGuessRows /t REG_DWORD /d 0 /f
@echo off reg add "HKLM\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel" /v TypeGuessRows /t REG_DWORD /d 0 /f
@echo off reg add "HKLM\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel" /v TypeGuessRows /t REG_DWORD /d 0 /f

 

相关TAG标签
上一篇:Logjam攻击——新的加密缺陷影响大量用户
下一篇:dokuwiki:安装与配置
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站