C#工具类SqlSugarClient,查询sqlServer数据库详细使用实例

2024-07-02 10:54 C#工具类SqlSugarClient,查询sqlServer数据库详细使用实例已关闭评论

SqlSugar是一个轻量级的.NET ORM框架,它支持包括SQL Server在内的多种数据库。下面是一个使用SqlSugarClient查询SQL Server数据库的基本示例。请注意,在开始之前,确保你已经安装了SqlSugar NuGet包。

步骤 1:引入命名空间并配置SqlSugarClient

首先,在你的项目中引入必要的命名空间,并配置SqlSugarClient以连接到SQL Server数据库。

using SqlSugar;

public class Program
{
    public static void Main(string[] args)
    {
        // 配置数据库连接
        var db = new SqlSugarClient(new ConnectionConfig()
        {
            ConnectionString = "Data Source=YourServer;Initial Catalog=YourDatabase;User ID=YourUsername;Password=YourPassword;",
            DbType = DbType.SqlServer,
            IsAutoCloseConnection = true
        });

        // 执行查询操作
        QueryData(db);
    }

    private static void QueryData(SqlSugarClient db)
    {
        // 示例查询
    }
}

请将YourServerYourDatabaseYourUsernameYourPassword替换为你的实际数据库连接信息。

步骤 2:执行查询

QueryData方法中,你可以编写SQL查询或者利用ORM特性来查询数据。这里提供两个基本示例:一个是直接执行SQL语句,另一个是使用ORM方式查询。

直接执行SQL查询

private static void QueryData(SqlSugarClient db)
{
    // 直接执行SQL查询
    var result = db.Ado.SqlQuery<string>("SELECT Name FROM YourTable").ToList();
    foreach (var name in result)
    {
        Console.WriteLine(name);
    }
}

使用ORM查询

// 假设你有一个User类与数据库中的Users表对应
public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    // 其他属性...
}

private static void QueryData(SqlSugarClient db)
{
    // 使用ORM方式查询
    var users = db.Queryable<User>().Where(x => x.Name == "张三").ToList();
    foreach (var user in users)
    {
        Console.WriteLine($"ID: {user.Id}, Name: {user.Name}");
    }
}

在上述ORM查询示例中,我们假设存在一个User类,该类的属性与数据库中的Users表列相对应。我们通过Lambda表达式指定了查询条件,即查询名称为"张三"的所有用户。

分页查询

private static void PagingQuery(SqlSugarClient db)
{
    // 分页查询,获取第2页,每页10条记录
    var users = db.Queryable<User>()
                 .OrderBy(x => x.Id)
                 .ToPageList(2, 10);
    foreach (var user in users)
    {
        Console.WriteLine($"ID: {user.Id}, Name: {user.Name}");
    }
}

批量插入

private static void BatchInsert(SqlSugarClient db)
{
    // 准备要插入的数据列表
    List<User> userList = new List<User>
    {
        new User { Name = "李四" },
        new User { Name = "王五" },
        // 更多用户...
    };

    // 批量插入
    db.Insertable(userList).ExecuteCommand();
}

更新操作

private static void UpdateRecord(SqlSugarClient db)
{
    // 更新用户信息,假设我们要将ID为1的用户名称改为“赵六”
    var user = new User { Id = 1, Name = "赵六" };
    db.Updateable(user).ExecuteCommand();
}

条件更新

如果你只想在满足特定条件下更新记录,可以这样做:

private static void ConditionalUpdate(SqlSugarClient db)
{
    // 将名字为"张三"的用户更新为"小明"
    db.Updateable<User>().SetColumns(x => new User { Name = "小明" })
                         .Where(x => x.Name == "张三")
                         .ExecuteCommand();
}

删除操作

private static void DeleteRecord(SqlSugarClient db)
{
    // 按ID删除用户
    db.Deleteable<User>(new User { Id = 1 }).ExecuteCommand();
}

// 或者基于条件删除
private static void ConditionalDelete(SqlSugarClient db)
{
    // 删除所有名为"张三"的用户
    db.Deleteable<User>().Where(x => x.Name == "张三").ExecuteCommand();
}

聚合函数查询

比如,计算某个表的总记录数:

private static void AggregateFunctionQuery(SqlSugarClient db)
{
    // 计算Users表的总记录数
    var totalUsers = db.Ado.ExecuteScalar<int>("SELECT COUNT(*) FROM Users");
    Console.WriteLine($"Total users: {totalUsers}");
}

多表联合查询

假设你有两个表,UsersOrders,其中Users表有IdName字段,Orders表有OrderIdUserId(外键关联到Users表的Id)和OrderName字段。以下是如何进行多表联合查询的示例:

private static void JoinQuery(SqlSugarClient db)
{
    var results = db.Queryable<Order, User>((o, u) => new object[] 
                { JoinType.Left, o.UserId == u.Id }) // 左连接
                .Where((o, u) => u.Name == "张三")     // 查询张三的订单
                .Select((o, u) => new { OrderName = o.OrderName, UserName = u.Name })
                .ToList();

    foreach (var item in results)
    {
        Console.WriteLine($"Order: {item.OrderName}, User: {item.UserName}");
    }
}

多表联合更新

多表联合更新通常需要先通过查询获取相关数据,然后基于查询结果进行更新。这里展示一种可能的方法,但实际中联合更新可能需要根据具体业务逻辑来设计:

private static void JoinUpdate(SqlSugarClient db)
{
    // 假设我们要将与用户"张三"关联的所有订单的状态更新为"已完成"
    var ordersToUpdate = db.Queryable<Order, User>((o, u) => new object[] 
                { JoinType.Inner, o.UserId == u.Id && u.Name == "张三" })
                .Select(o => o)
                .ToList();

    foreach (var order in ordersToUpdate)
    {
        order.Status = "已完成";
        db.Updateable(order).ExecuteCommand();
    }
}

多表联合删除

同样,多表联合删除也需要谨慎处理,确保不会误删其他数据。这里仅提供一个概念上的示例:

private static void JoinDelete(SqlSugarClient db)
{
    // 删除用户"张三"的所有订单(注意:实际操作前需确保业务上允许此操作)
    var ordersToDelete = db.Queryable<Order, User>((o, u) => new object[] 
                { JoinType.Inner, o.UserId == u.Id && u.Name == "张三" })
                .Select(o => o.OrderId)
                .ToList();

    foreach (var orderId in ordersToDelete)
    {
        db.Deleteable<Order>(new Order { OrderId = orderId }).ExecuteCommand();
    }
}

多表联合插入(涉及外键)

多表联合插入通常意味着你需要先处理主表的插入,然后再处理从表的插入,确保外键引用正确。这里以插入新用户及其订单为例:

private static void JoinInsert(SqlSugarClient db)
{
    // 插入新用户
    var newUser = new User { Name = "小红" };
    db.Insertable(newUser).ExecuteCommand();

    // 获取刚插入用户的Id
    var userId = newUser.Id;

    // 插入与该用户相关的订单
    var newOrder = new Order { UserId = userId, OrderName = "新订单" };
    db.Insertable(newOrder).ExecuteCommand();
}

当前文章价值9.6元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

你可能感兴趣的文章

来源:每日教程每日一例,深入学习实用技术教程,关注公众号TeachCourse
转载请注明出处: https://teachcourse.cn/3567.html ,谢谢支持!

资源分享

分类:C# 标签:, ,
windows系统创建python项目虚拟环境 windows系统创建python项目虚拟环
007-阿里云服务器配置谷歌的DNS服务器地址步骤 007-阿里云服务器配置谷歌的DN
Android面试笔记二:果肉教育 Android面试笔记二:果肉教育
Kotlin实现的懒汉式静态内部类线程安全的单例 Kotlin实现的懒汉式静态内部类线

评论已关闭!