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

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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.mzph.cn/news/577846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Intent 传递实体类到下一个 Activity

要在 Android 中通过 Intent 传递实体类对象&#xff0c;首先需要确保实体类对象实现了 Serializable 或 Parcelable 接口。 一、实现 Serializable 接口&#xff1a; public class MyObject implements Serializable {private String name;private int age;// 构造方法和其他…

蓝牙物联网在智慧医疗中的应用

物联网技术开启了万物互联的时代&#xff0c;并且随着智慧城市建设的加速推进及物联网技术对各行业的逐步渗透&#xff0c;“智慧”概念应运而生&#xff0c;诸如智慧能源、智慧交通、智慧医疗等“遍地开花”&#xff0c;可以说&#xff0c;物联网技术给各行业带来了产业模式上…

力扣labuladong一刷day46天并查集

力扣labuladong一刷day46天并查集 文章目录 力扣labuladong一刷day46天并查集一、323. 无向图中连通分量的数目二、130. 被围绕的区域三、990. 等式方程的可满足性 一、323. 无向图中连通分量的数目 题目链接&#xff1a;https://leetcode.cn/problems/number-of-connected-co…

转场动画路径动画

本篇文章我们介绍下转场动画及路径动画。 1、概述 转场动画有三种类型&#xff0c;页面间转场、组件内转场、共享元素转场。 2、页面间转场 页面间转场需要在全局pageTransition方法内配置页面入场和页面退场时的自定义转场动效。 2.1、函数说明 名称 参数 必填 参数描述…

Arduino/Android 蓝牙通信系统设计解决方案

随着当今安全管理的发展需求以及国家对安全监控行业的支持&#xff0c;这几年&#xff0c;安全监控行业发展迅猛&#xff0c;各类监控系统百花齐放。传统的温度监控系统通过有线或其他方式传送温度数据&#xff0c;而本文提出了利用蓝牙无线传输数据的设计方案&#xff0c;这种…

SLAM算法与工程实践——SLAM基本库的安装与使用(6):g2o优化库(3)构建g2o顶点

SLAM算法与工程实践系列文章 下面是SLAM算法与工程实践系列文章的总链接&#xff0c;本人发表这个系列的文章链接均收录于此 SLAM算法与工程实践系列文章链接 下面是专栏地址&#xff1a; SLAM算法与工程实践系列专栏 文章目录 SLAM算法与工程实践系列文章SLAM算法与工程实践…

FLStudio21中文版水果编曲软件好用吗?如何下载最新版本

FL Studio21版是一款在国内非常受欢迎的多功能音频处理软件&#xff0c;我们可以通过这款软件来对多种不同格式的音频文件来进行编辑处理。而且FL Studio 21版还为用户们准备了超多的音乐乐器伴奏&#xff0c;我们可以直接一键调取自己需要的音调。 FL Studio21版不仅拥有非常…

vue利用深拷贝解决修改不能取消的问题

vue利用深拷贝解决修改不能取消的问题 在对某数据进行修改时考虑还需要进行“确认”、“取消”操作&#xff0c;那么在取消时就需要返回保留的数据内容&#xff0c;那么如何将原有数据保留一份则是关键性问题。 显然修改值不能直接进行原值的赋值操作&#xff0c;因为这样无法取…

Hadoop——分布式计算

一、分布式计算概述 1. 什么是计算、分布式计算? 计算:对数据进行处理,使用统计分析等手段得到需要的结果分布式计算:多台服务器协同工作,共同完成一个计算任务2. 分布式计算常见的2种工作模式分散->汇总 (MapReduce就是这种模式)将数据分片,多台服务器各自负责一…

金和OA C6 gethomeinfo sql注入漏洞

产品介绍 金和网络是专业信息化服务商,为城市监管部门提供了互联网监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。 漏洞概述 金和 OA C6 gethomeinfo接口处存在SQL注入漏洞&#xff0c;攻击者除了可以利用 SQL 注入漏洞获取…

vue3+ts pinia存储及持久化

index.ts 需要安装pinia-plugin-persist npm i pinia-plugin-persist -Simport { createPinia} from "pinia" // 引入批量的pinia持久存储插件 import piniaPluginPersist from pinia-plugin-persist const storecreatePinia(); store.use(piniaPluginPers…

【网络安全 | 网络协议】结合Wireshark讲解TCP三次握手

TCP三次握手在Wireshark数据包中是如何体现的&#xff1f;在此之前&#xff0c;先熟悉TCP三次握手的流程。 TCP三次握手流程 TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的传输层协议。在建立 TCP 连接时&#xff0c;需要进行三次握手&#xff0c;防止因为…

【自然语言处理】用Python从文本中删除个人信息-第二部分

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

uni-app pages.json之globalStyle全局页面样式配置

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…

什么是图像中的掩膜(Mask),如何使用掩码

目录 掩膜的基本概念 掩膜的应用示例 实现方式 注意事项 基本步骤 示例&#xff1a;使用OpenCV处理图像 注意事项 在图像处理和计算机视觉领域&#xff0c;掩膜&#xff08;Mask&#xff09;是一个非常重要的概念。掩膜通常用于指定图像的某个区域&#xff0c;以便对这个…

STM32软硬件CRC测速对比

硬件CRC配置 以及软硬件CRC速度对比 使用CUBEMX配置默认使用的是CRC32&#xff0c;从库中可以看出这一点 HAL库提供了以下两个计算函数 HAL_CRC_Accumulate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength); 这个函数用于在已有的CRC校验结果的基础上累积…

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

File: rust/src/tools/clippy/clippy_lints/src/methods/iter_out_of_bounds.rs 在Rust源代码中&#xff0c;iter_out_of_bounds.rs文件是Clippy lints库的一部分&#xff0c;该库用于静态代码分析&#xff0c;用于检测Rust代码中的潜在问题和错误。iter_out_of_bounds.rs文件中…

第三天:对ThreadLocal理解

ThreadLocal是什么&#xff1f; ThreadLocal&#xff0c;也就是线程本地变量。如果你创建了一个 ThreadLocal变量&#xff0c;那么访问这个变量的每个线程都会有这个变量的一个本地副本&#xff0c;多个线程操作这个变量的时候&#xff0c;实际是操作自己本地内存里面的变量&a…

5G NTN与“手机直连卫星”快速原型

5G非地面网络(5G NTN) 5G非地面网络(Non-Terrestrial Network, NTN)是一项旨在使5G用户终端(5G UE)连接到 位于卫星上的非地面基站(5G gNB)的技术NTN是3GPP R17版本的重要功能&#xff0c;在5G-Advanced中持续演进&#xff0c;已成为3GPP Release 18 工作计划中的重要组成部分…

Wi-Fi、蓝牙、ZigBee等多类型无线连接方式的安全物联网网关设计

随着物联网和云计算技术的飞速发展.物联网终端的数量越来越多&#xff0c;终端的连接方式也更趋多样化&#xff0c;比如 Wi-Fi蓝牙和 ZigBee 等。现有的物联网网关大多仅支持一种或者几种终端的接人方式。无法满足终端异构性的需求。同时&#xff0c;现有的物联网网关与终端设备…