当前位置: 首页 > article >正文

C#上位机采用数据库操作方式对Excel或WPS表格进行读取操作

C#采用数据库操作方式对Excel或WPS表格进行读取操作

1、创建连接字符串并编写一个进行数据库操作的方法

    public class OleDbHelper
    {
        //创建连接字符串
        private static string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};" +
            "Extended Properties='Excel 8.0;IMEX=1;HDR=YES'";

        /// <summary>
        /// 返回一个DataSet结果集
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <param name="path">excel文件路径</param>
        /// <returns></returns>
        public static DataSet GetDataSet(string sql, string path)
        {
            OleDbConnection conn = new OleDbConnection(string.Format(connString, path));
            OleDbCommand cmd = new OleDbCommand(sql, conn);
            OleDbDataAdapter da = new OleDbDataAdapter(cmd);

            DataSet ds = new DataSet();
            try
            {
                conn.Open();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }
        }

2、编写SQL语句进行数据的查询并返回对象列表

我这里是从Excel读取指定列的数据string sql = "select 姓名,性别,出生日期,家庭住址 from [Student$]";
如果需要读取全部的数据string sql = "select * from [Student$]";
**[Student$]**这个表示这个Excel工作簿的名称为Student的工作表。

    public class Student
    {
        public string StudentName { get; set; }
        public string Gender { get; set; }
        public DateTime Birthday { get; set; }
        public string Address { get; set; }
    }

存放数据的对象

        public List<Student> GetStudentFromExcel(string path)
        {
            List<Student> stuList = new List<Student>();
            string sql = "select 姓名,性别,出生日期,家庭住址 from [Student$]";

            DataTable dt = OleDbHelper.GetDataSet(sql, path).Tables[0];

            foreach (DataRow row in dt.Rows)
            {
                stuList.Add(new Student()
                {
                    StudentName = row["姓名"].ToString(),
                    Gender = row["性别"].ToString(),
                    Birthday = Convert.ToDateTime(row["出生日期"]),
                    Address = row["家庭住址"].ToString()
                });
            }

            return stuList;
        }

3、将对象列表显示在界面上

        private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            DialogResult result = openFileDialog.ShowDialog();
            string path = openFileDialog.FileName;
            this.dataGridView1.DataSource = objExcelRW.GetStudentFromExcel(path);
        }

4、效果展示

在这里插入图片描述

表格数据
在这里插入图片描述

5、提示:如果需要DataGridView的列数少于需要展示的对象的属性数量,DataGridView会自动创建新的列。

    public class Student
    {
        public string StudentName { get; set; }
        public string Gender { get; set; }
        public DateTime Birthday { get; set; }
        public string Address { get; set; }
        public string StudentIdNo { get; set; }
    }
        public List<Student> GetStudentFromExcel(string path)
        {
            List<Student> stuList = new List<Student>();
            string sql = "select * from [Student$]";

            DataTable dt = OleDbHelper.GetDataSet(sql, path).Tables[0];

            foreach (DataRow row in dt.Rows)
            {
                stuList.Add(new Student()
                {
                    StudentName = row["姓名"].ToString(),
                    Gender = row["性别"].ToString(),
                    Birthday = Convert.ToDateTime(row["出生日期"]),
                    Address = row["家庭住址"].ToString(),
                    StudentIdNo = row["身份证号"].ToString()
                });
            }
            return stuList;
        }

Student类和public List<Student> GetStudentFromExcel(string path)方法进行上面修改,显示效果如下图:
在这里插入图片描述
如果此时还是想只显示自己所设定的列,可以直接在界面构造方法里面添加

        public FrmMain()
        {
            InitializeComponent();

            this.dataGridView1.AutoGenerateColumns = false;//禁止自动生成列
        }

如果出现报错可以查看“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”的解决方案


http://www.kler.cn/a/286800.html

相关文章:

  • Scrapy之一个item包含多级页面的处理方案
  • ⽤vector数组实现树的存储(孩⼦表示法)c++
  • 基于微信小程序的童装商城的设计与实现(LW+源码+讲解)
  • Flutter 改完安卓 applicationId 后App 闪退问题。
  • 微软Win10 RP 19045.5435(KB5050081)预览版发布!
  • Chrome远程桌面无法连接怎么解决?
  • 分布式系统中的Dapper与Twitter Zipkin:链路追踪技术的实现与应用
  • Ai产品经理的探索:技能、机遇与未来展望
  • 支付平台构建支付接口供整个公司调用—支付代理商
  • Git 学习
  • QT Sql 实现多个股票成交明细数据文件制成数据库并支持查询
  • Node原子计数器
  • 数据库性能测试2:内存数据库
  • 基于 Android Studio 实现的 记账本-MySQL版
  • [C#]国密SM2算法加解密字符串加密解密文件
  • 研究生深度学习入门的十天学习计划------第五天
  • 小琳python课堂:Python核心概念 类和对象
  • 折腾 Quickwit,Rust 编写的分布式搜索引擎 - 从不同的来源摄取数据
  • Django+Vue农产品销售系统的设计与实现
  • 理解大模型中的Cursor技术:优化长文本推理的前沿方案
  • 微服务集成 Seata
  • 【 html+css 绚丽Loading 】000030 灵文闪烁符
  • 【Selenium】UI自动化实践——输入验证码登录
  • Mysql基础练习题 1084.销售分析3 (力扣)
  • 数据结构--初步了解(抽象分级)
  • 【专题】2024年中国AI人工智能基础数据服务研究报告合集PDF分享(附原数据表)