您的位置:首页 > 编程语言 > C#

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

using 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;
            }
        }
    }
}

效果展示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: