深圳市由你创科技有限公司 -- 软件行业的源头工厂

选择语言
  • 实验室自动化
  • FPGA 开发
  • 嵌入式板卡定制
  • 上位机
  • SCADA定制开发
  • 工业软件开发
  • 物联网开发
  • IT信息系统开发
  • 安卓系统开发
  • Windows系统开发
  • 鸿蒙系统开发
  • 创新研发
  • 工业互联网
  • 智慧医疗
  • 智慧城市
  • 智慧农业
  • 系统集成

24小时咨询热线:

18138869082

软件开发_上位机开发_物联网开发_APP开发_深圳软件定制开发公司 软件开发_上位机开发_物联网开发_APP开发_深圳软件定制开发公司
首页 / 新闻 / 关于WPF如何连接SQLite或MySQL数据库进行简单增删改查

关于WPF如何连接SQLite或MySQL数据库进行简单增删改查

作者:由你创 发布时间: 2024-12-19 阅读量:61

以下是使用 Visual Studio WPF 项目来连接数据库操作人物角色数据的完整教程,使用 SQLite 和 MySQL 两种数据库的实现方案。你可以选择其中一种,根据你的需求实施。


步骤 1:环境准备

  1. 安装 Visual Studio
    确保已安装 Visual Studio,并选择支持 WPF 的 .NET 框架 开发功能。
  2. 创建 WPF 项目
    • 启动 Visual Studio,选择 新建项目 > WPF 应用程序
    • 选择目标框架(如 .NET 6 或 .NET Framework)。
  3. 安装数据库驱动程序
    • 如果使用 SQLite
      打开 NuGet 包管理器,搜索并安装 System.Data.SQLite
    • 如果使用 MySQL
      搜索并安装 MySql.Data 或 MySqlConnector
  4. 安装数据库管理工具,例如Navicat等,以及安装对应版本MySQL。
  5. 创建数据库和表
    准备一个数据库文件或者数据库实例,创建存储角色数据的表。

步骤 2:SQLite 实现

1. 创建数据库和表

创建一个 SQLite 数据库文件(如 genshin.db),并用工具或代码创建表 Characters

SQL 示例:

CREATE TABLE Characters (
    Id INT AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR(255) NOT NULL,
    Element VARCHAR(255) NOT NULL,
    Rarity INT NOT NULL
) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

2. 设计 WPF 界面

在 MainWindow.xaml 中设计界面,允许用户输入角色数据并执行增删改查操作。

<Window x:Class="GenshinDatabaseApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="角色管理" Height="450" Width="800">
    <Grid Margin="10">
        <StackPanel Orientation="Vertical" HorizontalAlignment="Center">
            <TextBox x:Name="NameBox" Width="200" PlaceholderText="角色名" Margin="5"/>
            <TextBox x:Name="ElementBox" Width="200" PlaceholderText="元素" Margin="5"/>
            <TextBox x:Name="RarityBox" Width="200" PlaceholderText="稀有度 (1-5)" Margin="5"/>
            <Button Content="添加角色" Width="200" Click="AddCharacter_Click" Margin="5"/>
            <Button Content="更新角色" Width="200" Click="UpdateCharacter_Click" Margin="5"/>
            <Button Content="删除角色" Width="200" Click="DeleteCharacter_Click" Margin="5"/>
            <Button Content="查询角色" Width="200" Click="SearchCharacter_Click" Margin="5"/>
        </StackPanel>
        <DataGrid x:Name="CharacterGrid" AutoGenerateColumns="True" Margin="10,200,10,10" />
    </Grid>
</Window>

3. 后端代码

在 MainWindow.xaml.cs 中实现增删改查逻辑。

using System;
using System.Collections.ObjectModel;
using System.Data.SQLite;
using System.Windows;

namespace GenshinDatabaseApp
{
    public partial class MainWindow : Window
    {
        private string connectionString = "Data Source=genshin.db";

        public ObservableCollection<Character> Characters { get; set; }

        public MainWindow()
        {
            InitializeComponent();
            Characters = new ObservableCollection<Character>();
            CharacterGrid.ItemsSource = Characters;
            LoadCharacters();
        }

        private void LoadCharacters()
        {
            Characters.Clear();
            using (var connection = new SQLiteConnection(connectionString))
            {
                connection.Open();
                string query = "SELECT * FROM Characters";
                using (var command = new SQLiteCommand(query, connection))
                using (var reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        Characters.Add(new Character
                        {
                            Id = reader.GetInt32(0),
                            Name = reader.GetString(1),
                            Element = reader.GetString(2),
                            Rarity = reader.GetInt32(3)
                        });
                    }
                }
            }
        }

        private void AddCharacter_Click(object sender, RoutedEventArgs e)
        {
            using (var connection = new SQLiteConnection(connectionString))
            {
                connection.Open();
                string query = "INSERT INTO Characters (Name, Element, Rarity) VALUES (@Name, @Element, @Rarity)";
                using (var command = new SQLiteCommand(query, connection))
                {
                    command.Parameters.AddWithValue("@Name", NameBox.Text);
                    command.Parameters.AddWithValue("@Element", ElementBox.Text);
                    command.Parameters.AddWithValue("@Rarity", int.Parse(RarityBox.Text));
                    command.ExecuteNonQuery();
                }
            }
            LoadCharacters();
        }

        private void UpdateCharacter_Click(object sender, RoutedEventArgs e)
        {
            if (CharacterGrid.SelectedItem is Character selectedCharacter)
            {
                using (var connection = new SQLiteConnection(connectionString))
                {
                    connection.Open();
                    string query = "UPDATE Characters SET Name=@Name, Element=@Element, Rarity=@Rarity WHERE Id=@Id";
                    using (var command = new SQLiteCommand(query, connection))
                    {
                        command.Parameters.AddWithValue("@Name", NameBox.Text);
                        command.Parameters.AddWithValue("@Element", ElementBox.Text);
                        command.Parameters.AddWithValue("@Rarity", int.Parse(RarityBox.Text));
                        command.Parameters.AddWithValue("@Id", selectedCharacter.Id);
                        command.ExecuteNonQuery();
                    }
                }
                LoadCharacters();
            }
        }

        private void DeleteCharacter_Click(object sender, RoutedEventArgs e)
        {
            if (CharacterGrid.SelectedItem is Character selectedCharacter)
            {
                using (var connection = new SQLiteConnection(connectionString))
                {
                    connection.Open();
                    string query = "DELETE FROM Characters WHERE Id=@Id";
                    using (var command = new SQLiteCommand(query, connection))
                    {
                        command.Parameters.AddWithValue("@Id", selectedCharacter.Id);
                        command.ExecuteNonQuery();
                    }
                }
                LoadCharacters();
            }
        }

        private void SearchCharacter_Click(object sender, RoutedEventArgs e)
        {
            Characters.Clear();
            using (var connection = new SQLiteConnection(connectionString))
            {
                connection.Open();
                string query = "SELECT * FROM Characters WHERE Name LIKE @Name";
                using (var command = new SQLiteCommand(query, connection))
                {
                    command.Parameters.AddWithValue("@Name", $"%{NameBox.Text}%");
                    using (var reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            Characters.Add(new Character
                            {
                                Id = reader.GetInt32(0),
                                Name = reader.GetString(1),
                                Element = reader.GetString(2),
                                Rarity = reader.GetInt32(3)
                            });
                        }
                    }
                }
            }
        }
    }

    public class Character
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Element { get; set; }
        public int Rarity { get; set; }
    }
}

步骤 3:运行程序

  1. 确保 genshin.db 文件存在于项目根目录中,并已包含 Characters 表。
  2. 运行 WPF 应用程序,可以通过界面添加、修改、删除和查询角色信息。

MySQL 实现

如果需要使用 MySQL,将 SQLiteConnection 替换为 MySqlConnection,并调整连接字符串为:

string connectionString = "Server=your_server;Database=genshin.sql;User=your_user;Password=your_password;";

其余逻辑与 SQLite 类似。

推荐字符集和排序规则

  1. 字符集utf8mb4
    • utf8mb4 是 MySQL 8.0 推荐的字符集,它支持 Unicode 完整字符集,包括多字节字符和表情符号(Emoji)。
  2. 排序规则:根据需求选择以下之一:
    • 通用排序规则utf8mb4_general_ci
      适合大部分普通应用,排序和比较效率较高。
    • 准确排序规则utf8mb4_unicode_ci
      遵循 Unicode 排序规则,支持多语言排序,但性能略逊于 utf8mb4_general_ci
    • 区分大小写utf8mb4_bin
      精确比较,区分大小写,适用于需要精确匹配的场景。

创建数据库的 SQL 示例

CREATE DATABASE genshin_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

选用排序规则的考虑

  • utf8mb4_general_ci
    • 不区分大小写(Case Insensitive)。
    • 性能较好,适合通用性需求。
    • 不完全遵循 Unicode 标准,排序结果可能略有偏差。
  • utf8mb4_unicode_ci
    • 不区分大小写(Case Insensitive)。
    • 完全遵循 Unicode 排序规则,支持更准确的多语言排序。
    • 性能略低于 utf8mb4_general_ci
  • utf8mb4_bin
    • 区分大小写(Case Sensitive)。
    • 精确比较,适合密码存储、唯一标识符等场景。

希望这篇文章能帮助你快速上手开发,顺利实现 WPF 程序对数据库的增删改查管理角色数据!

总访问量:8235080    今日访问量:10645    您是今天第:10645 位访问者