暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

C# SQLite SqlSugar 应用指南

技术老小子 2025-03-06
1037

SqlSugar是一个非常强大且轻量级的ORM(对象关系映射)框架,支持多种数据库,包括SQLite。本文将详细介绍如何在C#中使用SqlSugar操作SQLite数据库。

准备工作

安装NuGet包

首先,需要安装以下NuGet包:

  • SqlSugarCore
  • System.Data.SQLite.Core

可以通过NuGet包管理器或Package Manager Console安装:

Install-Package SqlSugarCore
Install-Package System.Data.SQLite.Core

基本配置

数据库连接配置

using SqlSugar;

publicclass DatabaseConfig
{

    public static SqlSugarClient GetClient()
    
{
        SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
        {
            ConnectionString = "Data Source=mydatabase.sqlite"// SQLite数据库路径
            DbType = DbType.Sqlite, // 指定数据库类型为SQLite
            IsAutoCloseConnection = true// 自动释放连接
            InitKeyType = InitKeyType.Attribute // 主键配置方式
        });

        // 开启SQL执行日志
        db.Aop.OnLogExecuting = (sql, pars) =>
        {
            Console.WriteLine(sql); // 打印SQL语句
        };

        return db;
    }
}

实体类定义

使用特性标记

using SqlSugar;

// 用户实体类
[SugarTable("Users")] // 指定表名
publicclass User
{

    [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
    publicint Id { get; set; }

    [SugarColumn(ColumnName = "username")]
    publicstring Username { get; set; }

    [SugarColumn(ColumnName = "email")]
    publicstring Email { get; set; }

    [SugarColumn(ColumnName = "age")]
    publicint Age { get; set; }

    [SugarColumn(ColumnName = "create_time")]
    public DateTime CreateTime { get; set; }
}

数据库操作UserRepository

public class UserRepository
{

}

创建数据库和表

public void InitializeDatabase()
{
    using (var db = DatabaseConfig.GetClient())
    {
        // 创建数据库表
        db.CodeFirst.InitTables<User>();
    }
}

插入数据

public class UserRepository
{

    public void AddUser(User user)
    
{
        using (var db = DatabaseConfig.GetClient())
        {
            // 插入单个用户
            int newId = db.Insertable(user).ExecuteReturnIdentity();
            Console.WriteLine($"新用户ID:{newId}");
        }
    }

    public void AddUsers(List<User> users)
    
{
        using (var db = DatabaseConfig.GetClient())
        {
            // 批量插入用户
            int affectedRows = db.Insertable(users).ExecuteCommand();
            Console.WriteLine($"插入的用户数:{affectedRows}");
        }
    }
}

static void Main(string[] args)
{
    UserRepository rep = new UserRepository();
    rep.AddUser(new User { Username = "John Doe", Email = "john@example.com", Age = 30, CreateTime = DateTime.Now });
    rep.AddUsers(new List<User>
    {
        new User { Username = "Rick Doe", Email = "rick@example.com", Age = 28, CreateTime = DateTime.Now },
        new User { Username = "Mike Smith", Email = "mike@example.com", Age = 40, CreateTime = DateTime.Now }
    });
}


查询数据

public User GetUserById(int id)
{
    using (var db = DatabaseConfig.GetClient())
    {
        // 根据ID查询用户
        return db.Queryable<User>()
                 .Where(u => u.Id == id)
                 .First();
    }
}

public List<User> GetUsersByAge(int minAge, int maxAge)
{
    using (var db = DatabaseConfig.GetClient())
    {
        // 按年龄范围查询用户
        return db.Queryable<User>()
                 .Where(u => u.Age >= minAge && u.Age <= maxAge)
                 .ToList();
    }
}

static void Main(string[] args)
{
    UserRepository rep = new UserRepository();
    var user = rep.GetUserById(1);
    Console.WriteLine(user.Username);
    var users = rep.GetUsersByAge(1530);
    foreach (var u in users)
    {
        Console.WriteLine(u.Username);
    }
}

更新数据

public void UpdateUserEmail(int userId, string newEmail)
{
    using (var db = DatabaseConfig.GetClient())
    {
        // 更新用户邮箱
        int affectedRows = db.Updateable<User>()
                              .SetColumns(u => u.Email == newEmail)
                              .Where(u => u.Id == userId)
                              .ExecuteCommand();
        Console.WriteLine($"更新的行数:{affectedRows}");
    }
}

删除数据

public void DeleteUser(int userId)
{
    using (var db = DatabaseConfig.GetClient())
    {
        // 删除指定用户
        int affectedRows = db.Deleteable<User>()
                              .Where(u => u.Id == userId)
                              .ExecuteCommand();
        Console.WriteLine($"删除的行数:{affectedRows}");
    }
}

高级查询

分页查询

public List<User> GetUsersByPage(int pageIndex, int pageSize)
{
    using (var db = DatabaseConfig.GetClient())
    {
        // 分页查询用户
        return db.Queryable<User>()
                 .OrderBy(u => u.Id)
                 .ToPageList(pageIndex, pageSize);
    }
}

事务处理

public void PerformTransaction()
{
    using (var db = DatabaseConfig.GetClient())
    {
        try
        {
            // 开启事务
            db.Ado.BeginTran();

            // 执行多个数据库操作
            db.Insertable(new User { Username = "新用户" }).ExecuteCommand();
            db.Updateable<User>().SetColumns(u => u.Age == 30).Where(u => u.Id == 1).ExecuteCommand();

            // 提交事务
            db.Ado.CommitTran();
            Console.WriteLine("事务执行成功");
        }
        catch (Exception ex)
        {
            // 回滚事务
            db.Ado.RollbackTran();
            Console.WriteLine($"事务执行失败:{ex.Message}");
        }
    }
}

注意事项

  1. 确保正确处理数据库连接
  2. 使用参数化查询防止SQL注入
  3. 合理使用事务
  4. 注意异常处理
  5. 对于大量数据,考虑使用批处理

结语

SqlSugar为C#开发者提供了一个简单、高效的SQLite数据库操作方案。通过其强大的ORM功能,可以轻松进行数据库交互,提高开发效率。

希望这篇文章对您有所帮助!


如果你正在从事上位机、自动化、机器视觉、物联网(IOT)项目或数字化转型方面的工作,欢迎加入我的微信圈子!在这里,我们不仅可以轻松畅聊最新技术动态和行业趋势,还能够在技术问题上互相帮助和支持。我会尽量利用我的知识和经验来帮助你解决问题,当然也期待从大家的专业见解中学习和成长。无论你是新手还是老鸟,期待与志同道合的朋友交流心得,一起进步!

文章转载自技术老小子,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论