C#连接Excel和Access(包括2003和2007版)方法总结
2016-06-08 17:49
555 查看
一、说明:
C#采用OLEDBConnection连接Excel、Access。要连接的数据源版本不同,连接字符串也不同。
97-2003版本
EXCEL
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=文件位置;Extended Properties=Excel 8.0;HDR=Yes;IMEX=1
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;IMEX=1
ACCESS
Provider=Microsoft.Ace.OleDb.12.0;Data Source=文件位置;Jet OLEDB:Database Password=密码;
【其他说明】
HDR=Yes/NO 表示是否将首行做标题。
IMEX 表示是否强制转换为文本
特别注意
Extended Properties='Excel 8.0;HDR=yes;IMEX=1'
A: HDR ( HeaDer Row )设置
若指定值为Yes,代表 Excel 档中的工作表第一行是栏位名称
若指定值為 No,代表 Excel 档中的工作表第一行就是資料了,沒有栏位名称
B: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 档案可同时支援“读取”与“写入”用途。
需要注意的是,可以使用07版本的字符串来连接03版本,但是需要安装AccessDatabaseEngine2007,(点击下载),否则会提示错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。
1.编写连接Excel/Access的C#类MyExcel
效果展示:
C#采用OLEDBConnection连接Excel、Access。要连接的数据源版本不同,连接字符串也不同。
97-2003版本
EXCEL
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=文件位置;Extended Properties=Excel 8.0;HDR=Yes;IMEX=1
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;IMEX=1
ACCESS
Provider=Microsoft.Ace.OleDb.12.0;Data Source=文件位置;Jet OLEDB:Database Password=密码;
【其他说明】
HDR=Yes/NO 表示是否将首行做标题。
IMEX 表示是否强制转换为文本
特别注意
Extended Properties='Excel 8.0;HDR=yes;IMEX=1'
A: HDR ( HeaDer Row )设置
若指定值为Yes,代表 Excel 档中的工作表第一行是栏位名称
若指定值為 No,代表 Excel 档中的工作表第一行就是資料了,沒有栏位名称
B: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 档案可同时支援“读取”与“写入”用途。
需要注意的是,可以使用07版本的字符串来连接03版本,但是需要安装AccessDatabaseEngine2007,(点击下载),否则会提示错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。
二、举例说明
1.编写连接Excel/Access的C#类MyExcelusing System; using System.Data; using System.Data.SqlClient; using System.Data.OleDb; public class MyExcel { bool ECode = false; string ES; OleDbConnection conn = new OleDbConnection(); DataSet Rs; public MyExcel(string excelFile) { ECode = false; conn.ConnectionString = "Provider=Microsoft.Ace.OleDb.12.0;" + "Data Source=" + excelFile + ";" + "Extended Properties='Excel 12.0;HDR=yes; '"; //conn.ConnectionString = "Provider=Microsoft.Ace.OleDb.12.0;" + "Data Source=" + excelFile; //连接Access数据库文件 try { conn.Open(); } catch (Exception e) { ES = e.Message; ECode = true; } } public DataSet GetRecordset(string Oledb) { OleDbCommand Command = new OleDbCommand(); Command.Connection = conn; Command.CommandText = Oledb; try { OleDbDataAdapter adp = new OleDbDataAdapter(Command); Rs = new DataSet(); adp.Fill(Rs); } catch (Exception e) { ES = e.Message; ECode = true; return null; } return (Rs); } public void ExClose() { try { conn.Close(); } catch (Exception e) { ES = e.Message; ECode = true; } } public bool ErrorCode() { return ECode; } public string ErrMessage() { return ES; } ~MyExcel() { } }2、访问实例
using System; using System.Data; using System.Windows.Forms; namespace WindowsFormsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { MyExcel ME = new MyExcel(textBox1.Text); //string sql ="select * from [人员单位表$]";//读取Excel数据源,人员单位表为sheet名,注意字符串格式 string sql = "select * from address";//读取Access数据库 DataSet DS = ME.GetRecordset(sql); dataGridView1.DataSource = DS.Tables[0]; comboBox1.DataSource = DS.Tables[0]; comboBox1.DisplayMember = "addname"; comboBox1.ValueMember = "addnum"; ME.ExClose(); } private void button2_Click(object sender, EventArgs e) { OpenFileDialog of = new OpenFileDialog(); of.Title = "打开Excel文件"; //of.Filter = "(*.xls,*.xlsx)|*.xls;*.xlsx"; if (of.ShowDialog()==DialogResult.OK) { textBox1.Text = of.FileName; } } } }
效果展示:
相关文章推荐
- arcengine C# 按行政区范围加载图层数据
- C# FTP上传下载(支持断点续传)
- C#datagridview如何删除行
- C# ListView控件制作表格:添加行,删除行,右键删除行
- C# 删除目录下的所有文件及子文件夹
- C# 自定义序列化问题
- c# 【MVC】WebApi开发实例
- C#学习笔记2
- 在C#.net中如何操作XML
- C# 获取CPU序列号、网卡MAC地址、硬盘序列号封装类,用于软件绑定电脑
- C#学习笔记之使用GDI绘制简单的图形
- C#学习笔记之向Xml文档追加信息
- C#学习笔记之创建带属性的Xml文档
- 关于C#中调用DLL文件的方法
- C#学习笔记之创建Xml文档
- C# 应用程序域和程序集
- C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁
- C# web 获取服务端cookie
- C#报警声音
- C# 日期、时间和时区