使用SQLsugar 进行数据库操作

如果使用SQLite,需要下载
System.Sqlite, newtonsoft.Json,Sqlsugar

如果使用MySql,则需要newtonsoft.Json,Sqlsugar, MySql.Data 8.18,mysql的连接可以参照 :https://www.cnblogs.com/ShaYeBlog/p/12667135.html

官方文档:https://www.bookstack.cn/read/SqlSugar-4.x-zh/fb0c2301c8dfe32c.md,可以使用SqlSugar ORM工具箱生成实体类

using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DAL
{
    public class ActualDataProvider
    {
        public int Delete(ActualData t)
        {
            if (t == null) return 0;
            ActualData model = SqlSugarHelper.db.Queryable<ActualData>().Where(item => item.Id == t.Id).First();
            if (model == null) return 0;

            int count = SqlSugarHelper.db.Deleteable<ActualData>(model).ExecuteCommand();
            return count;
        }

        //public int Insert(ActualData t)
        //{
        //    int count = SqlSugarHelper.db.Insertable<ActualData>(t).ExecuteCommand();
        //    return count;
        //}

        /// <summary>
        /// 批量插入
        /// </summary>
        /// <param name="t"></param>
        /// <returns></returns>
        /// 
        public int Insert(List<ActualData> t)
        {
            if (t == null) return 0;
            ////if (t.Value == null) return 0;
            ////方法1
            //foreach (var item in t.ToArray())
            //{
            //    SqlSugarHelper.db.Insertable<ActualData>(item).ExecuteCommand();
            //}
            ////方法2
            int count = SqlSugarHelper.db.Insertable(t.ToArray()).ExecuteCommand();//官方推荐的
            return count;
        }


        public List<ActualData> Select()
        {
            DateTime day = DateTime.Now.AddDays(-1);
            return SqlSugarHelper.db.Queryable<ActualData>().Where(u => SqlFunc.Between(u.InsertTime, day,DateTime.Now)).ToList();
            //return SqlSugarHelper.db.Queryable<ActualData>().ToList();
        }

        public int Update(ActualData t)
        {
            if (t == null) return 0;
            ActualData model = SqlSugarHelper.db.Queryable<ActualData>().Where(item => item.Id == t.Id).First();
            if (model == null) return 0;
            model.Value = t.Value;
            model.Remark = t.Remark;
            model.VarName = t.VarName;
            int count = SqlSugarHelper.db.Updateable<ActualData>(model).ExecuteCommand();
            return count;
        }
    }
}

using DAL;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SugarShenhua
{
    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
            SqlSugarService.SetConnectionStr("Data Source=" + Application.StartupPath + str2);
            //WPF
            //SqlSugarService.SetConnectionStr("Data Source=" + System.IO.Directory.GetCurrentDirectory() + str2); 
        }
        //"Data Source=192.168.0.15;Initial Catalog=Sugar;User ID=sa;Password=12345678;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"

        string str2 = "\\Config\\ScadaData.db;Pooling=true;FailIfMissing=false";
        
string ConnectionString = "database='" + "shenhuadata" + "';Data Source = '" + "localhost" + "'; User Id = '" + "root" + "'; pwd='" + "sasa" + "';charset='utf8';pooling=true"; //mySql
        string str3 = "Data Source=.;Initial Catalog=Sugar;User ID=sa;Password=sasa;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";

        private void Add_Click(object sender, EventArgs e)
        {
            var t1 = new ActualData()
            {
                InsertTime = DateTime.Now,
                Remark = "测试Remark1",
                Value = "测试Value1",
                VarName = "测试变量名1"
            };

            var t2 = new ActualData()
            {
                InsertTime = DateTime.Now,
                Remark = "测试Remark2",
                Value = "测试Value2",
                VarName = "测试变量名2"
            };

            var t3 = new ActualData()
            {
                InsertTime = DateTime.Now,
                Remark = "测试Remark3",
                Value = "测试Value3",
                VarName = "测试变量名3"
            };

            List<ActualData> actualDatas = new List<ActualData>();
            actualDatas.Add(t1);
            actualDatas.Add(t2);
            actualDatas.Add(t3);

            ActualDataProvider actProvider = new ActualDataProvider();
            actProvider.Insert(actualDatas);
        }

        private void Select_Click(object sender, EventArgs e)
        {
            ActualDataProvider actProvider = new ActualDataProvider();
            
            Dgv.DataSource= actProvider.Select();
        }

        private void Update_Click(object sender, EventArgs e)
        {
            ActualDataProvider actProvider = new ActualDataProvider();
            var t1 = new ActualData()
            {
                Id = 38,
                InsertTime = DateTime.Now,
                Remark = "插入练习1",
                Value = "插入练习2",
                VarName = "插入练习3"
            };
            int count = actProvider.Update(t1);
        }

        private void Delete_Click(object sender, EventArgs e)
        {
            ActualDataProvider actProvider = new ActualDataProvider();

            var t1 = new ActualData()
            {
                Id = 38,
                InsertTime = DateTime.Now,
                Remark = "插入练习1",
                Value = "插入练习2",
                VarName = "插入练习3"
            };

            int count = actProvider.Delete(t1);
        }
    }
}


### SQLSugar数据库迁移使用指南 #### 什么是SQLSugarSQLSugar 是一个轻量级的 ORM 框架,支持多种数据库之间的数据迁移、模型映射以及动态查询等功能。它提供了简单易用的 API 接口来实现跨数据库的操作。 --- #### 数据库迁移的核心功能 SQLSugar 提供了强大的数据库迁移能力,可以通过简单的配置完成不同数据库间的结构和数据同步。以下是其主要特性: 1. **支持多数据库引擎** SQLSugar 支持 MySQL、PostgreSQL、SQLite、SQL Server 和国产数据库(如达梦 DM[^3])。这使得它可以轻松处理从 Oracle 到 SQL Server 或者从 SQL Server 到达梦 DM 的迁移场景[^2]。 2. **自动化脚本生成** SQLSugar 能够自动生成目标数据库所需的 DDL (Data Definition Language) 脚本,从而简化手动编写复杂 SQL 的过程。 3. **增量迁移支持** 对于大规模的数据迁移任务,SQLSugar 提供了分批处理的能力,能够有效减少内存占用并提高性能。 4. **兼容性优化** 针对特定数据库的特点(例如达梦 DB 中 `nvarchar` 字段长度限制[^4]),SQLSugar 自动调整字段定义以适配目标数据库的最佳实践。 --- #### 如何使用 SQLSugar 实现数据库迁移? ##### 1. 安装 SQLSugar 库 首先,在项目中引入 SQLSugar NuGet 包: ```bash Install-Package SqlSugar ``` 如果需要针对某些特殊数据库(如达梦 DM),还需要额外安装对应的驱动程序[^3]: ```csharp // 添加达梦数据库驱动 using SqlSugar; ISqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { DbType = DbType.DM, // 设置为目标数据库类型 ConnectionString = "your_connection_string", InitKeyType = InitKeyType.Attribute, }); ``` ##### 2. 初始化源数据库与目标数据库连接 在迁移过程中,通常涉及两个不同的数据库实例:一个是作为数据来源的旧数据库,另一个是新部署的目标数据库。以下是一个基本示例: ```csharp var sourceDb = new SqlSugarClient(new ConnectionConfig() { /* Source Database Config */ }); var targetDb = new SqlSugarClient(new ConnectionConfig() { /* Target Database Config */ }); sourceDb.CodeFirst.InitTables(typeof(User), typeof(Order)); // 获取要迁移的表结构 targetDb.DbMaintenance.CreateDatabase(); // 如果不存在则创建目标数据库 ``` ##### 3. 同步表结构 利用 CodeFirst 功能,可以从现有实体类或者已有的数据库表中提取元信息,并将其应用于新的数据库上。 ```csharp foreach(var table in sourceDb.GetTableInfoList()) { var sqlScript = sourceDb.CodeFirst.ToCreateTableSql(table.TableName); foreach(string scriptLine in sqlScript) targetDb.Ado.ExecuteCommand(scriptLine); // 执行DDL语句 } ``` 注意:对于一些特殊的字段类型转换问题(比如 NVARCHAR 映射差异),可能需要手动修改生成的 SQL 文本。 ##### 4. 导入数据 一旦完成了表结构调整之后就可以开始导入实际记录内容了。推荐采用批量写入方式提升效率: ```csharp int batchSize = 1000; // 控制每次传输的数量大小 long totalRecordsCount = sourceDb.Queryable<User>().Count(); for(int i=0;i<totalRecordsCount/batchSize+1;i++) { List<User> batchedUsers = sourceDb.Queryable<User>() .Skip(i * batchSize).Take(batchSize).ToList(); if (!batchedUsers.Any()) continue; await targetDb.Insertable(batchedUsers).ExecuteCommandAsync(); } ``` --- #### 注意事项 - 在进行大型迁移之前务必测试小规模样本集,验证逻辑正确性和潜在错误点。 - 不同品牌间可能存在语法习惯上的细微差别,因此即使借助工具也应仔细审查最终输出结果。 - 特定情况下还需关注字符集设置等问题,例如建议优先选用 GBK 编码以便容纳更多汉字。 --- 问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘诺西亚的火山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值