WinForm dataGridView连接Access数据库

- 软件版本信息:
VS2017
Access专业增强版2016
ps: Access版本查看【文件】——【账户】在这里插入图片描述
- 连接步骤:

  1. 新建一个数据库,以Access为例,命名为**.accdb或**.mdc
    在这里插入图片描述
  2. VS新建一个WinForm项目
    窗口如下:
    在这里插入图片描述
    代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WareHouse_WinForm
{
    public partial class DataGridView_Inquire : Form
    {
        public DataGridView_Inquire()
        {
            InitializeComponent();            
        }

        private void DataGridView_Inquire_Load(object sender, EventArgs e)
        {
            //DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            OleDbCommand comm = new OleDbCommand();
            OleDbDataAdapter da = new OleDbDataAdapter();
            //access数据库连接字符串,自行更改数据库路径和名字
            string ConnectionStr = @"Provider=Microsoft.ACE.OLEDB.16.0;Data Source=" + Application.StartupPath + @"\Database1.mdb;";
            OleDbConnection conn = new OleDbConnection(ConnectionStr);
            conn.Open();
            comm.Connection = conn;
            comm.CommandType = CommandType.Text;
            comm.CommandText = "select * from Poirot";//查询student表
            da.SelectCommand = comm;
            da.Fill(dt);
            //da.Fill(ds);
            //textBox1.Text = ds.Tables[0].Rows[1][1].ToString();//文本框中显示第一行第一列的一个值
            //this.dataGridView2.DataSource = ds.Tables[0].DefaultView;//表从起始行显示在dataGridView里
            textBox1.Text = dt.Rows[6][1].ToString();//文本框中显示第一行第一列的一个值
            this.dataGridView2.DataSource = dt.DefaultView;//表从起始行显示在dataGridView里
            this.dataGridView2.ClearSelection();   //不默认选中第一行第一列           
            AutoWidth(dataGridView2,dt);
            conn.Close();
        }

        /// <summary>
        /// dataGirdView跟据内容自动适应单元格大小
        /// </summary>
        /// <param name="dgv"></param>
        /// <param name="dt"></param>
        public static void AutoWidth(DataGridView dgv, DataTable dt)
        {
            int width = dgv.Width;
            int avgWidth = width / dt.Columns.Count;//求出每一列的header宽度
            dgv.ColumnHeadersDefaultCellStyle.WrapMode = DataGridViewTriState.False;
            dgv.RowsDefaultCellStyle.WrapMode = DataGridViewTriState.True;//数据溢出换行,根据内容大小自动换行
            for (int i = 0; i < dgv.Columns.Count; i++)
            {
                dgv.AutoResizeColumn(i, DataGridViewAutoSizeColumnMode.AllCells);
            }
        }
    }
}

代码中Provider引擎可有两种写法:

Provider=Microsoft.ACE.OLEDB.12.0;
Provider=Microsoft.Jet.OLEDB.4.0;

区别:
ACE引擎,既可以访问Office 97-2003,也可以访问Office 2007 。
Jet 引擎,可以访问 Office 97-2003,但不能访问 Office 2007。
所以,如果access数据库后缀名为.accdb(2007)就不能用jet引擎了。

  1. 将第一步创建的**.mdb/**.accdb复制到bin/debug文件夹内。(如果数据库文件是在别的位置,需要在代码里改一下Application.StartupPath为数据库的路径)
    在这里插入图片描述
    运行效果:
    在这里插入图片描述
    ps:
    DataSet:数据集。一般包含多个DataTable,用的时候,dataset[“表名”]得到DataTable
    DataTable:数据表。
    DataSet可以比作一个内存中的数据库,DataTable是一个内存中的数据表,DataSet里可以存储多个DataTable。

版权声明:本文为Scarlett2025原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。