最近在做使用C#访问Access数据库的项目,之前没有使用过Access,所以中间查了不少资料,对相关操作有了一个简单的印象。本文简单介绍如何使用C#读取Access数据,并将修改重新保存回Access。

    开发环境(winform):

        1. visual studio 2019

        2. .net framework 4.7.2

        3. access 2007

        4. access数据表tn_member,表结构内容如下图:

        

    几个类介绍:

        1. OleDBConnection:表示与数据源的开放连接,这个类就像access数据库与外部的一个接口,外部程序的操作都通过此接口

        2. OleDbDataAdapter:用于从access数据源检索数据并填充 DataSet 中的表,同时 DataAdapter 还将对 DataSet 的更改解析回数据源。

        3. OleDbCommandBuilder:自动生成用于协调所做的更改命令,它能够根据OleDbDataAdapter的SelectCommand属性自动的生成InsertCommand,UpdateCommand与DeleteCommand等命令。

        它们的关系可以用下图表示:

        

    读写流程:

        1. 使用连接字符串,构造OleDbConnection对象,同时调用open方法打开连接

        2. 使用connection对象,构造OleDbDataAdapter适配器对象

        3. 构造OleDbCommandBuilder对象,并将此对象和OleDbDataAdapter适配器对象关联

        4. 使用OleDbDataAdapter适配器对象填充DataTable或将变动保存到Access数据库

    具体实例代码如下:

     public partial class Form1 : Form
    {
        // 连接字符串
        private string connStr = @"Provider= Microsoft.ACE.OLEDB.12.0;Jet OLEDB:DataBase Password=;Data Source=E:\db\data.accdb;";

        //声明
        private OleDbConnection conn = null;
        private OleDbDataAdapter adapter = null;
        private DataTable dt = null;

        public Form1()
        {
            InitializeComponent();
        }

        private void btn_read_Click(object sender, EventArgs e)
        {
            // 连接数据库,需要传递连接字符串
            conn = new OleDbConnection(connStr);
            // 打开数据库连接
            conn.Open();

            // "Select * from tn_member"为SQL语句,意思是从数据库中选择叫做“tn_member”的表,“conn”为连接
            adapter = new OleDbDataAdapter("Select * from tn_member", conn);
            // CommandBuilder对应的是数据适配器,需要传递参数
            var cmd = new OleDbCommandBuilder(adapter);

            // 在内存中创建一个DataTable,用来存放、修改数据库表
            dt = new DataTable();
            // 通过适配器把表的数据填充到内存dt
            adapter.Fill(dt);

            // 把数据显示到界面
            dataGridView1.DataSource = dt.DefaultView;
        }

        private void btn_write_Click(object sender, EventArgs e)
        {
            try
            {
                // 按下按钮后,把内存中修改的部分传递给适配器,再通过适配器传递给数据库
                adapter.Update(dt);
                // 清除内存中存放的表数据
                dt.Clear();
                // 重新读取已经改变过的表数据
                adapter.Fill(dt);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {

            }
        }
    }

     运行代码,点击读取access按钮,读取数据,如下图:

    

    然后修改name字段的值,点击写access按钮,可以看到结果如下:

        winform界面:

        

        access数据表:

        

          

本文地址:https://blog.csdn.net/ztnhnr/article/details/109005014