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

19.4.9 数据库方式操作Excel

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

本节所说的操作Excel操作是讲如何把Excel作为数据库来操作。

通过COM来操作Excel操作,请参看第21.2节

在第19.3.4节连接Excel中已经讲述了如何连接Excel。剩下的操作就和前面几节操作Access数据库一样。

注意:Excel不支持删除一行记录,使用SQL的delete语句会返回错误。如果需要在Excel中删除一行记录,请参看第21.2.4节。

本节使用到的样例Excel表是从北风数据库中产品表的部分数据:

图19-38 产品表信息

【例 19.17【项目:code19-017】产品信息管理。

        OleDbConnection conn;

        private void Form1_Load(object sender, EventArgs e)

        {

            conn = new OleDbConnection();

            //32位office使用以下语句

            conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\\lessons\\Northwind.xlsx;Extended Properties=‘Excel 8.0; HDR=YES;'";

            conn.Open();

            //64位office使用以下语句,而且程序要编译为64位

            //conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\lessons\\Northwind.xlsx;Extended Properties='Excel 12.0 XML;HDR=YES;'";

            //conn.Open();

        }

 

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)

        {

            conn.Close();

        }

 

        //查询所有数据

        private void btnQueryAll_Click(object sender, EventArgs e)

        {

            string sql = "select * from [产品$]";

            OleDbCommand command = new OleDbCommand(sql, conn);

            OleDbDataReader reader = command.ExecuteReader();

            int fieldCount = reader.FieldCount;

            string info = "";

            if( reader.HasRows)

            {

                string strtemp = "";

                while(reader.Read())

                {

                    strtemp = "";

                    for (int i = 0; i < fieldCount; i++)

                        strtemp += reader[i] + " ";

                    strtemp += "\r\n";

                    info += strtemp;

                }

            }

            reader.Close();

            TextBox1.Text = info;

        }

 

        //查询单价大于30的数据

        private void btnQuery_Click(object sender, EventArgs e)

        {

            string sql = "select * from [产品$] where 单价>30";

            OleDbCommand command = new OleDbCommand(sql, conn);

            OleDbDataReader reader = command.ExecuteReader();

            int fieldCount = reader.FieldCount;

            string info = "";

            if(reader.HasRows)

            {

                string strtemp = "";

                while(reader.Read())

                {

                    strtemp = "";

                    for (int i = 0; i < fieldCount; i++)

                        strtemp += reader[i] + " ";

                    strtemp += "\r\n";

                    info += strtemp;

                }

            }

            reader.Close();

            TextBox1.Text = info;

        }

 

        //增加数据

        private void btnAdd_Click(object sender, EventArgs e)

        {

            string sql = "insert into [产品$] values('奶酪','每箱24瓶',55,79,0)";

            OleDbCommand command = new OleDbCommand(sql, conn);

            try

            {

                command.ExecuteNonQuery();

                MessageBox.Show("添加数据成功!");

            }

            catch(Exception ex)

            {

                MessageBox.Show("添加数据失败:" + ex.Message);

            }

        }

 

        //修改数据

        private void btnEdit_Click(object sender, EventArgs e)

        {

            string sql = "update [产品$] set 产品名称='温馨奶酪',单价=80 where 产品名称='奶酪'";

            OleDbCommand command = new OleDbCommand(sql, conn);

            try

            {

                command.ExecuteNonQuery();

                MessageBox.Show("修改数据成功!");

            }

            catch (Exception ex)

            {

                MessageBox.Show("修改数据失败:" + ex.Message);

            }

        }

运行结果如下图所示:

图19-39 列出产品信息

如果遇到已经安装了64位数据库引擎,但是仍然提示:

图19-40 提示未注册OLEDB12.0

请在项目属性【生成】|【目标平台】处选择X86。

图19-41 设置生成目标平台

 

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看C#教程 目录

 

相关文章:

19.4.9 数据库方式操作Excel

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 本节所说的操作Excel操作是讲如何把Excel作为数据库来操作。 通过COM来操作Excel操作&#xff0c;请参看第21.2节 在第19.3.4节【…...

什么是AI Agent的身份安全问题

什么是AI Agent的身份安全问题 AI发展背景与趋势 DeepSeek大模型R1成果引发关注,同时AI Agent元年到来,其应用将呈指数级上升,但也带来安全问题,如身份冒用风险。OpenAI创始人强调人工智能规模定律持续有效,AI Agent发展引发广泛关注,不过AI教母李飞飞指出其应定位为工…...

3.2 企业级AI Agent数据科学实战:从数据清洗到模型服务的全链路工业级方案

企业级AI Agent数据科学实战:从数据清洗到模型服务的全链路工业级方案 引言:数据科学家的Agent开发革命 IDC报告显示,优秀的数据处理流程可使大模型效果提升37%,模型推理成本降低58%。本文将揭示企业级Agent开发中数据科学家的核心方法论,通过GitHub Sentinel等案例,展…...

CAS单点登录(第7版)7.授权

如有疑问&#xff0c;请看视频&#xff1a;CAS单点登录&#xff08;第7版&#xff09; 授权 概述 授权和访问管理 可以使用以下策略实施授权策略以保护 CAS 中的应用程序和依赖方。 服务访问策略 服务访问策略允许您定义授权和访问策略&#xff0c;以控制对向 CAS 注册的…...

C语言中的对象、左值、右值、序列点、副作用的概念

对象 赋值表达式的目的就是把数据存储到内存位置上&#xff0c;用于存储值的数据区域统称数据对象 左值 左值是C语言中的术语&#xff0c;用于标识特定数据对象的名字。因此&#xff0c;对象指的是实际的数据存储&#xff0c;而左值是用于标识或定位存储位置的标签。 右值 …...

java集合框架之Map系列

前言 首先从最常用的HashMap开始。HashMap是基于哈希表实现的&#xff0c;使用数组和链表&#xff08;或红黑树&#xff09;的结构。在Java 8之后&#xff0c;当链表长度超过阈值时会转换为红黑树&#xff0c;以提高查询效率。哈希冲突通过链地址法解决。需要明确的是&#xff…...

【MediaTek】 T750 openwrt-23.05编 cannot find dependency libexpat for libmesode

MediaTek T750 T750 采用先进的 7nm 制程,高度集成 5G 调制解调器和四核 Arm CPU,提供较强的功能和配置,设备制造商得以打造精巧的高性能 CPE 产品,如固定无线接入(FWA)路由器和移动热点。 MediaTek T750 平台是一款综合的芯片组,集成了 5G SoC MT6890、12nm 制程…...

EasyX学习笔记1:线条

目录 一、线条颜色1. setlinecolor - 设置当前线条颜色2. getlinecolor - 获取当前线条颜色 二、线条样式1. setlinestyle - 设置线条样式&#xff08;宽度、类型等&#xff09; 三、绘制线条1. line - 绘制两点间直线2. lineto - 从当前位置画线到指定点3. linerel - 相对当前…...

HTML、Vue和PHP文件的区别与联系

一、核心区别 类型性质执行环境功能特点.html静态标记语言浏览器直接解析定义页面结构和内容,无逻辑处理能力.vue前端框架组件文件浏览器/构建工具整合HTML模板+JS逻辑+CSS样式,支持动态数据绑定和组件化开发.php服务器端脚本语言文件Web服务器执行动态生成HTML内容,支持数据…...

C#windows窗体人脸识别

一、创建一个数据库&#xff0c;名为TestFaceDB 里面有一张表就OK了&#xff0c;表名Users,表里面有几个字段我说明一下&#xff1a; id--------------------bigint----------------------编号 name--------------varchar(50)-----------------用户名 phone--------------v…...

53倍性能提升!TiDB 全局索引如何优化分区表查询?

作者&#xff1a; Defined2014 原文来源&#xff1a; https://tidb.net/blog/7077577f 什么是 TiDB 全局索引 在 TiDB 中&#xff0c;全局索引是一种定义在分区表上的索引类型&#xff0c;它允许索引分区与表分区之间建立一对多的映射关系&#xff0c;即一个索引分区可以对…...

vue字符串的常用方法,截取字符串,获取字符串长度,检索字符串

1.使用substr方法截取字符串 let str "12345"; let part str.substr(0, 3); // 截取从索引0开始到索引3的子字符串 console.log(part); // "123" 2.获取字符串长度 JavaScript中的字符串有一个 length属性&#xff0c;该属性可以用在VUE获取字符串的长度…...

Neo4j集群学习

文章目录 官方指导文档Neo4j因果集群核心服务器只读副本因果一致性 Neo4j集群搭建Neo4j企业版下载集群简介虚拟机准备jdk安装实施搭建访问neo4j Web服务 集群添加Core节点 官方指导文档 Neo4j 5 ClusterNeo4j 5 Basic Cluster Neo4j因果集群 集群是Neo4企业版中所提供的功能…...

【人工智能】深度学习中的梯度检查:原理详解与Python实现

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 梯度检查是深度学习模型开发中至关重要的一步,它能够验证反向传播的梯度计算是否正确,从而确保模型训练的稳定性和准确性。在本文中,我们…...

Kotlin 2.1.0 入门教程(十七)接口

接口 接口可以包含抽象方法的声明&#xff0c;也可以包含方法的实现。 接口与抽象类的不同之处在于&#xff0c;接口无法存储状态。接口可以拥有属性&#xff0c;但这些属性要么必须是抽象的&#xff0c;要么就得提供访问器的实现。 接口使用 interface 关键字来定义&#x…...

了解i2c_check_functionality()

i2c_check_functionality()用来检查设备适配器支持的标志是否要求。 打开“include/linux/i2c.h” /* Return the functionality mask */ static inline u32 i2c_get_functionality(struct i2c_adapter *adap) { return adap->algo->functionality(adap); //返回该…...

Retrieval-Augmented Generation for LargeLanguage Models: A Survey

标题&#xff1a;Retrieval-Augmented Generation for Large Language Models: A Survey 作者&#xff1a;Yunfan Gaoa , Yun Xiongb , Xinyu Gaob , Kangxiang Jiab , Jinliu Panb , Yuxi Bic , Yi Daia , Jiawei Suna , Meng Wangc , and Haofen Wang 1. By referencing ext…...

C#多线程异步连接MySQL与SQLserver数据库

C#多线程异步连接MySQL与SQLserver数据库 一、前言二、多线程异步连接数据库代码2.1代码块2.2代码说明 参考文档 一、前言 当编写代码连接多台设备上的数据库时&#xff0c;如果采用同步逐个连接的方式&#xff0c;在网络畅通的情况下连接速度尚可&#xff0c;但当其中一台设备…...

try learning-git-branching

文章目录 mergerebase分离 HEAD相对引用利用父节点branch -f 撤销变更cherry-pick交互式 rebase只取一个提交记录提交的技巧rebase 在上一次提交上amendcherry-pick 在上一次提交上 amend tag多分支 rebase两个parent节点纠缠不清的分支偏离的提交历史锁定的Main learning git …...

代码随想录算法【Day46】

Day46 647. 回文子串 class Solution { public:int countSubstrings(string s) {vector<vector<bool>> dp(s.size(), vector<bool>(s.size(), false));int result 0;for (int i s.size() - 1; i > 0; i--) { // 注意遍历顺序for (int j i; j < s…...

flutter本地推送 flutter_local_notifications的使用记录

flutter_local_notifications 效果 安卓配置(AndroidManifest.xml) <uses-permission android:name"com.android.alarm.permission.SET_ALARM"/> <uses-permission android:name"android.permission.SCHEDULE_EXACT_ALARM" /> <us…...

Springboot 中如何使用Sentinel

在 Spring Boot 中使用 Sentinel 非常方便&#xff0c;Spring Cloud Alibaba 提供了 spring-cloud-starter-alibaba-sentinel 组件&#xff0c;可以快速将 Sentinel 集成到你的 Spring Boot 应用中&#xff0c;并利用其强大的流量控制和容错能力。 下面是一个详细的步骤指南 …...

AI Agent 有哪些痛点问题

AI Agent 有哪些痛点问题 目录 AI Agent 有哪些痛点问题身份安全问题数据安全问题模型安全问题可靠性问题伦理和合规问题身份安全问题 身份界定模糊:AI代理既非完全意义上的人类,也不同于传统的机器,现有的身份管理工具难以准确对其进行定位和管理,导致在权限分配、责任追溯…...

一个让Stable Diffusion更稳定、更易用的Github开源项目

2023除了ChatGPT大火&#xff0c;Stable Diffusion同样也是非常火热&#xff0c;Stable Diffusion是一个Github开源项目&#xff0c;很多爱好者都会本地安装&#xff0c;但面对一些初学者来说&#xff0c;在安装、配置和使用过程中还是会经常出现很多问题&#xff0c;特别不了解…...

Docker+Jenkins自动化部署SpringBoot项目【详解git,jdk,maven,ssh配置等各种配置,附有示例+代码】

文章目录 DockerJenkins部署SpringBoot项目一.准备工作1.1安装jdk111.2安装Maven 二.Docker安装Jenkins2.1安装Docker2.2 安装Jenkins2.3进入jenkins 三.Jenkins设置3.1安装jenkins插件3.2全局工具配置全局配置jdk全局配置maven全局配置git 3.3 系统配置安装 Publish Over SSH …...

.NET SixLabors.ImageSharp v1.0 图像实用程序控制台示例

使用 C# 控制台应用程序示例在 Windows、Linux 和 MacOS 机器上处理图像&#xff0c;包括创建散点图和直方图&#xff0c;以及根据需要旋转图像以便正确显示。 这个小型实用程序库需要将 NuGet SixLabors.ImageSharp包&#xff08;版本 1.0.4&#xff09;添加到.NET Core 3.1/ …...

【机器学习】线性回归与一元线性回归

线性回归与一元线性回归 V1.1线性回归问题线性方程的最优解一元线性回归一元线性回归的方程一元线性回归距离衡量方法一元线性回归的最优化求解一元线性回归的最小二乘法解法 V1.1 线性回归问题 线性回归问题就是找一条线或超平面&#xff0c;并使用线或超平面来描述数据分布…...

soular基础教程-使用指南

soular是TikLab DevOps工具链的统一帐号中心&#xff0c;今天来介绍如何使用 soular 配置你的组织、工作台&#xff0c;快速入门上手。 &#xfeff; 1. 账号管理 可以对账号信息进行多方面管理&#xff0c;包括分配不同的部门、用户组等&#xff0c;从而确保账号权限和职责…...

《Spring实战》(第6版)第1章 Spring起步

第1部分 Spring基础 第1章 Spring起步 1.1 什么是Spring Spring的核心是提供一个容器(container)。 称为Spring应用上下文(Spring application context)。 创建和管理应用的组件(bean)&#xff0c;与上下文装配在一起。 Bean装配通过依赖注入(Dependency Injection,DI)。…...

PAT乙级真题 — 1084 外观数列(java)

外观数列是指具有以下特点的整数序列&#xff1a; d, d1, d111, d113, d11231, d112213111, ...它从不等于 1 的数字 d 开始&#xff0c;序列的第 n1 项是对第 n 项的描述。比如第 2 项表示第 1 项有 1 个 d&#xff0c;所以就是 d1&#xff1b;第 2 项是 1 个 d&#xff08;对…...