SQLSUGAR自学篇(一):SQLSUGAR连接SQLITE数据库,实现简单的增删改查_sql sugar
背景:
在gitee上发现了神仙仓库,决定拿来试一下,上b站查了各种资料,全是某套皮培训班的资料,遂写下这篇,方便快速了解这个SqlSugar,以及快速上手,本人也是初学者,不喜勿喷,附果糖网官方文档,SqlSugar .Net ORM 5.X 官网 、文档、教程 - SqlSugar 5x - .NET果糖网;果糖网官方仓库 https://gitee.com/dotnetchina/SqlSugar.git
准备工作:
需要在解决方案下安装Nuget包,sqlsugarCore,版本随缘选择,我是选择最新的
创建WPF项目,随便新建一个就行,环境我是.NET8.0
需要创建的文件有:
1、ConnectionConfig.json,配置连接字符串
2、UserData.db ,sqlite的数据库文件
3、SqliteDbHelper.cs,用于解析json文件中存放的数据库路径并且创建SqlSugar连接配置
4、UserInfo.cs,和数据库一一对应的表,我在数据库只放了一张表,所以只有建一个类
文件目录预览
需要注意,json文件和db文件的文件属性需要设置为“如果较新则复制”,他才会生成到根目录的文件夹下
正式开始
1、编写连接字符串
这个./的意思是在根目录下的文件夹
{ \"ConnectionStrings\": { \"SqliteConnection\": \"Data Source=./Config/UserData.db\" }}
2、创建数据库的表头
放了两条初始数据
3、创建对应的类文件
数据库的表头要和类文件一一对应
namespace SqlSugarToSqlite.SqlConfig{ [SugarTable(\"UserInfo\")] // 指定数据库表名 public class UserInfo { /// /// 主键ID,确保IsIdentity=true,且不要手动设置此值 /// [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] public int Id { get; set; } /// /// 索引字段 /// [SugarColumn(ColumnName = \"index\")] // 与数据库字段名映射 public string Index { get; set; } /// /// 用户名 /// public string Username { get; set; } /// /// 年龄 /// public int Age { get; set; } /// /// 邮箱 /// public string Email { get; set; } /// /// 地区 /// public string Region { get; set; } /// /// 电话号码 /// public string Phonenumber { get; set; } /// /// 创建时间 /// public DateTime CreateTime { get; set; } = DateTime.Now; }}
4、编写SqlitDbHelper
主要是实现json文件解析,核心是创建Sqlsugar连接配置,如果不想写这么多,直接给出数据库的路径给到dbPath即可
_db = new SqlSugarClient(new ConnectionConfig
{
ConnectionString = $\"Data Source={dbPath}\",
DbType = DbType.Sqlite,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute
});
namespace SqlSugarToSqlite.SqlConfig{ public class SqliteDbHelper { private static SqlSugarClient _db; private static readonly object LockObject = new object(); public static SqlSugarClient Db { get { if (_db == null) { lock (LockObject) { if (_db == null) { InitializeDb(); } } } return _db; } } private static void InitializeDb() { try { // 读取配置文件 string configPath = Path.Combine( Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), \"Config\", \"ConnectionConfig.json\"); if (!File.Exists(configPath)) { throw new FileNotFoundException(\"找不到数据库配置文件\", configPath); } // 解析JSON配置 dynamic config = Newtonsoft.Json.JsonConvert.DeserializeObject(File.ReadAllText(configPath)); string connectionString = config.ConnectionStrings.SqliteConnection.ToString(); // 确保数据库文件路径正确 string dbPath = connectionString.Split(\'=\')[1].Split(\';\')[0].Trim(); if (!Path.IsPathRooted(dbPath)) { dbPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), dbPath); } if (!File.Exists(dbPath)) { throw new FileNotFoundException(\"找不到SQLite数据库文件\", dbPath); } // 创建SqlSugar连接配置 _db = new SqlSugarClient(new ConnectionConfig { ConnectionString = $\"Data Source={dbPath}\", DbType = DbType.Sqlite, IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute }); } catch (Exception ex) { Console.WriteLine($\"数据库初始化失败: {ex.Message}\"); throw; } } }}
5、选择连接方式
可以选择在app加载的时候直接开始连接,也可以通过按钮来连接,我使用的是一进入程序就自己连接,要在app.cs文件中编写
namespace SqlSugarToSqlite{ /// /// Interaction logic for App.xaml /// public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { try { // 初始化数据库连接 var db = SqlConfig.SqliteDbHelper.Db; } catch (Exception ex) { MessageBox.Show($\"数据库连接失败: {ex.Message}\", \"错误\", MessageBoxButton.OK, MessageBoxImage.Error); Shutdown(); return; } base.OnStartup(e); } }}
通过按钮点击事件来连接
private void Button_Click(object sender, RoutedEventArgs e) { var db = SqlConfig.SqliteDbHelper.Db; var users = db.Queryable().ToList(); us_Datagrid.ItemsSource = users; }
6、基本界面制作,实现增删改查
6.1 基本页面制作
这个页面由datagrid(展示数据库中的内容),几个TextBox(对应更改的内容),和四个增删改查的按钮,以及一个模糊查询的textbox
MainWindow的xaml代码:
MainWindow的cs代码
using SqlSugarToSqlite.SqlConfig;using System.Text;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;namespace SqlSugarToSqlite{ /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); LoadUserData(); this.us_Datagrid.SelectionChanged += us_Datagrid_SelectionChanged; } private void LoadUserData() { try { var db = SqliteDbHelper.Db; var users = db.Queryable().ToList(); us_Datagrid.ItemsSource = users; } catch (Exception ex) { MessageBox.Show($\"加载数据失败: {ex.Message}\", \"错误\",MessageBoxButton.OK, MessageBoxImage.Error); } } private void us_Datagrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { var selectedUser = us_Datagrid.SelectedItem as UserInfo; if (selectedUser != null) { Id_Text.Text = selectedUser.Index; UserName_Text.Text = selectedUser.Username; Age_Text.Text = selectedUser.Age.ToString(); Email_Text.Text = selectedUser.Email; Region_Text.Text = selectedUser.Region; PhoneNumber_Text.Text = selectedUser.Phonenumber; } } private void Add_Click(object sender, RoutedEventArgs e) { try { var newUser = new UserInfo { Index = Id_Text.Text, Username = UserName_Text.Text, Age = int.Parse(Age_Text.Text), Email = Email_Text.Text, Region = Region_Text.Text, Phonenumber = PhoneNumber_Text.Text, CreateTime = DateTime.Now }; var db = SqliteDbHelper.Db; db.Insertable(newUser).ExecuteCommand(); MessageBox.Show(\"用户添加成功\", \"成功\",MessageBoxButton.OK, MessageBoxImage.Information); LoadUserData(); } catch (Exception ex) { MessageBox.Show($\"添加用户失败: {ex.Message}\", \"错误\",MessageBoxButton.OK, MessageBoxImage.Error); } } private void Remove_Click(object sender, RoutedEventArgs e) { // 获取选中的用户 var selectedUser = us_Datagrid.SelectedItem as UserInfo; if (selectedUser == null) { MessageBox.Show(\"请先选择要删除的用户\", \"提示\",MessageBoxButton.OK, MessageBoxImage.Warning); return; } // 确认删除 if (MessageBox.Show($\"确定要删除用户 \'{selectedUser.Username}\' 吗?\", \"确认删除\", MessageBoxButton.YesNo, MessageBoxImage.Question) != MessageBoxResult.Yes) { return; } try { var db = SqliteDbHelper.Db; // 执行删除 int affectedRows = db.Deleteable(selectedUser).ExecuteCommand(); if (affectedRows > 0) { MessageBox.Show(\"用户删除成功\", \"成功\", MessageBoxButton.OK, MessageBoxImage.Information); LoadUserData(); // 重新加载数据 } else { MessageBox.Show(\"用户删除失败,可能已被其他操作删除\", \"错误\",MessageBoxButton.OK, MessageBoxImage.Error); } } catch (Exception ex) { MessageBox.Show($\"删除用户失败: {ex.Message}\", \"错误\",MessageBoxButton.OK, MessageBoxImage.Error); } } private void Change_Click(object sender, RoutedEventArgs e) { // 获取选中的用户 var selectedUser = us_Datagrid.SelectedItem as UserInfo; if (selectedUser == null) { MessageBox.Show(\"请先选择要修改的用户\", \"提示\",MessageBoxButton.OK, MessageBoxImage.Warning); return; } try { // 更新用户信息 selectedUser.Index = Id_Text.Text; selectedUser.Username = UserName_Text.Text; selectedUser.Age = int.Parse(Age_Text.Text); selectedUser.Email = Email_Text.Text; selectedUser.Region = Region_Text.Text; selectedUser.Phonenumber = PhoneNumber_Text.Text; selectedUser.CreateTime = DateTime.Now; var db = SqliteDbHelper.Db; // 执行更新 int affectedRows = db.Updateable(selectedUser).ExecuteCommand(); if (affectedRows > 0) { MessageBox.Show(\"用户信息修改成功\", \"成功\", MessageBoxButton.OK, MessageBoxImage.Information); LoadUserData(); // 重新加载数据 } else { MessageBox.Show(\"用户信息修改失败,数据未变更\", \"错误\", MessageBoxButton.OK, MessageBoxImage.Error); } } catch (Exception ex) { MessageBox.Show($\"修改用户失败: {ex.Message}\", \"错误\", MessageBoxButton.OK, MessageBoxImage.Error); } } private void Search_Click(object sender, RoutedEventArgs e) { string searchKeyword = Search_Text.Text.Trim(); if (string.IsNullOrEmpty(searchKeyword)) { // 无搜索关键词时显示全部数据 LoadUserData(); return; } try { var db = SqliteDbHelper.Db; // 多字段模糊查询(Index、Username、Email、Region、Phonenumber) var users = db.Queryable() .Where(u => u.Index.Contains(searchKeyword) || u.Username.Contains(searchKeyword) || u.Email.Contains(searchKeyword) || u.Region.Contains(searchKeyword) || u.Phonenumber.Contains(searchKeyword) ) .ToList(); us_Datagrid.ItemsSource = users; MessageBox.Show($\"共找到 {users.Count} 条匹配记录\", \"搜索结果\",MessageBoxButton.OK, MessageBoxImage.Information); } catch (Exception ex) { MessageBox.Show($\"搜索失败: {ex.Message}\", \"错误\",MessageBoxButton.OK, MessageBoxImage.Error); } } }}
运行画面如下所示
6.2 增加功能
通过在文本框输入内容之后,点击按钮增加即可,按钮逻辑,附果糖网链接,插入 、插入 教程、新增数据 、添加数据 - SqlSugar 5x - .NET果糖网
private void Add_Click(object sender, RoutedEventArgs e) { try { var newUser = new UserInfo { Index = Id_Text.Text, Username = UserName_Text.Text, Age = int.Parse(Age_Text.Text), Email = Email_Text.Text, Region = Region_Text.Text, Phonenumber = PhoneNumber_Text.Text, CreateTime = DateTime.Now }; var db = SqliteDbHelper.Db; db.Insertable(newUser).ExecuteCommand(); MessageBox.Show(\"用户添加成功\", \"成功\",MessageBoxButton.OK, MessageBoxImage.Information); LoadUserData(); } catch (Exception ex) { MessageBox.Show($\"添加用户失败: {ex.Message}\", \"错误\",MessageBoxButton.OK, MessageBoxImage.Error); } }
实现效果
6.3 删除功能
通过选中datagrid的当前行后点击删除按钮就行删除操作,附果糖网官方链接 普通删除 、单表删除、表达式删除 用法 - SqlSugar 5x - .NET果糖网
private void Remove_Click(object sender, RoutedEventArgs e){ // 获取选中的用户 var selectedUser = us_Datagrid.SelectedItem as UserInfo; if (selectedUser == null) { MessageBox.Show(\"请先选择要删除的用户\", \"提示\",MessageBoxButton.OK, MessageBoxImage.Warning); return; } // 确认删除 if (MessageBox.Show($\"确定要删除用户 \'{selectedUser.Username}\' 吗?\", \"确认删除\", MessageBoxButton.YesNo, MessageBoxImage.Question) != MessageBoxResult.Yes) { return; } try { var db = SqliteDbHelper.Db; // 执行删除 int affectedRows = db.Deleteable(selectedUser).ExecuteCommand(); if (affectedRows > 0) { MessageBox.Show(\"用户删除成功\", \"成功\", MessageBoxButton.OK, MessageBoxImage.Information); LoadUserData(); // 重新加载数据 } else { MessageBox.Show(\"用户删除失败,可能已被其他操作删除\", \"错误\",MessageBoxButton.OK, MessageBoxImage.Error); } } catch (Exception ex) { MessageBox.Show($\"删除用户失败: {ex.Message}\", \"错误\",MessageBoxButton.OK, MessageBoxImage.Error); }}
运行效果
6.4 更改功能
通过选中按钮来对当前行进行修改,单表更新、更新数据 - SqlSugar 5x - .NET果糖网
private void Change_Click(object sender, RoutedEventArgs e) { // 获取选中的用户 var selectedUser = us_Datagrid.SelectedItem as UserInfo; if (selectedUser == null) { MessageBox.Show(\"请先选择要修改的用户\", \"提示\",MessageBoxButton.OK, MessageBoxImage.Warning); return; } try { // 更新用户信息 selectedUser.Index = Id_Text.Text; selectedUser.Username = UserName_Text.Text; selectedUser.Age = int.Parse(Age_Text.Text); selectedUser.Email = Email_Text.Text; selectedUser.Region = Region_Text.Text; selectedUser.Phonenumber = PhoneNumber_Text.Text; selectedUser.CreateTime = DateTime.Now; var db = SqliteDbHelper.Db; // 执行更新 int affectedRows = db.Updateable(selectedUser).ExecuteCommand(); if (affectedRows > 0) { MessageBox.Show(\"用户信息修改成功\", \"成功\", MessageBoxButton.OK, MessageBoxImage.Information); LoadUserData(); // 重新加载数据 } else { MessageBox.Show(\"用户信息修改失败,数据未变更\", \"错误\", MessageBoxButton.OK, MessageBoxImage.Error); } } catch (Exception ex) { MessageBox.Show($\"修改用户失败: {ex.Message}\", \"错误\", MessageBoxButton.OK, MessageBoxImage.Error); } }
运行效果
6.5 查询功能
使用了模糊匹配查询的功能,匹配到相同的字段就会展示出来,简单的 查询 - SqlSugar 5x - .NET果糖网
private void Search_Click(object sender, RoutedEventArgs e){ string searchKeyword = Search_Text.Text.Trim(); if (string.IsNullOrEmpty(searchKeyword)) { // 无搜索关键词时显示全部数据 LoadUserData(); return; } try { var db = SqliteDbHelper.Db; // 多字段模糊查询(Index、Username、Email、Region、Phonenumber) var users = db.Queryable() .Where(u => u.Index.Contains(searchKeyword) || u.Username.Contains(searchKeyword) || u.Email.Contains(searchKeyword) || u.Region.Contains(searchKeyword) || u.Phonenumber.Contains(searchKeyword) ) .ToList(); us_Datagrid.ItemsSource = users; MessageBox.Show($\"共找到 {users.Count} 条匹配记录\", \"搜索结果\",MessageBoxButton.OK, MessageBoxImage.Information); } catch (Exception ex) { MessageBox.Show($\"搜索失败: {ex.Message}\", \"错误\",MessageBoxButton.OK, MessageBoxImage.Error); }}