C# WPF上位机开发(MySql访问)

news/2025/2/7 3:47:56/

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        前面我们学习了数据库sqlite,不过这是一种小型的数据库,作为内部使用还可以。但是,如果要与外面的其他供应商进行联调的话,最好还是采用sql server、oracle、mysql这样的数据库。鉴于前两种数据库都是商用数据库,目前一般项目中,mysql算是使用比较多的一种方案。所以,今天我们也来介绍下mysql应该怎么访问和使用。

1、安装mysql软件

        mysql有很多的版本,建议大家可以选择一个长期支持的版本,而不是最新发布的版本。

2、安装支持mysql的odbc软件

        odbc可以看成是windows平台上面数据库的一个标准。各数据库厂家,一般都会发布一个odbc的支持包。安装之后,对于开发人员来说,它只需要调用windows官方提供的的odbc接口,就能够操作各家的数据库了。当然,安装的时候,一定要注意odbc的版本要和mysql的版本相匹配。

3、安装navicat

        navicat是一个很好用的数据库管理工具。之前也提到过这个工具。通过它,可以连接mysql,创建一个member数据库,再创建一个person数据表。

4、准备测试界面

        既然是c# wpf要用到mysql,接下来我们可以准备一个测试界面。当然界面不需要很复杂,只需要增、删、改、查四个按钮就可以,事实上,我们确实也是这么做的,

<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfApp"mc:Ignorable="d"Title="MySQL WPF Demo" Height="450" Width="800"><Grid><StackPanel Margin="10"><!-- 查询数据按钮 --><Button Content="Fetch Data" Height="40" Click="FetchDataButton_Click" Margin="0,0,0,10"/><!-- 插入数据按钮 --><Button Content="Insert Data" Height="40" Click="InsertDataButton_Click" Margin="0,0,0,10"/><!-- 更新数据按钮 --><Button Content="Update Data" Height="40" Click="UpdateDataButton_Click" Margin="0,0,0,10"/><!-- 删除数据按钮 --><Button Content="Delete Data" Height="40" Click="DeleteDataButton_Click" Margin="0,0,0,10"/><!-- 在这里添加显示数据的控件,例如TextBlock、TextBox等 --></StackPanel></Grid>
</Window>

        转换成界面的话,就是这个样子,

5、编写代码

        编写代码部分其实和之前的sqlite有点类似。唯一不同的部分,就是需要在开始的时候把odbc的命名空间加上,这样我们就可以使用相关函数了。整体的代码内容不复杂,大家可以自己阅读一下。另外,每次操作之后,不管是顺利出错还是正常执行,都会弹出一个对话框提示一下。

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;using System.Data.Odbc;namespace WpfApp
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{// connect stringstring ConnectionString = "Driver={MySQL ODBC 5.2 Unicode Driver};Server=127.0.0.1;Database=member;User=root;Password=123456;";public MainWindow(){InitializeComponent();}// read operationprivate void FetchDataFromDatabase(){try{using (OdbcConnection connection = new OdbcConnection(ConnectionString)){connection.Open();string query = "SELECT * FROM Person";using (OdbcCommand command = new OdbcCommand(query, connection)){using (OdbcDataReader reader = command.ExecuteReader()){while (reader.Read()){string Value1 = reader["Id"].ToString();string Value2 = reader["Name"].ToString();string Value3 = reader["Age"].ToString();// todo, show your data to widget}}}connection.Close();}MessageBox.Show("Data fetch successfully.");}catch (Exception ex){MessageBox.Show($"Error: {ex.Message}");}}// insert operationprivate void InsertDataToDatabase(){try{using (OdbcConnection connection = new OdbcConnection(ConnectionString)){connection.Open();// execute insertstring query = $"INSERT INTO Person (Name, Age) VALUES ('Mike', 30)";using (OdbcCommand command = new OdbcCommand(query, connection)){command.ExecuteNonQuery();}connection.Close();}MessageBox.Show("Data inserted successfully.");}catch (Exception ex){MessageBox.Show($"Error: {ex.Message}");}}// update operationprivate void UpdateDataInDatabase(){try{using (OdbcConnection connection = new OdbcConnection(ConnectionString)){connection.Open();// execute updatestring query = $"UPDATE Person SET Age = 50 WHERE Name = 'Mike'";using (OdbcCommand command = new OdbcCommand(query, connection)){command.ExecuteNonQuery();}connection.Close();}MessageBox.Show("Data updated successfully.");}catch (Exception ex){MessageBox.Show($"Error: {ex.Message}");}}// delete operationprivate void DeleteDataFromDatabase(){try{using (OdbcConnection connection = new OdbcConnection(ConnectionString)){connection.Open();// execute deletestring query = $"DELETE FROM Person WHERE Name = 'Mike'";using (OdbcCommand command = new OdbcCommand(query, connection)){command.ExecuteNonQuery();}connection.Close();}MessageBox.Show("Data deleted successfully.");}catch (Exception ex){MessageBox.Show($"Error: {ex.Message}");}}// read button callbackprivate void FetchDataButton_Click(object sender, RoutedEventArgs e){FetchDataFromDatabase();}// insert button callbackprivate void InsertDataButton_Click(object sender, RoutedEventArgs e){InsertDataToDatabase();}// update button callbackprivate void UpdateDataButton_Click(object sender, RoutedEventArgs e){UpdateDataInDatabase();}//  delete button callbackprivate void DeleteDataButton_Click(object sender, RoutedEventArgs e){DeleteDataFromDatabase();}}
}

6、编译和测试

        界面和代码都没有问题的话,就可以直接运行测试了。可以按照增加、查找、更新、删除这样的顺序来进行测试。同时,测试的时候还可以搭配navicat一起进行double check一下。


http://www.ppmy.cn/news/1281707.html

相关文章

lvgl 双物理显示器的驱动实现

目录 一、背景 1. 要实现的功能2. lvgl 版本 二、简单粗暴的方式 理论上可以这样实现缺陷&#xff1a; 三、lvgl 自身机制支持 3.1 实现思路3.2 初始化缓冲区和注册显示驱动 3.2.1 复制lv_port_disp → lv_port_disp_23.2.2 修改 lv_port_disp_2 文件3.2.3 在应用层调用显示器…

基于flask和echarts的新冠疫情实时监控系统源码+数据库,后端基于python的flask框架,前端主要是echarts

介绍 基于flask和echarts的新冠疫情实时监控系统 软件架构 后端基于python的flask框架&#xff0c;前端主要是echarts 安装教程 下载到本地&#xff0c;在python相应环境下运行app.py,flask项目部署请自行完成 使用说明 flaskProject文件夹中 app.py是flask项目主运行文…

听GPT 讲Rust源代码--src/tools(27)

File: rust/src/tools/clippy/clippy_lints/src/methods/suspicious_to_owned.rs 文件rust/src/tools/clippy/clippy_lints/src/methods/suspicious_to_owned.rs的作用是实施Clippy lint规则&#xff0c;检测产生潜在性能问题的字符转换代码&#xff0c;并给出相关建议。 在Rus…

使用 Jekyll 构建你的网站 - 初入门

文章目录 一、Jekyll介绍二、Jekyll安装和启动2.1 配置Ruby环境1&#xff09;Windows2&#xff09;macOS 2.2 安装 Jekyll2.3 构建Jekyll项目2.4 启动 Jekyll 服务 三、Jekyll常用命令四、目录结构4.1 主要目录4.2 其他的约定目录 五、使用GitLink构建Jekyll博客5.1 生成Jekyll…

ios开发及上架

iOS证书的分类&#xff1a; 开发者证书&#xff08;Development Certificate&#xff09;&#xff1a;用于在开发阶段对应用程序进行签名和验证。开发者证书只能在开发者模式下使用&#xff0c;无法发布到App Store。 发布证书&#xff08;Distribution Certificate&#xff…

Python五子棋

一、五子棋 五子棋起源于中国&#xff0c;全国智力运动会竞技项目之一&#xff0c;是一种两人对弈的纯策略型棋类游戏。双方分别使用黑白两色的棋子&#xff0c;下在棋盘直线与横线的交叉点上&#xff0c;先形成五子连珠者获胜。 五子棋容易上手&#xff0c;老少皆宜&#xf…

Flume采集日志存储到HDFS

1 日志服务器上配置Flume,采集本地日志文件&#xff0c;发送到172.19.115.96 的flume上进行聚合&#xff0c;如日志服务器有多组&#xff0c;则在多台服务器上配置相同的配置 # Name the components on this agent a1.sources r1 a1.sinks k1 a1.channels c1# Describe/con…

11-GraalVM元原生时代的Java虚拟机

文章目录 GraalVM诞生的背景Java在微服务/云原生时代的困境事实矛盾 问题根源Java离不开虚拟机 解决方案革命派保守派 GraalVM入门GraalVM特征GraalVM下载和安装GraalVM下载win10安装及配置linux安装及配置 GraalVM初体验(Linux)多语言开发(了解即可、官网有Demo)GraalCompiler…