IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> C# 利用 OleDb 组件操作 Excel 进行文件读写操作 -> 正文阅读

[大数据]C# 利用 OleDb 组件操作 Excel 进行文件读写操作


OleDb 是微软开发用于连接 Excel 工作簿,将 Excel 文件作为数据源进行读写操作的组件,在使用时执行语句语法规则与 SQL 一样。

1. 下载支持插件

在使用 OleDb 组件之前,需要先下载支持 OledDb 的插件 Microsoft Access Database Engine 2010 Redistributable,否则程序在对 Excel 文件进行读写操作时会出现如下异常

引发的异常:“System.InvalidOperationException”(位于 System.Data.dll 中)
引发的异常:“System.InvalidOperationException”(位于 System.Data.dll 中)
引发的异常:“System.InvalidOperationException”(位于 System.Data.dll 中)

从异常信息中可以发现,异常是由于缺少 System.Data.dll 导致的,这时就需要下载插件 Microsoft Access Database Engine 2010 Redistributable 来解决问题。该插件是由微软提供,下载地址也在微软的官网上,下载地址如下:
https://www.microsoft.com/en-us/download/details.aspx?id=13255
下载之后直接按照默认选择安装即可,不要去更改它的安装路径,避免找不到动态链接库。

2. 使用组件功能

2.1 在程序中引入命名空间

using System.Data;
using System.Data.OleDb;

2.2 查询操作

// 查询学生信息
private DataRowCollection findStudentById() {
	// 获取 id
	string id = textNumber.Text;
	// 构建查询语句, Sheet1 是工作簿中的表名,[]和$是语法要求,必须加上
	string SqlText = "select * from [Sheet1$] where 证件号 = '" + id + "'";
	// 使用自定义LoadDataFromExcel 函数从 excel_File_Path 给定的路径读取工作簿内容,SqlText 作为查询语句,返回一个 DataSet 类型
	DataSet ds = LoadDataFromExcel(excel_File_Path, SqlText);
	// 得到一个数据表的集合,存放了所有的 Sheet
	DataTableCollection datatable_collection = ds.Tables;      
	// 取出数据表集合的第 1 个值,返回一个 DataTable 对象
	DataTable dt = datatable_collection[0];                    
	// 返回该 Sheet 的所有行记录
	return dt.Rows;
}
// 从Excel中加载数据
private DataSet LoadDataFromExcel(string DataFileName, string SqlText) {
	try {
	    // 固定格式
	    string strConn = "Provider=microsoft.ace.oledb.12.0;Extended Properties=Excel 8.0;Data Source=" + DataFileName;
	    // 新建 OleDbConnection 连接对象
	    OleDbConnection Conn = new OleDbConnection(strConn);
	    Conn.Open();  // 打开连接
	    OleDbCommand Cmd = new OleDbCommand(SqlText, Conn);
	    OleDbDataAdapter oda = new OleDbDataAdapter();
	    oda.SelectCommand = Cmd;
	    DataSet ds = new DataSet();
	    oda.Fill(ds);   
	    Conn.Close();  // 关闭连接
	    return ds;
	} catch {
	    MessageBox.Show("请先导入表格!");
	    return null;
	}
}

2.3 插入操作

// 登记已检学生信息
private int InsertDetectedStudentInfo(string xh, string xm, string sex, string id_Card, string xznj, string xy,
	   string zy, string bj, string sfzj, string xszt, string syd, string mz, string xslb) {
	   // 获取需要执行插入操作的 excel 文件名
	   string DataFileName = create_excel_path;
	   string strConn = "Provider=microsoft.ace.oledb.12.0;Extended Properties=Excel 8.0;Data Source=" + DataFileName;
	   OleDbConnection Conn = new OleDbConnection(strConn);
	   Conn.Open();
	   // 插入语句 insert into [Sheet1$] (字段名1,字段名2,...,字段名n) values (?,?,...,?)
	   OleDbCommand top = new OleDbCommand("insert into [Sheet1$] (学号,姓名,性别,证件号,现在年级,学院,专业,班级,是否在籍,学生状态,生源地,民族,学生类别) values(?,?,?,?,?,?,?,?,?,?,?,?,?)", Conn);
	   // top.Parameters.AddWithValue("?", 变量名) 这种写法较优,推荐使用
	   top.Parameters.AddWithValue("?", xh);
	   top.Parameters.AddWithValue("?", xm);
	   top.Parameters.AddWithValue("?", sex);
	   top.Parameters.AddWithValue("?", id_Card);
	   top.Parameters.AddWithValue("?", xznj);
	   top.Parameters.AddWithValue("?", xy);
	   top.Parameters.AddWithValue("?", zy);
	   top.Parameters.AddWithValue("?", bj);
	   top.Parameters.AddWithValue("?", sfzj);
	   top.Parameters.AddWithValue("?", xszt);
	   top.Parameters.AddWithValue("?", syd);
	   top.Parameters.AddWithValue("?", mz);
	   top.Parameters.AddWithValue("?", xslb);
	   // 如果执行成功,返回受到影响的行数,应该是一个非0数字
	   int res = top.ExecuteNonQuery();
	   Conn.Close();
	   return res;
}

2.4 测试查询以及插入功能,仅展示部分代码段

// 调用查询函数,返回数据行集合
DataRowCollection drc = findStudentById();
// 查询到了记录
if (drc.Count > 0) {
	// 获取 excel 中 Sheet 第 0 行 第 0 列数据值
	string xh = drc[0][0].ToString();
	string xm = drc[0][1].ToString();
	string sex = drc[0][2].ToString();
	string id_Card = drc[0][3].ToString();
	string xznj = drc[0][4].ToString();
	string xy = drc[0][5].ToString();
	string zy = drc[0][6].ToString();
	string bj = drc[0][7].ToString();
	string sfzj = drc[0][8].ToString();
	string xszt = drc[0][9].ToString();
	string syd = drc[0][10].ToString();
	string mz = drc[0][11].ToString();
	string xslb = drc[0][12].ToString();
	// 将这些数据值插入到 excel 文件中
	int res = InsertDetectedStudentInfo(xh, xm, sex, id_Card, xznj, xy, zy, bj, sfzj, xszt, syd, mz, xslb);
	if (res > 0) {
	   MessageBox.Show("核酸检测完成,已将该生信息登记入表!");
	} else {
	   MessageBox.Show("登记失败,请放入下一张卡!");
	}
}
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-01 17:46:35  更:2021-12-01 17:47:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:06:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码