C# 使用OLEDB读取不同版本Excel数据的连接字符串
用OLEDB通过设置连接字符串可以像读取sqlserver一样将excel中的数据读取出来,但是excel2003和excel2007/2010的连接字符串是不同的
/// <summary>
/// 通用函数类
/// 2013.10.09
/// zouhao
/// </summary>
class GeneralFun
{
/// <summary>
/// 从文件中(Excel、Access)读取数据,装载到DataTable对象
/// </summary>
/// <param name="pathName">绝对路径+文件名</param>
/// <param name="tableName">表名</param>
/// <returns></returns>
public static DataTable FileToDataTable(string pathName, string tableName)
{
return GeneralFun.FileToDataTable(pathName, tableName, "");
} /// <summary>
/// 从文件中(Excel、Access)读取数据,装载到DataTable对象
/// </summary>
/// <param name="pathName">绝对路径+文件名</param>
/// <param name="tableName">表名</param>
/// <param name="where">查询条件</param>
/// <returns></returns>
public static DataTable FileToDataTable(string pathName, string tableName, string where)
{
//格式化传入传输
pathName = pathName.Trim().ToLower();
tableName = tableName.Trim().ToLower();
where = where.Trim().ToLower(); //读取数据
DataTable tbContainer = new DataTable();
string strConn = string.Empty;
if (string.IsNullOrEmpty(tableName)) { tableName = "Sheet1"; }
FileInfo file = new FileInfo(pathName);
if (!file.Exists) { throw new Exception("文件不存在"); }
string extension = file.Extension.Trim().ToLower();
switch (extension)
{
case ".xls"://Excel2003
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=No;IMEX=1;'";
tableName += "$";
break;
case ".xlsx"://Excel2007
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pathName + ";Extended Properties='Excel 12.0;HDR=No;IMEX=1;'";//{IMEX = 0:写,1:读,2:读/写;} {HDR = Yes,第一行是标题}
tableName += "$";
break;
case ".mdb"://Access2003
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName;
break;
case ".accdb"://Access2007
strConn = "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" + pathName;
//Provider=Microsoft.Ace.OleDb.12.0;Data Source=文件位置;Jet OLEDB:Database Password=密码;
break;
}
//链接文件
OleDbConnection cnnxls = new OleDbConnection(strConn);
//生成SQL字符串
string sql = string.Format(" select * from [{0}] ", tableName);
//判断是否有条件
if (!string.IsNullOrEmpty(where))
{
//判读用户是否添加了 where 字符串
if (- == where.IndexOf("where")) where = " where " + where;
//添加查询条件
sql += where;
}
//读取文件数据
OleDbDataAdapter oda = new OleDbDataAdapter(sql, cnnxls);
DataSet ds = new DataSet();
//将文件里面有表内容装载到内存表中!
oda.Fill(tbContainer);
return tbContainer;
}
}
这里需要注意的地方是,当文件的后缀名为.xlsx(excel2007/)时的连接字符串
97-2003版本
EXCEL
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=文件位置;Extended Properties=Excel 8.0;HDR=Yes
ACCESS
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=文件位置;Jet OLEDB:Database Password=密码;
2007版本
EXCEL
Provider=Microsoft.Ace.OleDb.12.0;Data Source=文件位置;Extended Properties=Excel 12.0;HDR=Yes
ACCESS
Provider=Microsoft.Ace.OleDb.12.0;Data Source=文件位置;Jet OLEDB:Database Password=密码;
【其他说明】
HDR=Yes/NO 表示是否将首行做标题。
不支持文件带密码的EXCEL文件,哪怕知道正确密码,除非自行先打开该文件
参数HDR的值:
HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES
参数Excel 8.0
对于Excel 97以上版本都用Excel 8.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----链接模式(完全更新能力)
C# 使用OLEDB读取不同版本Excel数据的连接字符串的更多相关文章
- 使用OLEDB读取不同版本Excel数据的连接字符串设置
摘要: 用OLEDB通过设置连接字符串可以像读取sqlserver一样将excel中的数据读取出来,但是excel2003和excel2007/2010的连接字符串是不同的/// summary // ...
- 读取、写入excel数据
在实际项目中,不可避免的会操作excel表格.一直以来都是读取excel表格,可今天为了写入excel表格,可是煞费苦心,终于完成,记录下来以便后续使用. 1.读取excel表格的数据 读取excel ...
- C#中NPOI操作excel之读取和写入excel数据
一.下载引用 下载需要引用的dll,即:NPOI.dll,NPOI.OOXML.dll,NPOI.OpenXml4Net.dll,ICSharpCode.SharpZipLib.dll(office2 ...
- c# 读取和写入excel数据
1. 读取 DataTable GetDataFromExcelByConn(bool hasTitle = false){ OpenFileDialog openFile = new Open ...
- [C#]读取不同版本的excel文件的方法
--------------------------------2007及以上的版本-------------------------------- 测试如下: //DataInterface.Met ...
- JAVA用POI读取和创建2003和2007版本Excel完美示例
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...
- 批量Excel数据导入Oracle数据库 导入excel错误:外部表不是预期的格式 解决方案
在asp.net网站中导出Excel文件后,再把文件导入到数据库中. 读取Excel文件时,打开连接出错. 错误为:外部表不是预期的格式 解决:检查了一下,导出的Excel是标准文件不是html,没错 ...
- Java使用POI读取和写入Excel指南
Java使用POI读取和写入Excel指南 做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求: 网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃 ...
- Excel数据导入SQL Server
基本有2种方案,都是无需安装Office的方案 Ole DB读取 + BulkCopy 获取Excel各个SheetName //连接串 string strConn = "Provider ...
随机推荐
- PHP:第一章——PHP中的算术运算符/递增、递减运算符/赋值运算符
算术运算符 //$a=10; $b=5; //取反: //echo -$a;//输出:-10: //加法: //echo $a+$b;//输出:15 //减法: //echo $a-$b;//输出:5 ...
- python字典{}大括号
#字典 info = { 'name1':'jack', 'name2':'rose', 'name3':'tom', 'name4':'jerry', 'name5':'james' } info[ ...
- java 缓冲区大小与下载速度的关系
1.对于缓冲区空间的设定,要根据具体情况来定,如果存在大量的长信息(比如文件传输),将缓冲区定义的大些,可能更好的利用网络资源,如果更多的是短信息(比如聊天消息),使用小的缓冲区可能更好些,这样刷新的 ...
- 如何修改tomcat端口以及tomcat热部署
一.修改tomcat端口 1.首先我们需要知道,http的默认端口是80,tomcat的默认端口是8080,也就是说,如果我们将tomcat的默认端口号修改为80,输入网址的时候就可以不用输入端口了, ...
- 【设计模式】 模式PK:工厂模式VS建造者模式
1.概述 工厂方法模式注重的是整体对象的创建方法,而建造者模式注重的是部件构建的过程,旨在通过一步一步地精确构造创建出一个复杂的对象.我们举个简单例子来说明两者的差异,如要制造一个超人,如果使用工厂方 ...
- TCP三次握手与四次挥手详解
目录 TCP三次握手与四次挥手详解 1.TCP报文格式 2.TCP三次握手 3.TCP四次挥手 4.为什么建立连接需要三次握手? 5.为什么断开连接需要四次挥手? 6.为什么TIME_WAIT状态还需 ...
- vue-resource 上传图片
const formData = new FormData()formData.append('file',img,params.name);formData.append('id',params.i ...
- antd中fomr中resetFields清空输入框
1.如果没有initValue的情况下,直接使用resetFields可以清空文本框的值 2.如果是有initValue的情况下,直接使用resetFields方法会直接重置为initValue的值 ...
- This App does not have access to your photos or videos in iOS 9
出现这个总是由于info.plist文件内的CFBundleDisplayName没有值或者为空.把名称填进去就可以用了.
- iview Model对话框点击确定后iview会自动关闭窗口
问题描述:在某个页面需打开一个Model,然后这个Model里有一个Form表单,点击确定时我需要先校验表单数据是否输入正确,不确定则不希望关闭窗口:(问题是:只要点击确认 loading :fals ...