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

相关推荐
长征coder3 分钟前
AWS MySQL 读写分离配置指南
mysql·云计算·aws
醇醛酸醚酮酯18 分钟前
Qt项目锻炼——TODO清单(二)
开发语言·数据库·qt
ladymorgana38 分钟前
【docker】修改 MySQL 密码后 Navicat 仍能用原密码连接
mysql·adb·docker
PanZonghui41 分钟前
Centos项目部署之安装数据库MySQL8
linux·后端·mysql
GreatSQL社区1 小时前
用systemd管理GreatSQL服务详解
数据库·mysql·greatsql
掘根1 小时前
【MySQL进阶】错误日志,二进制日志,mysql系统库
数据库·mysql
weixin_438335401 小时前
基础知识:mysql-connector-j依赖
数据库·mysql
小明铭同学1 小时前
MySQL 八股文【持续更新ing】
数据库·mysql
Mr_Xuhhh1 小时前
信号与槽的总结
java·开发语言·数据库·c++·qt·系统架构
Fireworkitte1 小时前
Redis 源码 tar 包安装 Redis 哨兵模式(Sentinel)
数据库·redis·sentinel