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

news2024/9/24 5:26:25

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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 string
        string ConnectionString = "Driver={MySQL ODBC 5.2 Unicode Driver};Server=127.0.0.1;Database=member;User=root;Password=123456;";

        public MainWindow()
        {
            InitializeComponent();
        }

        // read operation
        private 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 operation
        private void InsertDataToDatabase()
        {
            try
            {
                using (OdbcConnection connection = new OdbcConnection(ConnectionString))
                {
                    connection.Open();

                    // execute insert
                    string 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 operation
        private void UpdateDataInDatabase()
        {
            try
            {
                using (OdbcConnection connection = new OdbcConnection(ConnectionString))
                {
                    connection.Open();

                    // execute update
                    string 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 operation
        private void DeleteDataFromDatabase()
        {
            try
            {
                using (OdbcConnection connection = new OdbcConnection(ConnectionString))
                {
                    connection.Open();

                    // execute delete
                    string 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 callback
        private void FetchDataButton_Click(object sender, RoutedEventArgs e)
        {
            FetchDataFromDatabase();
        }

        // insert button callback
        private void InsertDataButton_Click(object sender, RoutedEventArgs e)
        {
            InsertDataToDatabase();
        }

        // update button callback
        private void UpdateDataButton_Click(object sender, RoutedEventArgs e)
        {
            UpdateDataInDatabase();
        }

        //  delete button callback
        private void DeleteDataButton_Click(object sender, RoutedEventArgs e)
        {
            DeleteDataFromDatabase();
        }
    }
}

6、编译和测试

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1335188.html

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

相关文章

overleaf 支持中文

基本操作 左上角menu中&#xff0c;切换compiler 到xelatex。 然后在\documentclass声明下面加一个 \usepackage{ctex}。 使用\usepackage{xecjk}可能也可以&#xff0c;但会有警告。 警告分析 Font “FandolSong-Regular” does not contain requested Script “CJK”。 网上…

智能优化算法应用:基于协作搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于协作搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于协作搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.协作搜索算法4.实验参数设定5.算法结果6.…

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

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

【RocketMQ笔记01】安装RocketMQ消息队列运行环境

这篇文章&#xff0c;主要介绍如何安装RocketMQ消息队列运行环境。 目录 一、RocketMQ消息队列 1.1、下载RocketMQ 1.2、解压安装包 1.3、配置RocketMQ环境变量 1.4、修改启动脚本 1.5、启动RocketMQ &#xff08;1&#xff09;启动NameServer &#xff08;2&#xff0…

【MATLAB】史上最全的17种信号分解+FFT+HHT组合算法全家桶

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 1 【MATLAB】EMD 信号分解算法 EMD 是一种信号分解方法&#xff0c;它将一个信号分解成有限个本质模态函数 (EMD) 的和&#xff0c;每个 EMD 都是具有局部特征的振动模式。EMD 分解的主要步骤如下&#xff1a; 将信号的…

嵌入式开发常见的3个C语言技巧

​1.操作寄存器 在嵌入式开发中&#xff0c;常常要操作寄存器&#xff0c;对寄存器进行写入&#xff0c;读出等等操作。每个寄存器都有自己固有的地址&#xff0c;通过C语言访问这些地址就变得尤为重要。 #define GSTATUS1 (*(volatile unsigned int *)0x560000B0)在这里…

Http---HTTP协议

1. HTTP 协议的介绍 HTTP 协议的全称是(HyperText Transfer Protocol)&#xff0c;翻译过来就是超文本传输协议。 超文本是超级文本的缩写&#xff0c;是指超越文本限制或者超链接&#xff0c;比如:图片、音乐、视频、超链接等等都属于超文本。 HTTP 协议的制作者是蒂姆伯纳…

虚继承解决菱形继承的原理

菱形继承的问题&#xff0c;是由多重继承的父类祖先是同一个父类导致的。如下面的情况&#xff1a; 菱形继承&#xff0c;会导致同名成员的二义性问题和数据冗余问题&#xff0c;用下面的代码来测试&#xff1a; class A { public:int _a; }; // class B : public A class B :…

数字化协同在服装行业:监狱服装生产的量身解决方案

内容来自演讲&#xff1a;苗子实 | 北京宜通华瑞科技有限公司 | 产品经理 摘要 这篇文章介绍了宜通世纪子公司北京宜通华瑞在服装行业智能制造方面的业务&#xff0c;以及明道云提供的业务支持。文章提到了服装行业的痛点及解决方案&#xff0c;并详细介绍了优化监狱服装企业的…

智能优化算法应用:基于人工蜂鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于人工蜂鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于人工蜂鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.人工蜂鸟算法4.实验参数设定5.算法结果6.…

Jave EE 网络原理之网络层与数据链路层

文章目录 1. 网络层1.1 IP 协议1.1.1 协议头格式1.1.2 地址管理1.1.2.1 认识 IP 地址 1.1.3 路由选择 2. 数据链路层2.1 认识以太网2.1.1 以太网帧格式2.1.2 DNS 应用层协议 1. 网络层 网络层要做的事情&#xff0c;主要是两个方面 地址管理 &#xff08;制定一系列的规则&am…

Discrete Time Signals and Systems

Discrete Time Signals and Systems 文章目录 Discrete Time Signals and SystemsSignal classificationbasic signalOperation on signalSystem of discrete signalLinear systems and nonlinear systemsCausal and non-causal SystemsTime-varying and time-invariant system…

ripro最新修正升级完美版,无加密无后门无需扩展,修复多处bug

这个应该是目前最完美的ripro开源版了。 最近更新&#xff1a; 2023-12-17 修正了jsdelivr.net被墙导致后台静态资源无法加载的bug&#xff08;具体表现就是登录后台一直转圈&#xff0c;图标显示不了&#xff09;。 2023-7-05 修正了几个bug。 2022-12-05 修正了虎皮椒支付…

《C++避坑神器·二十四》简单搞懂json文件的读写之根据键值对读写Json

c11 json解析库nlohmann/json.hpp文件整个代码由一个头文件组成 json.hpp&#xff0c;没有子项目&#xff0c;没有依赖关系&#xff0c;没有复杂的构建系统&#xff0c;使用起来非常方便。 json.hpp库在文章末尾下载 读写主要有两种方式&#xff0c;第一种根据键值对读写&…

隔壁小孩馋哭了都要问我要的MySQL数据库攻略

1 Mysql数据库 1.1 数据库概念 数据 描述事物的符号记录 包括数字、文字、图形、图像声音、档案记录等 以“记录”形式按统一的格式进行存储 表 将不同的记录组织在一起 用来存储具体数据 数据库 标的合集&#xff0c;是存储数据的仓库 以定的组织方式存储打的相互有…

单片机原理及应用:Keil μVision4和Proteus 8的配置介绍

笔者所在的专业最近开设了单片机课程&#xff0c;对笔者而言&#xff0c;虽然之前有一定的代码基础。但还是第一次面对既要求代码架构又要求电路仿真的领域。为了巩固知识和增强记忆&#xff0c;特此创建了这个专栏&#xff0c;谨以一名非电专业初学者的身份记录和分享知识。 …

【软件工程】可执行文件和数据分离

一、概述 可执行文件和数据分离是一种软件设计策略&#xff0c;旨在将程序代码和程序使用的数据分离存储。这种方法通常用于提高软件的模块化程度和灵活性&#xff0c;以及方便软件的管理和维护。 在可执行文件和数据分离中&#xff0c;程序代码通常以可执行文件的形式存储&a…

.net6使用Sejil可视化日志

&#xff08;关注博主后&#xff0c;在“粉丝专栏”&#xff0c;可免费阅读此文&#xff09; 之前介绍了这篇.net 5使用LogDashboard_.net 5logdashboard rootpath-CSDN博客 这篇文章将会更加的简单&#xff0c;最终的效果都是可视化日志。 在程序非常庞大的时候&…

搬运机器人RFID传感器CNS-RFID-01|1S的RS485(MODBUS|HS协议)通讯连接方法

搬运机器人RFID传感器CNS-RFID-01|1S支持RS485通信&#xff0c;可支持RS485&#xff08;MODBUS RTU&#xff09;协议、RS485-HS协议&#xff0c;广泛应用于物流仓储&#xff0c;立库 AGV|无人叉车|搬送机器人等领域&#xff0c;常用定位、驻车等&#xff0c;本篇重点介绍CNS-RF…

智能优化算法应用:基于人工兔算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于人工兔算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于人工兔算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.人工兔算法4.实验参数设定5.算法结果6.参考文…