19.4.8 数据库综合运用
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
需要北风数据库的请留言自己的信箱。
本节中将通过实例综合展示对数据表的查询、增加、修改和删除。
【例 19.16】【项目:code19-016】雇员信息管理。
本例演示了对北风数据库中雇员表中的雇员信息进行管理,实现对雇员信息(由于原表信息太多,有省略)的增加、修改和删除,其中修改提供了两种方式。
窗体设计如下图所示:

图19-36 窗体设计
详细代码如下:
OleDbConnection conn;
string currentName;
private void Form1_Load(object sender, EventArgs e)
{
//建立OleDbConnection对象实例
conn = new OleDbConnection();
//32位程序使用此语句
conn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;data source=C:\\lessons\\Northwind.mdb;";
//64位程序使用此语句
//conn.ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0;data source=C:\\lessons\\Northwind.mdb;";
conn.Open();
listEmployee();
}
//将所有雇员全名加入到cbEmployee中
private void listEmployee()
{
cbEmployee.Items.Clear();
OleDbCommand command = new OleDbCommand();
command.CommandText = "select 雇员ID,(姓氏+名字) as 姓名 from 雇员";
command.Connection = conn;
OleDbDataReader reader;
reader = command.ExecuteReader(CommandBehavior.SingleResult);
if( reader.HasRows)
{
while (reader.Read())
cbEmployee.Items.Add(reader["姓名"]);
cbEmployee.SelectedIndex = 0;
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
conn.Close();
}
//增加雇员信息
private void btnAdd_Click(object sender, EventArgs e)
{
btnOk.Visible = true;
btnCancel.Visible = true;
Panel1.Visible = true;
Panel1.Left = cbEmployee.Left;
Panel1.Top = 10;
cbEmployee.Visible = false;
//清空文本框内的所有数据
txtDuties.Text = "";
txtAppellation.Text = "";
dtpBirthday.Value = DateTime.Now;
dtpEmployDay.Value = DateTime.Now;
txtCountry.Text = "";
txtCity.Text = "";
txtArea.Text = "";
txtAddress.Text = "";
txtZipcode.Text = "";
txtPhone.Text = "";
}
//增加雇员信息实际是btnOk按钮完成
private void btnOk_Click(object sender, EventArgs e)
{
OleDbCommand command = new OleDbCommand();
command.CommandText = "insert into 雇员(姓氏,名字,职务,尊称,出生日期,雇用日期,地址,城市,地区,邮政编码,国家,家庭电话)" +
"values('" + txtSurname.Text + "','" +
txtName.Text + "','" +
txtDuties.Text + "','" +
txtAppellation.Text + "','" +
dtpBirthday.Value + "','" +
dtpEmployDay.Value + "','" +
txtAddress.Text + "','" +
txtCity.Text + "','" +
txtArea.Text + "','" +
txtZipcode.Text + "','" +
txtCountry.Text + "','" +
txtPhone.Text + "')";
command.Connection = conn;
try
{
command.ExecuteNonQuery();
MessageBox.Show("新增成功!");
string fullname = txtSurname.Text + txtName.Text;
cbEmployee.Items.Add(fullname);
currentName = fullname;
}
catch (Exception ex)
{
MessageBox.Show("新增失败:" + ex.Message);
}
btnOk.Visible = false;
btnCancel.Visible = false;
Panel1.Visible = false;
cbEmployee.Visible = true;
//显示雇员信息
getEmployeeInfo(currentName);
}
//取消新增雇员
private void btnCancel_Click(object sender, EventArgs e)
{
btnOk.Visible = false;
btnCancel.Visible = false;
Panel1.Visible = false;
cbEmployee.Visible = true;
//显示雇员信息
getEmployeeInfo(currentName);
}
//修改雇员信息方式一
private void btnEdit1_Click(object sender, EventArgs e)
{
OleDbCommand command = new OleDbCommand();
command.CommandText = "update 雇员 set 职务='" + txtDuties.Text +
"',尊称='" + txtAppellation.Text +
"',出生日期='" + dtpBirthday.Value +
"',雇用日期='" + dtpEmployDay.Value +
"',国家='" + txtCountry.Text +
"',城市='" + txtCity.Text +
"',地区='" + txtArea.Text +
"',地址='" + txtAddress.Text +
"',邮政编码='" + txtZipcode.Text +
"',家庭电话='" + txtPhone.Text +
"' where 姓氏+名字='" + cbEmployee.Text + "'";
command.Connection = conn;
try
{
command.ExecuteNonQuery();
MessageBox.Show("修改成功!");
}
catch ( Exception ex)
{
MessageBox.Show("修改失败:" + ex.Message);
}
}
//修改雇员信息方式二
private void btnEdit2_Click(object sender, EventArgs e)
{
OleDbCommand command = new OleDbCommand();
command.CommandText = "update 雇员 set 职务=?,尊称=?,出生日期=?," +
"雇用日期=?," +
"国家=?," +
"城市=?," +
"地区=?," +
"地址=?," +
"邮政编码=?," +
"家庭电话=?" +
" where 姓氏+名字=?";
command.Parameters.Add("@Duties", OleDbType.VarChar);
command.Parameters["@Duties"].Value = txtDuties.Text;
command.Parameters.Add("@Appellation", OleDbType.VarChar);
command.Parameters["@Appellation"].Value = txtAppellation.Text;
command.Parameters.Add("@Birthday", OleDbType.Date);
command.Parameters["@Birthday"].Value = dtpBirthday.Value;
command.Parameters.Add("@EmployDay", OleDbType.Date);
command.Parameters["@EmployDay"].Value = dtpEmployDay.Value;
command.Parameters.Add("@Country", OleDbType.VarChar);
command.Parameters["@Country"].Value = txtCountry.Text;
command.Parameters.Add("@City", OleDbType.VarChar);
command.Parameters["@City"].Value = txtCity.Text;
command.Parameters.Add("@Area", OleDbType.VarChar);
command.Parameters["@Area"].Value = txtArea.Text;
command.Parameters.Add("@Address", OleDbType.VarChar);
command.Parameters["@Address"].Value = txtAddress.Text;
command.Parameters.Add("@Zipcode", OleDbType.VarChar);
command.Parameters["@Zipcode"].Value = txtZipcode.Text;
command.Parameters.Add("@Phone", OleDbType.VarChar);
command.Parameters["@Phone"].Value = txtPhone.Text;
command.Parameters.Add("@FullName", OleDbType.VarChar);
command.Parameters["@FullName"].Value = cbEmployee.Text;
command.Connection = conn;
try
{
command.ExecuteNonQuery();
MessageBox.Show("修改成功!");
}
catch (Exception ex)
{
MessageBox.Show("修改失败:" + ex.Message);
}
}
//删除雇员信息
private void btnDel_Click(object sender, EventArgs e)
{
OleDbCommand command = new OleDbCommand();
command.CommandText = "delete * from 雇员 where 姓氏+名字='" + cbEmployee.Text + "'";
command.Connection = conn;
try
{
command.ExecuteNonQuery();
MessageBox.Show("删除成功!");
//删除后重新列出雇员
listEmployee();
}
catch (Exception ex)
{
MessageBox.Show("删除失败:" + ex.Message);
}
}
private void btnExit_Click(object sender, EventArgs e)
{
this.Close();
}
private void cbEmployee_SelectedIndexChanged(object sender, EventArgs e)
{
getEmployeeInfo(cbEmployee.Text);
}
//显示当前在cbEmployee中的雇员全名对应的雇员信息
private void getEmployeeInfo(string fullname)
{
OleDbCommand odcommand = new OleDbCommand();
odcommand.CommandText = "select * from 雇员 where 姓氏+名字='" + cbEmployee.Text + "'";
odcommand.Connection = conn;
OleDbDataReader reader ;
reader = odcommand.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.SingleRow);
if (reader.HasRows)
{
reader.Read();
txtDuties.Text = (string)reader["职务"];
txtAppellation.Text = (string)reader["尊称"];
dtpBirthday.Value =(DateTime) reader["出生日期"];
dtpEmployDay.Value = (DateTime)reader["雇用日期"];
txtCountry.Text = (string)reader["国家"];
txtCity.Text = (string)reader["城市"];
txtArea.Text = (string)reader["地区"];
txtAddress.Text = (string)reader["地址"];
txtZipcode.Text = (string)reader["邮政编码"];
txtPhone.Text = (string)reader["家庭电话"];
}
else
MessageBox.Show("错误的编号");
reader.Close();
currentName = cbEmployee.Text;
}
运行结果如下图所示:

图19-37 新增雇员信息
学习更多vb.net知识,请参看vb.net 教程 目录
学习更多C#知识,请参看C#教程 目录
相关文章:
19.4.8 数据库综合运用
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 需要北风数据库的请留言自己的信箱。 本节中将通过实例综合展示对数据表的查询、增加、修改和删除。 【例 19.16】【项目…...
JAVA中的抽象学习
一、Java SE 中的抽象概念 在 Java 中,抽象(Abstraction)是面向对象编程的重要特性之一。抽象的核心思想是“只关注重要的特性,而忽略不重要的细节”。抽象通常通过抽象类和接口来实现,它帮助开发者将复杂的系统隐藏在…...
在 Go 中实现事件溯源:构建高效且可扩展的系统
事件溯源(Event Sourcing)是一种强大的架构模式,它通过记录系统状态的变化(事件)来重建系统的历史状态。这种模式特别适合需要高可扩展性、可追溯性和解耦的系统。在 Go 语言中,事件溯源可以通过一些简单的…...
加解密 | AES加、解密学习
加解密 | AES加、解密学习 你的代码实现了一个简单的AES(高级加密标准)加密和解密的测试程序。以下是对代码的分析和一些改进建议: 代码功能 初始化数据和密钥: 定义了一个16字节的输入数据 input_data。定义了一个16字节的AES…...
【学术投稿-2025年计算机视觉研究进展与应用国际学术会议 (ACVRA 2025)】CSS样式解析:行内、内部与外部样式的区别与优先级分析
简介 2025年计算机视觉研究进展与应用(ACVRA 2025)将于2025年2月28-3月2日在中国广州召开,会议将汇聚世界各地的顶尖学者、研究人员和行业专家,聚焦计算机视觉领域的最新研究动态与应用成就。本次会议将探讨前沿技术,…...
MongoDB 基本操作
一、数据库操作 1. 切换或创建数据库 使用use命令切换到指定数据库,若该数据库不存在,在首次插入数据时会自动创建。 use myDatabase 2. 查看所有数据库 使用show dbs命令查看 MongoDB 实例中的所有数据库。 show dbs 3. 删除当前数据库 使用db.…...
Eclipse JSP/Servlet 深入解析
Eclipse JSP/Servlet 深入解析 引言 随着互联网的快速发展,Java Web开发技术逐渐成为企业级应用开发的主流。在Java Web开发中,JSP(JavaServer Pages)和Servlet是两个核心组件,它们共同构成了Java Web应用程序的基础。本文将深入解析Eclipse平台下的JSP/Servlet技术,帮…...
Hyperledger caliper 性能测试
前言:Hyperledger caliper 的本质是使用node对被测试网络进行压力测试,因此需要nodejs。本次使用 Hyperledger caliper 0.5 对 fabric 1.4.6进行压测 准备条件:nodejs 16 (略 linux下 解压环境变量即可) # 创建工作…...
Record-Mode 备案免关站插件,让 WordPress 备案不影响 SEO 和收录
专为 WordPress 网站设计的实用工具,旨在帮助网站在备案期间无需关闭即可正常收录所有页面的信息,利于SEO。 功能特性 免关站展示:开启插件后,非管理员用户访问网站时,会看到以半透明遮罩层或不透明全屏遮罩样式呈现的…...
【Java 面试 八股文】Redis篇
Redis 1. 什么是缓存穿透?怎么解决?2. 你能介绍一下布隆过滤器吗?3. 什么是缓存击穿?怎么解决?4. 什么是缓存雪崩?怎么解决?5. redis做为缓存,mysql的数据如何与redis进行同步呢&…...
介绍几款免费的显示器辅助工具!
今天为大家介绍几款实用的显示器辅助软件,它们可以帮助你轻松切换显示源调节、显示器亮度,甚至优化显示效果,让你的屏幕使用体验更加便捷和舒适。 Monitor Brightness Adjuster-多屏幕亮度调节工具 如果你需要同时使用多个显示器࿰…...
django配置跨域
1、第一种 from django.views.decorators.csrf import csrf_exemptcsrf_exempt第二种 安装 pip install django-cors-headers在配置文件settings.py进入 INSTALLED_APPS [..."corsheaders", # 添加 ]MIDDLEWARE [corsheaders.middleware.CorsMiddleware, # 添加…...
web前端第三次作业
题目 本期作业 WEB第三次作业 请使用JS实一个网页中登录窗口的显示/隐藏,页面中拖动移动,并且添加了边界判断的网页效 代码图片 效果展示 代码 <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8&qu…...
【Pandas】pandas Series align
Pandas2.2 Series Computations descriptive stats 方法描述Series.align(other[, join, axis, level, …])用于将两个 Series 对齐,使其具有相同的索引 pandas.Series.align pandas.Series.align() 方法用于将两个 Series 对齐,使其具有相同的索引。…...
DeepSeek-V3网络模型架构图解
DeepSeek-V3网络架构的创新主要在两次,分别是在前馈层的MOE(混合专家模型)和在注意力中的MHA(多头潜在注意力,一种注意力计算规模压缩技术)。 MOE(混合专家模型) 回顾最初的MOE GS…...
Linux系统管理小课堂
1. 文件系统:你的数字房间大扫除 例子1:藏日记本的保险箱 chmod 700 my_diary.txt 👻 解释:把日记文件权限改成「只有主人能读写」,室友偷看时系统会翻白眼:“Permission denied!” 例子2&…...
明远智睿核心板在智能家居与工业网关中的应用实践
**——从硬件支持到场景落地的技术路径** SSD2351 在智能家居与工业物联网领域,设备需具备实时响应、多协议兼容及边缘计算能力。明远智睿新款核心板凭借其硬件特性,可高效支撑以下典型场景: #### **场景一:智能家居中枢网关**…...
Windows 系统 GDAL库 配置到 Qt 上
在地理信息开发中广泛使用的开源库,GDAL(Geospatial Data Abstraction Library))库提供了读取和处理各种地理空间数据格式的能力。 准备阶段 下载 GDAL 库:前往 GDAL 的官方网站(https://www.gisinternals.com/)下载…...
部署onlyoffice后,php版的callback及小魔改(logo和关于)
作为这篇博文的补充CentOS9 安装Docker+Dpanel+onlyoffice(https、更改字体、字号、去除限制)的避坑笔记,现在继续… 本次主要内容有:php中callback的调用、自签证书调用callback遇到SSL certificate problem: unable to get local issuer certificate问题、修改onlyoffic…...
《qt open3d网格拉普拉斯平滑》
qt open3d网格拉普拉斯平滑 效果展示二、流程三、代码效果展示 二、流程 创建动作,链接到槽函数,并把动作放置菜单栏 参照前文 三、代码 1、槽函数实现 void on_actionFilterLaplacian_triggered();void MainWindow::on_actionFil...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
