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.hqwc.cn/news/300147.html

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

相关文章

【NI-RIO入门】计算和测量cRIO系统的功耗

计算 您可以根据cRIO机箱的最大功耗、机箱和模块的平均功耗&#xff0c;最后通过经验测试cRIO和模块的功耗来计算散热量。每一种散热计算的精确度都逐渐上升&#xff0c;但安全系数也逐渐下降。 注意&#xff1a;请记住&#xff0c;热量输出以英国热量单位 (BTU…

MyBatis——MyBatis的缓存

MyBatis的缓存 创建工程&#xff1a; 1缓存介绍 为什么使用缓存&#xff1f; 首次访问时&#xff0c;查询数据库&#xff0c;并将数据存储到内存中&#xff1b;再次访问时直接访问缓存&#xff0c;减少IO、硬盘读写次数、提高效率 Mybatis中的一级缓存和二级缓存&#xff1f;…

中北大学 软件构造 U+及上课代码详解

作业1 1.数据类型可分为两类:(原子类型) 、结构类型。 2.(数据结构)是计算机存储、组织数据的方式&#xff0c;是指相互之间存在一种或多种特定关系的数据元素的集合 3.代码重构指的是改变程序的(结构)而不改变其行为&#xff0c;以便提高代码的可读性、易修改性等。 4.软件实…

nodejs+vue+微信小程序+python+PHP基于Android的共享自习室APP系统-计算机毕业设计推荐

1.用户端&#xff1a; 一、首页&#xff1a; &#xff08;1&#xff09;店面轮播图及位置、营业时间 &#xff08;2&#xff09;预约储物柜功能&#xff1a;选择储物柜号码、确认预约 &#xff08;3&#xff09;会员功能&#xff1a;解锁VIP座位、个人积分信息&#xff08;查看…

剑指 Offer(第2版)面试题 52:两个链表的第一个公共结点

剑指 Offer&#xff08;第2版&#xff09;面试题 52&#xff1a;两个链表的第一个公共结点 剑指 Offer&#xff08;第2版&#xff09;面试题 52&#xff1a;两个链表的第一个公共结点解法1&#xff1a;计算链表长度解法2&#xff1a;双指针解法3&#xff1a;栈 剑指 Offer&…

滤波器(Filter)

滤波器 常用滤波器元器件 馈通电容滤波器NFM18PC104R1C3 \SDCW2012-2-900TF \ 0603 0.1UF(104) 16V 文章目录 滤波器前言一、滤波器是什么二、两路 0805共模滤波器 阻抗90Ω@100MHz三、0603 0.1UF(104) 16V四、馈通电容滤波器NFM18PC104R1C3总结前言 滤波器在电子系统中具有…

STM32 cubeMX 直流电机控制风扇转动

本文使用的是 HAL 库。 文章目录 前言一、直流电机介绍二、直流电机原理图三、直流电机控制方法四、STM32CubeMX 配置直流电机五、代码编写总结 前言 实验开发板&#xff1a;STM32F051K8。所需软件&#xff1a;keil5 &#xff0c; cubeMX 。实验目的&#xff1a;了解 直流电机…

geyser互通服基岩版进不去

Java版需要在服务器安全组开通TCP端口&#xff08;如果有宝塔&#xff0c;也需要开通&#xff09; geyser下载好的安装运行也需要开通端口&#xff0c;但是它是UDP的&#xff08;但是我同时也开启了TCP&#xff0c;可能不需要&#xff1f; Java 版玩家隧道 Java 版玩家使用 T…

Android 手机对于Arduino蓝牙控制解决方案

1、Android系统概述 ​ Android 系统是 Google 公司基于 Linux 内核开发的移动端操作系统,适用于智能手机智能手表平板电脑等设备&#xff0c;最新的版本为 7.1。Android系统具有免费开源的优势,任何企业与个人都可以查阅公开的 API 文档&#xff0c;并在自己开发的应用中通过调…

视频音频转换:Movavi Video Converter 2022 Premium

Movavi Video Converter 2022 Premium是一款功能强大的视频转换软件&#xff0c;由知名的Movavi公司开发。这款软件的主要特点是可以将视频文件转换成多种不同的格式&#xff0c;如AVI、MP4、MKV、FLV、3GP等&#xff0c;以满足用户在不同设备和平台上的需求。 除了转换功能&a…

基于STM32和MQ-2传感器的无线烟雾检测系统设计

随着科技的不断发展&#xff0c;人们对生活安全的要求也越来越高。其中&#xff0c;烟雾检测系统在预防火灾方面起着至关重要的作用。本文将介绍一种基于STM32和MQ-2传感器的无线烟雾检测系统设计&#xff0c;旨在实时检测环境中的烟雾&#xff0c;并及时发出警报&#xff0c;以…

分布式面试题-理论部分(十二道)

文章目录 分布式面试题&#xff08;十二道&#xff09;分布式理论1. 说说CAP原理2. 为什么CAP不可兼得呢&#xff1f;3. CAP对应的模型和应用&#xff1f;4. BASE理论了解吗&#xff1f; 分布式锁5. 有哪些分布式锁的实现方案呢&#xff1f;**5.1 MySQL分布式锁如何实现呢&…