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

相关推荐
倔强的石头_4 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou641 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
于眠牧北1 天前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
李广坤2 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
Turnip12023 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql
爱可生开源社区3 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1773 天前
《从零搭建NestJS项目》
数据库·typescript
加号34 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏4 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐4 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端