以下是使用 Visual Studio WPF 项目来连接数据库操作人物角色数据的完整教程,使用 SQLite 和 MySQL 两种数据库的实现方案。你可以选择其中一种,根据你的需求实施。
.NET 框架
开发功能。.NET 6
或 .NET Framework
)。创建一个 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;
在 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>
在 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; }
}
}
genshin.db
文件存在于项目根目录中,并已包含 Characters
表。如果需要使用 MySQL,将 SQLiteConnection
替换为 MySqlConnection
,并调整连接字符串为:
string connectionString = "Server=your_server;Database=genshin.sql;User=your_user;Password=your_password;";
其余逻辑与 SQLite 类似。
utf8mb4
utf8mb4
是 MySQL 8.0 推荐的字符集,它支持 Unicode 完整字符集,包括多字节字符和表情符号(Emoji)。utf8mb4_general_ci
utf8mb4_unicode_ci
utf8mb4_general_ci
。utf8mb4_bin
CREATE DATABASE genshin_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
utf8mb4_general_ci
:
utf8mb4_unicode_ci
:
utf8mb4_general_ci
。utf8mb4_bin
:
希望这篇文章能帮助你快速上手开发,顺利实现 WPF 程序对数据库的增删改查管理角色数据!
MCU驱动TF-card具体实现
嵌入式开发中, 经常会有主控板识别TF卡+读取数据+写入数据的 需求, 下面尽量用简介的描述详细说明一下, 相 […]
关于WPF如何连接SQLite或MySQL数据库进行简单增删改查
以下是使用 Visual Studio WPF 项目来连接数据库操作人物角色数据的完整教程,使用 SQLite […]
Python爬虫的运行效率过低该怎么处理
一、网络请求优化 根据网络和目标网站响应速度设置合理超时时间,避免过长等待或因过短而频繁超时。 二、数据解析优 […]
Python识别空气断路器开状态
先说背景:在一个控制室里面有很多空气断路器,在不通过外接其它设备去监听这个开关的状态,可以通过高清摄像头去做图 […]
scada数据采集与监视控制系统定制开发
SCADA系统,即监控与数据采集系统,是一种在工业自动化领域中扮演着至关重要角色的自动化系统。它能够实时采集工 […]
关于C#上位机程序与PLC通讯的几种实现方式
在工业自动化中,上位机程序与 PLC(可编程逻辑控制器)之间的通信是至关重要的。正确的通讯方式可以提高系统的稳 […]
开源鸿蒙适配器KHP-系列硬件设备产测功能开发
案例背景 开源鸿蒙适配器KHP-系列的硬件设备的产测功能开发。实现了KHP-IC500设备在出厂前测试硬件功能 […]
产品缺陷智能拍照检测分析控制系统管理软件定制开发
案例背景 系统在接受到传感器信号后,根据相机配置信息,调用相应机位的相机进行拍照。系统获取照片后调用,单图判定 […]
实验室智能分析检测仪控制管理系统上位机软件开发
案例背景 智能连续流动分析仪是将比色分析自动化的一种分析测试系统。样品溶液泵入分析模块后可以自动进行样品前处理 […]
智能饲喂控制管理系统软件定制开发
案例背景 液态智能饲喂控制系统是一种现代化的饲喂方式,它使用液体饲料代替传统的固体饲料,为动物提供更营养、更健 […]
工业自动化机械臂多自由度智能操作系统嵌入式定制开发
案例背景 为了评估多自由度机械臂的性能和稳定性,以便在实际生产中更好地应用。在使用机械臂之前,需要对机械臂的性 […]
工厂MES生产线SCADA数据采集监控管理系统软件开发
案例背景 客户是一家以锂电智能装备研发生产的企业,现场产线设备自动化程度较高,现有大部分设备未能实现实时联动, […]
联系电话:
电子邮箱:unczzb@unicrom.cn
深圳研发中心(总部): 深圳市龙华区港深国际中心十楼E区
太原研发中心: 山西省太原市万迎泽西大街120号时代天峰1918室
上海办事处: 上海市浦东新区牡丹路60号,东辰大厦7楼702室
扫一扫,关注由你创科技