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 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一下。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

doris数据模型,06-Aggregate(聚合模型)

聚合模型的特点 将表中的列分为Key和Value。 Key是数据的维度列&#xff0c;比如时间&#xff0c;地区等等。key相同时会发生聚合。 Value是数据的指标列&#xff0c;比如点击量&#xff0c;花费等等。 每个指标列还会有自己的聚合函数&#xff0c;如&#xff1a;sum&#xff…

路由器常见故障分析及处理方法!

对当前的大多数网络来说&#xff0c;无论是实现网络互连还是访问Internet&#xff0c;路由器是不可或缺的。 由于路由器的重要性&#xff0c;对它的管理就成了维护人员的日常工作中重要的一部分&#xff0c;而路由器的故障分析和排除也是令许多维护人员极为困扰的问题之一。 路…

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

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

asp.net core 教程

asp.net core 教程 写在前面新建项目Get和PostGETPOST MVC-模型控制视图如何通俗理解MVC代码实例 API模型&#xff08;前后端分离&#xff09;前端代码后端代码 文件配置优先级优先级顺序 从数据库读取配置文件数据缓存 写在前面 学了快一年多的C#了&#xff01; 我最开始学的…

【数据结构入门精讲 | 第五篇】栈知识点及考研408、企业面试练习

在上一篇中我们进行了表的专项练习&#xff0c;在这篇文章中我们将介绍栈的相关知识点。 目录 基础概念顺序栈链栈判断题选择题填空题函数题R6-1 在一个数组中实现两个堆栈 编程题R7-1 汉诺塔的非递归实现R7-2 表达式转换R7-3 出栈序列的合法性R7-4 包装机R7-1 彩虹瓶 基础概念…

QT TCP通信:用QT制作一个TCPServer与TCPClient的通信

文章目录 前言1. TCP通信原理和流程阐述1.1 TCP 通信原理简述1.2 TCP服务端建立与通信流程1.3 TCP客户端通信流程 2. 关键源码阐述2.1 服务端代码2.2 客户端代码 总结 前言 之前项目上用到了TCP通信&#xff0c;作为TCP的服务端上位机与下位机进行控制信号传输。 这篇博客就对…

<meta name=“Keywords“ content=““ >、<meta name=“Description“ content=““ > 等用法解释

今天在看网站代码&#xff0c;发现类似<meta name"Keywords" content"" >、<meta name"Description" content"" >这样的写法&#xff0c;不知道具体代表什么意思&#xff0c;于是上网搜了一下&#xff0c;下面是在网上找到…

【Linux--信号】

目录 一、信号的概念1.1查看系统的信号1.2信号的处理方式 二、信号的产生方式2.1通过终端按键2.2kill命令2.3系统调用2.4软条件产生信号2.5硬件异常产生信号 三、信号的保存3.1概念的认识3.2sigset_t3.3信号集操作函数3.4sigprocmask && sigpending3.4.1sigprocmask3.4…

Java基础回顾——JDBC

文章目录 介绍使用JDBC事务JDBC BatchJDBC连接池 介绍 Java为关系数据库定义了一套标准的访问接口&#xff1a;JDBC&#xff08;Java Database Connectivity&#xff09; JDBC是Java程序访问数据库的标准接口 好处&#xff1a; 各数据库厂商使用相同的接口&#xff0c;Java…

udp广播的例子

以下是一个使用C语言描述广播发送和接收的简单示例&#xff1a; 发送端&#xff08;广播发送&#xff09;&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #inclu…

西南科技大学计算机网络实验二 (IP协议分析与以太网协议分析)

一、实验目的 通过分析由跟踪执行traceroute程序发送和接收捕获得到的IP 数据报,深入研究在IP 数据报中的各种字段,理解IP协议。基于ARP命令和Ethereal进行以太网帧捕获与分析,理解和熟悉ARP协议原理以及以太网帧格式。 二、实验环境 与因特网连接的计算机网络系统;主机操…

往年面试精选题目(前50道)

常用的集合和区别&#xff0c;list和set区别 Map&#xff1a;key-value键值对&#xff0c;常见的有&#xff1a;HashMap、Hashtable、ConcurrentHashMap以及TreeMap等。Map不能包含重复的key&#xff0c;但是可以包含相同的value。 Set&#xff1a;不包含重复元素的集合&#…

使用pytorch神经网络拟合计算模型

一. 内容简介 python调用百度翻译api&#xff0c;将中文论文翻译英文&#xff0c;并保留部分格式 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3数据文件 链接&#xff1a;https://pan.baidu.com/s/1csJOoErGyx77MW_FImVKjg?pwd1234 三.主要流程 3.…

Spring Boot整合MyBatis-Plus框架快速上手

最开始&#xff0c;我们要在Java中使用数据库时&#xff0c;需要使用JDBC&#xff0c;创建Connection、ResultSet等&#xff0c;然后我们又对JDBC的操作进行了封装&#xff0c;创建了许多类似于DBUtil等工具类。再慢慢的&#xff0c;出现了一系列持久层的框架&#xff1a;Hiber…

HBase 超大表迁移、备份、还原、同步演练手册:全量快照 + 实时同步(Snapshot + Replication)不停机迁移方案

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

在x64上构建智能家居(home assistant) (六) 安装Node-RED Companion Integration

点击HACS 搜索node-red 右侧单击后点击安装 安装完成后, 选设备

Spring企业开发核心框架

二、Spring企业开发核心框架 目录 一、框架前言 1. 总体技术体系2. 框架概念和理解 二、Spring Framework简介 1. Spring 和 SpringFramework2. SpringFramework主要功能模块3. SpringFramework 主要优势 三、Spring IoC 容器概念 1. 组件和组件管理概念2. Spring IoC容器和容…

fpga verilog rs232 发送模块实现

RS-232是一种串行通信协议&#xff0c;用于在计算机和其他外部设备之间进行数据传输。RS-232定义了电气特性、信号级别、机械特性和传输速率等规范&#xff0c;为串行通信提供了一种标准化的接口。 RS-232通常使用DB9连接器&#xff0c;用于传输和接收数据、控制信号以及地线连…

1096. 地牢大师(蓝桥杯/bfs宽搜求最小距离)

题目&#xff1a; 1096. 地牢大师 - AcWing题库 输入样例&#xff1a; 3 4 5 S.... .###. .##.. ###.###### ##### ##.## ##...##### ##### #.### ####E1 3 3 S## #E# ###0 0 0输出样例&#xff1a; Escaped in 11 minute(s). Trapped! 思路&#xff1a;bfs&#xff08;三维…

【Midjourney】Midjourney提示词格式详解

目录 &#x1f347;&#x1f347;Midjourney是什么&#xff1f; &#x1f349;&#x1f349;Midjourney怎么用&#xff1f; &#x1f514;&#x1f514;Midjourney提示词格式 &#x1f341; 1.模型版本提示词&#x1f341; 参数 参数详解 应用示例 &#x1f343; 2.风格…