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

WPF 实现可视化操作数据库的程序全解析

在软件开发中,实现对数据库的可视化操作能极大提升开发效率和用户体验。借助 WPF(Windows Presentation Foundation)强大的界面开发能力,我们可以打造出功能丰富、交互友好的数据库操作程序。本文将详细介绍如何使用 WPF 搭建一个可视化操作数据库的程序,帮助大家掌握这一实用的开发技巧。

一、前期准备

(一)开发环境搭建

确保你已经安装了 Visual Studio,这是开发 WPF 应用的主要工具。同时,根据你要操作的数据库类型,准备相应的数据库驱动。例如,若使用 SQL Server,需要安装 Microsoft.Data.SqlClient 库;若使用 MySQL,则需要安装 MySql.Data 库。

(二)数据库设计

在开始编写代码前,先设计好数据库结构。假设我们要创建一个简单的学生信息管理系统,数据库中至少包含一张名为 “Students” 的表,表结构如下:

字段名

数据类型

描述

Id

int

学生 ID,主键,自增长

Name

nvarchar(50)

学生姓名

Age

int

学生年龄

Grade

nvarchar(10)

学生年级

二、创建 WPF 项目

打开 Visual Studio,创建一个新的 WPF 应用项目。在项目创建向导中,为项目命名并选择合适的存储位置。创建完成后,项目结构中会包含App.xaml(应用程序的入口和资源定义文件)、MainWindow.xaml(主窗口文件,用于设计界面)以及MainWindow.xaml.cs(主窗口的代码后端文件,用于编写逻辑代码)。

三、连接数据库

在MainWindow.xaml.cs文件中,添加数据库连接代码。以 SQL Server 为例:


using Microsoft.Data.SqlClient;namespace WpfDatabaseApp{public partial class MainWindow : Window{private string connectionString = "Data Source=YOUR_SERVER_NAME;Initial Catalog=YOUR_DATABASE_NAME;User ID=YOUR_USERNAME;Password=YOUR_PASSWORD";public MainWindow(){InitializeComponent();LoadData();}private void LoadData(){using (SqlConnection connection = new SqlConnection(connectionString)){string query = "SELECT * FROM Students";SqlDataAdapter adapter = new SqlDataAdapter(query, connection);System.Data.DataTable dataTable = new System.Data.DataTable();adapter.Fill(dataTable);// 这里假设界面上有一个名为dataGrid的DataGrid控件,用于显示数据dataGrid.ItemsSource = dataTable.DefaultView;}}}}

上述代码中,connectionString定义了数据库连接字符串,LoadData方法用于从数据库中读取数据并填充到界面的DataGrid控件中。

四、数据展示与编辑

(一)数据展示

在MainWindow.xaml中,添加一个DataGrid控件用于展示数据:


<Grid><DataGrid x:Name="dataGrid" AutoGenerateColumns="True" Margin="10"></DataGrid></Grid>

AutoGenerateColumns="True"表示DataGrid会根据数据源自动生成列。

(二)数据编辑

为了实现数据编辑功能,我们需要在DataGrid中启用编辑模式,并处理数据更新操作。在MainWindow.xaml.cs中添加以下代码:


private void dataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e){DataGrid dataGrid = sender as DataGrid;DataRowView rowView = dataGrid.SelectedItem as DataRowView;if (rowView!= null){using (SqlConnection connection = new SqlConnection(connectionString)){string updateQuery = "UPDATE Students SET Name = @Name, Age = @Age, Grade = @Grade WHERE Id = @Id";SqlCommand command = new SqlCommand(updateQuery, connection);command.Parameters.AddWithValue("@Name", rowView["Name"]);command.Parameters.AddWithValue("@Age", rowView["Age"]);command.Parameters.AddWithValue("@Grade", rowView["Grade"]);command.Parameters.AddWithValue("@Id", rowView["Id"]);connection.Open();command.ExecuteNonQuery();}}}

同时,在MainWindow.xaml中为DataGrid添加CellEditEnding事件绑定:


<DataGrid x:Name="dataGrid" AutoGenerateColumns="True" Margin="10" CellEditEnding="dataGrid_CellEditEnding"></DataGrid>

这样,当用户在DataGrid中编辑完数据并离开单元格时,数据会自动更新到数据库中。

五、添加数据与删除数据

(一)添加数据

在界面上添加一个 “添加” 按钮,在MainWindow.xaml中:

 
<Button Content="添加" Margin="10" Click="Button_Add_Click" />

在MainWindow.xaml.cs中实现按钮点击事件:


private void Button_Add_Click(object sender, RoutedEventArgs e){using (SqlConnection connection = new SqlConnection(connectionString)){string insertQuery = "INSERT INTO Students (Name, Age, Grade) VALUES (@Name, @Age, @Grade)";SqlCommand command = new SqlCommand(insertQuery, connection);command.Parameters.AddWithValue("@Name", "新学生"); // 这里可以替换为用户输入的值command.Parameters.AddWithValue("@Age", 18); // 这里可以替换为用户输入的值command.Parameters.AddWithValue("@Grade", "一年级"); // 这里可以替换为用户输入的值connection.Open();command.ExecuteNonQuery();LoadData(); // 重新加载数据,刷新界面}}

(二)删除数据

在界面上添加一个 “删除” 按钮,在MainWindow.xaml中:

 
<Button Content="删除" Margin="10" Click="Button_Delete_Click" />

在MainWindow.xaml.cs中实现按钮点击事件:


private void Button_Delete_Click(object sender, RoutedEventArgs e){DataGrid dataGrid = dataGrid;DataRowView rowView = dataGrid.SelectedItem as DataRowView;if (rowView!= null){using (SqlConnection connection = new SqlConnection(connectionString)){string deleteQuery = "DELETE FROM Students WHERE Id = @Id";SqlCommand command = new SqlCommand(deleteQuery, connection);command.Parameters.AddWithValue("@Id", rowView["Id"]);connection.Open();command.ExecuteNonQuery();LoadData(); // 重新加载数据,刷新界面}}}

六、总结

通过以上步骤,我们成功地使用 WPF 实现了一个可视化操作数据库的程序。从数据库连接、数据展示与编辑,到数据的添加和删除,每一步都充分利用了 WPF 的特性和数据库操作的基本原理。在实际项目中,还可以进一步优化界面设计、添加数据验证等功能,提升程序的实用性和稳定性。希望本文能为大家在 WPF 与数据库交互开发方面提供有益的参考,帮助大家快速掌握这一重要的开发技能。

相关文章:

WPF 实现可视化操作数据库的程序全解析

在软件开发中&#xff0c;实现对数据库的可视化操作能极大提升开发效率和用户体验。借助 WPF&#xff08;Windows Presentation Foundation&#xff09;强大的界面开发能力&#xff0c;我们可以打造出功能丰富、交互友好的数据库操作程序。本文将详细介绍如何使用 WPF 搭建一个…...

python mysql库的三个库mysqlclient mysql-connector-python pymysql如何选择,他们之间的区别

三者的区别 1. mysqlclient 特点&#xff1a; 是一个用于Python的MySQL数据库驱动程序&#xff0c;用于与MySQL数据库进行交互。 依赖于MySQL的本地库&#xff0c;因此在安装时需要确保系统上已安装了必要的依赖项&#xff0c;如libmysqlclient-dev等。 性能较好&#xff0c…...

如何将数据库字符集改为中文,让今后所有的数据库都支持中文

最后一行有我自己的my.ini文件 数据库输入中文数据时会变为乱码&#xff0c; 这个时候&#xff0c;我们为每个数据库设置字符集&#xff0c;太过于麻烦&#xff0c;为数据库单独设置重启后又会消失 Set character_set_database’utf8’; Set character_set_server’utf8’; …...

Low-Level 大一统:如何使用Diffusion Models完成视频超分、去雨、去雾、降噪等所有Low-Level 任务?

Diffusion Models专栏文章汇总:入门与实战 前言:视频在传输过程中常常因为各种因素(如恶劣天气、噪声、压缩和传感器分辨率限制)而出现质量下降,这会严重影响计算机视觉任务(如目标检测和视频监控)的性能。现有的视频修复方法虽然取得了一些进展,但通常只能针对特定的退…...

EAMM: 通过基于音频的情感感知运动模型实现的一次性情感对话人脸合成

EAMM: 通过基于音频的情感感知运动模型实现的一次性情感对话人脸合成 1所有的材料都可以在EAMM: One-Shot Emotional Talking Face via Audio-Based Emotion-Aware Motion Model网站上找到。 摘要 尽管音频驱动的对话人脸生成技术已取得显著进展&#xff0c;但现有方法要么忽…...

Docker Compose的使用

文章首发于我的博客&#xff1a;https://blog.liuzijian.com/post/docker-compose.html 目录 Docker Compose是什么Docker Compose安装Docker Compose文件Docker Compose常用命令案例&#xff1a;部署WordPress博客系统 Docker Compose是什么 Docker Compose是Docker官方的开源…...

[STM32 HAL库]串口空闲中断+DMA接收不定长数据

一、空闲中断 STM32的串口具有空闲中断&#xff0c;什么叫做空闲呢&#xff1f;如何触发空闲中断呢&#xff1f; 空闲&#xff1a;串口发送的两个字符之间间隔非常短&#xff0c;所以在两个字符之间不叫空闲。空闲的定义是总线上在一个字节的时间内没有再接收到数据。触发条件…...

三、华为交换机 Hybrid

一、Hybrid功能 Hybrid口既可以连接普通终端的接入链路&#xff08;类似于Access接口&#xff09;&#xff0c;又可以连接交换机间的干道链路&#xff08;类似于Trunk接口&#xff09;。它允许多个VLAN的帧通过&#xff0c;并可以在出接口方向将某些VLAN帧的标签剥掉&#xff0…...

如何通过 Apache Airflow 将数据导入 Elasticsearch

作者&#xff1a;来自 Elastic Andre Luiz 了解如何通过 Apache Airflow 将数据导入 Elasticsearch。 Apache Airflow Apache Airflow 是一个旨在创建、安排&#xff08;schedule&#xff09;和监控工作流的平台。它用于编排 ETL&#xff08;Extract-Transform-Load&#xff0…...

Android Studio:Linux环境下安装与配置

更多内容&#xff1a;XiaoJ的知识星球 Android Studio&#xff1a;Linux环境下安装与配置 1.安装JDK2.安装Android Studio2.1 获取安装包2.2 安装&#xff08;1&#xff09;配置环境变量&#xff1a;&#xff08;2&#xff09;运行安装&#xff1a;&#xff08;3&#xff09;配…...

token是用来鉴权的,那session是用来干什么的?

在Web应用和API设计中&#xff0c;鉴权与会话管理是两个核心概念&#xff0c;它们对于确保用户身份的安全性和维护用户会话状态至关重要。Token和Session是两种常用的鉴权与会话管理机制&#xff0c;它们各自具有独特的工作原理和适用场景。下面是对Token和Session的详细解析及…...

基于 WEB 开发的二手车辆销售管理系统设计与实现

标题:基于 WEB 开发的二手车辆销售管理系统设计与实现 内容:1.摘要 摘要&#xff1a;随着互联网技术的不断发展&#xff0c;电子商务在各个领域得到了广泛的应用。本文以二手车辆销售管理系统为例&#xff0c;探讨了基于 WEB 开发的销售管理系统的设计与实现。通过对系统需求的…...

wordpress的火车头商品发布接口

<?php require ../wp-load.php; ini_set(memory_limit, 1024M); set_time_limit(180);$top_cat ; # 图片链接域名替换 $image_host ;$start_time microtime(true);$counter 0; // 临时缓存 $products $skus $categories []; $var_sku_index 1;$rowData$_POST;// if…...

浙江安吉成新照明电器:Acrel-1000DP 分布式光伏监控系统应用探索

安科瑞吕梦怡 18706162527 摘 要&#xff1a;分布式光伏发电站是指将光伏发电组件安装在用户的建筑物屋顶、空地或其他适合的场地上&#xff0c;利用太阳能进行发电的一种可再生能源利用方式&#xff0c;与传统的大型集中式光伏电站相比&#xff0c;分布式光伏发电具有更灵活…...

总结3..

#include<stdio.h> int n,m; int a[1002][1002]; int b[1002][1002];//判断该空的八连通图是否被走过 int gg0; int dd0; int xz[8]{-1,-1,-1,0,0,1,1,1},yz[8]{-1,0,1,-1,1,-1,0,1};//八个方向 void dfs(int x,int y) { int dx,dy; for(int i0;i<8;i) { …...

信息奥赛一本通 1168:大整数加法

这道题是一道大整数加法&#xff0c;涉及到高精度的算法&#xff0c;比如说有两个数要进行相加&#xff0c;1111111111111111111111111111111111111112222222222222222222222222222222&#xff0c;那么如果这两个数很大的话我们常用的数据类型是不能进行计算的&#xff0c;那么…...

3.3 OpenAI GPT-4, GPT-3.5, GPT-3 模型调用:开发者指南

OpenAI GPT-4, GPT-3.5, GPT-3 模型调用:开发者指南 OpenAI 的 GPT 系列语言模型,包括 GPT-4、GPT-3.5 和 GPT-3,已经成为自然语言处理领域的标杆。无论是文本生成、对话系统,还是自动化任务,开发者都可以通过 API 调用这些强大的模型来增强他们的应用。本文将为您详细介…...

横盘出击的三种经典走势形态,买点以及需要注意的问题技术详解

龙头股在横盘整理过程中&#xff0c;也会出现几种不同的形态&#xff0c;比如矩形整理形态&#xff0c;或者在某一趋势线下方运行。 第一种形态&#xff1a;突破横盘趋势线 突破横盘趋势线时识别横盘龙头启动的关键点位。股价经过一段时间的横盘后&#xff0c;突然出现快速上…...

处理没有提示的字符串、计算相隔天数应用题

正常情况下&#xff0c;小云每天跑 1 千米。如果某天是周一或者月初&#xff08;1 日&#xff09;&#xff0c;为了激励自己&#xff0c;小云要跑 2 千米。如果同时是周一或月初&#xff0c;小云也是跑 2 千米。 小云跑步已经坚持了很长时间&#xff0c;从 1990 年 1 月 1 日周…...

【LeetCode】力扣刷题热题100道(31-35题)附源码 搜索二维矩阵 岛屿数量 腐烂的橙子 课程表 实现 Trie (前缀树)(C++)

一、搜索二维矩阵 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 可以使用 从右上角开始搜索 的方法来有效地找到目标值。 选择起始位置&#xff1a; 从矩…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...