CAD二次开发(11)-在用C#进行CAD开发SQLite和SqlSugar的使用

news2025/2/3 22:06:22

1. System.Data.SQLite的使用

1.1 包的引入

利用 Nuget引入其相关包
在这里插入图片描述

1.2 App.config配置引入到CAD

因为我们当前的项目是类库项目,需要依托于宿主程序才可以运行,所以我们就得需要将SQLite自动生成的App.config里面的部分配置移植到CAD的配置文件中。保证System.Data.SQLite依赖的正常运行。
在这里插入图片描述

1.3 CAD配置文件中引入配置信息

在这里插入图片描述
打开后将如下内容复制到CAD安装目录下的acad.exe.config文件中的configuration标签中:

	<system.data>
	  <DbProviderFactories>
		<remove invariant="System.Data.SQLite.EF6" />
		<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
	  <remove invariant="System.Data.SQLite" /><add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /></DbProviderFactories>
	</system.data>
	<runtime>
	  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
		<dependentAssembly>
		  <assemblyIdentity name="System.Data.SQLite" publicKeyToken="db937bc2d44ff139" culture="neutral" />
		  <bindingRedirect oldVersion="0.0.0.0-1.0.118.0" newVersion="1.0.118.0" />
		</dependentAssembly>
	  </assemblyBinding>
	</runtime>

2. sqlSugar的使用

2.1 依赖引入

在这里插入图片描述

2.2 工具类

using gse.Constant;
using SqlSugar;
using System;

namespace gse.Tools
{
    /// <summary>
    /// SqlSugar配置类
    /// </summary>
    public class SqlSugarBase
    {
        //创建数据库对象 (用法和EF Dappper一样通过new保证线程安全)
        public  SqlSugarClient Db = new SqlSugarClient(new ConnectionConfig()
        {
            ConnectionString = "datasource="+ CommonConstant.DB_DIRECTORY,
            DbType = DbType.Sqlite,
            IsAutoCloseConnection = true
        },
        db => {

            db.Aop.OnLogExecuting = (sql, pars) =>
            {

                //获取原生SQL推荐 5.1.4.63  性能OK
                Console.WriteLine(UtilMethods.GetNativeSql(sql, pars));

            };

        });
    }
}

2.3 具体使用

实体类

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

namespace gse.Entities
{
    /// <summary>
    /// 项目实体
    /// </summary>
    [SugarTable("tbl_project")]
    public class Project
    {
        /// <summary>
        /// 主键
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int Id { get; set; }
        /// <summary>
        /// 项目ID
        /// </summary>
        public string ProjectId { get; set; }

        /// <summary>
        /// 项目名称
        /// </summary>
        public string ProjectName { get; set; }

        /// <summary>
        /// 项目详细参数
        /// </summary>
        [SugarColumn(IsNullable = true)]
        public string ProjectDesc { get; set; }

        /// <summary>
        /// 是否为当前项目 0否 1是
        /// </summary>
        public int CurrentFlag { get; set; }

        /// <summary>
        /// 项目创建时间
        /// </summary>
        public string CreateTime { get; set; }

        public Project()
        {

        }

        public Project(int id, string projectId, string projectName, string projectDesc, int currentFlag, string createTime)
        {

            Id = id;
            ProjectId = projectId;
            ProjectName = projectName;
            ProjectDesc = projectDesc;
            CurrentFlag = currentFlag;
            CreateTime = createTime;
        }
        public override string ToString()
        {
            return "Project{" +
                   "Id='" + Id + '\'' +
                   ", ProjectId='" + ProjectId + '\'' +
                   ", ProjectName='" + ProjectName + '\'' +
                   ", ProjectDesc='" + ProjectDesc + '\'' +
                   ", CurrentFlag=" + CurrentFlag +
                   ", CreateTime='" + CreateTime + '\'' +
                   '}';
        }
    }
}

Service

using gse.Entities;
using gse.Tools;
using SqlSugar;
using System;
using System.Collections.Generic;

namespace gse.Service
{
    public class TblProjectService
    {

        SqlSugarBase SqlSugarBase = new SqlSugarBase();

        /// <summary>
        /// 项目添加
        /// </summary>
        /// <param name="project"></param>
        public string AddProject(Project project)
        {
            string msg = "";
            if (string.IsNullOrEmpty(project.ProjectId))
            {
                return msg = "项目编号不能为空";

            }
            if (string.IsNullOrEmpty(project.ProjectName))
            {
                return msg = "项目名称不能为空";
            }


            List<Project> pro1 = SqlSugarBase.Db.Queryable<Project>()
                .Where(pro => pro.ProjectId == project.ProjectId).ToList();
            if (pro1.Count > 0)
            {
                return msg = "项目编号重复";
            }

            List<Project> pro2 = SqlSugarBase.Db.Queryable<Project>()
            .Where(pro => pro.ProjectName == project.ProjectName).ToList();
            if (pro2.Count > 0)
            {
                return msg = "项目名称重复";
            }
            project.CreateTime = DateTimeUtils.DATE.Now();
            SqlSugarBase.Db.Insertable(project).ExecuteReturnIdentity();
            return msg;
        }

        /// <summary>
        /// 更新项目
        /// </summary>
        /// <param name="project">项目信息</param>
        public string UpdateProject(Project project)
        {
            string msg = "";
            if (string.IsNullOrEmpty(project.ProjectId))
            {
                return msg = "项目编号不能为空";

            }
            if (string.IsNullOrEmpty(project.ProjectName))
            {
                return msg = "项目名称不能为空";
            }
            List<Project> pros = SqlSugarBase.Db.Queryable<Project>()
                .Where(pro => pro.ProjectName == project.ProjectName && pro.ProjectId == project.ProjectId)
                .ToList();
            if (pros.Count > 0)
            {
                Project pro = pros[0];
                pro.ProjectId = project.ProjectId;
                pro.ProjectName = project.ProjectName;
                pro.ProjectDesc = project.ProjectDesc;
                pro.CurrentFlag = project.CurrentFlag;
                SqlSugarBase.Db.Updateable(pro).ExecuteCommand();
            }
            else
            {
                return msg = "项目不存在";
            }
            return msg;
        }

        /// <summary>
        /// 设置当前工程
        /// </summary>
        /// <param name="project"></param>
        /// <returns></returns>
        public void setCurrentProject(Project project)
        {
            try
            {
                Project current = selectCurrentProject();
                if (current != null)
                {
                    //首先将原来的当前状态设置为非当前
                    current.CurrentFlag = 0;
                    SqlSugarBase.Db.Updateable(current).ExecuteCommand();
                }
                //设置选中工程为当前工程
                List<Project> pros = SqlSugarBase.Db.Queryable<Project>()
               .Where(pro => pro.ProjectName == project.ProjectName && pro.ProjectId == project.ProjectId)
               .ToList();
                if (pros.Count > 0)
                {
                    Project pro = pros[0];
                    pro.CurrentFlag = 1;
                    SqlSugarBase.Db.Updateable(pro).ExecuteCommand();
                }
            }
            catch (Exception ex)
            {
                //事务回滚
                SqlSugarBase.Db.Ado.RollbackTran();
                return;
            }

        }

        /// <summary>
        /// 查看当前工程
        /// </summary>
        /// <param name="project"></param>
        public Project selectCurrentProject()
        {
            List<Project> projects = SqlSugarBase.Db.Queryable<Project>()
                         .Where(pro => pro.CurrentFlag == 1).ToList();
            if (projects.Count > 0)
            {
                //首先将原来的当前状态设置为非当前
                return projects[0];
            }
            return null;
        }

        /// <summary>
        /// 删除项目
        /// </summary>
        /// <param name="projectId">项目ID</param>
        public void DeleteProject(string projectId)
        {
            SqlSugarBase.Db.Deleteable<Project>().Where(it => it.ProjectId == projectId).ExecuteCommand();
        }

        /// <summary>
        /// 根据id查询项目
        /// </summary>
        /// <param name="projectId"> 项目ID</param>
        /// <returns></returns>
        public Project SelectProjectById(string projectId)
        {
            List<Project> projects = SqlSugarBase.Db.Queryable<Project>()
                .Where(pro => pro.ProjectId == projectId).ToList();
            if (projects.Count > 0)
            {
                return projects[0];
            }
            return null;
        }

        /// <summary>
        /// 根据项目id或者项目名称查询列表
        /// </summary>
        /// <param name="projectId">项目ID</param>
        /// <param name="name">项目名称</param>
        /// <returns></returns>
        public List<Project> SelectProjectPage(string projectId, string name)
        {
            if (string.IsNullOrEmpty(projectId) && string.IsNullOrEmpty(name))
            {
                List<Project> projects = SqlSugarBase.Db.Queryable<Project>().ToList();
                return projects;
            }
            else
            {
                var exp = Expressionable.Create<Project>();
                exp.OrIF(!string.IsNullOrEmpty(projectId), it => it.ProjectId.Equals(projectId));
                exp.OrIF(!string.IsNullOrEmpty(name), it => it.ProjectName.Contains(name));
                var projects = SqlSugarBase.Db.Queryable<Project>().Where(exp.ToExpression()).ToList();
                return projects;
            }

        }

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1852150.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从工具产品体验对比spark、hadoop、flink

作为一名大数据开发&#xff0c;从工具产品的角度&#xff0c;对比一下大数据工具最常使用的框架spark、hadoop和flink。工具无关好坏&#xff0c;但人的喜欢有偏好。 目录 评价标准1 效率2 用户体验分析从用户的维度来看从市场的维度来看从产品的维度来看 3 用户体验的基本原则…

双叒叕-一个-Android-MVVM-组件化架构框架?

LifecycleViewModelLiveDataViewBindingAndroid KTXOkHttp:网络请求Retrofit:网络请求MMKV:腾讯基于 mmap 内存映射的 key-value 本地存储组件Glide:快速高效的Android图片加载库ARoute:阿里用于帮助 Android App 进行组件化改造的框架 —— 支持模块间的路由、通信、解耦BaseR…

Instagram APIj接口——快速获取Ins帖子媒体内容下载链接

一、引言 在社交媒体蓬勃发展的今天&#xff0c;Instagram已成为用户分享照片、视频和精彩瞬间的首选平台。然而&#xff0c;对于很多用户来说&#xff0c;想要保存或分享Instagram上的精彩内容却常常遇到困扰。为了解决这个问题&#xff0c;我们精心打造了一款全新的Instagra…

yolov8训练初体验

最近在爬一些数据&#xff0c;有些网址的验证码比较难搞&#xff0c;于是使用yolov8来解决。 一、数据打标签并转为txt 使用的软件为X-AnyLabeling。内置各种模型&#xff0c;方便打标。 打标完成后由于是json格式&#xff0c;所以我们使用python转换即可 import json import…

51单片机STC89C52RC——5.1 LCD1602液晶显示屏

目录 目的 一&#xff0c;STC单片机模块 二&#xff0c;LCD1602 2.1 模块简介 2.2 针脚 2.3 DDRAM地址与显示器对应关系 2.4 标准字库表 2.5 常用指令 2.6 读写操作 三&#xff0c;创建Keil项目 四&#xff0c;代码 五&#xff0c;代码编译、下载到51单片机 六&a…

浏览器-服务器架构 (BS架构) 详解

目录 前言1. BS架构概述1.1 BS架构的定义1.2 BS架构的基本原理 2. BS架构的优势2.1 客户端简化2.2 易于更新和维护2.3 跨平台性强2.4 扩展性高 3. BS架构的劣势3.1 网络依赖性强3.2 安全性问题3.3 用户体验局限 4. BS架构的典型应用场景4.1 企业内部应用4.2 电子商务平台4.3 在…

洛谷 P10584 [蓝桥杯 2024 国 A] 数学题(整除分块+杜教筛)

题目 思路来源 登录 - Luogu Spilopelia 题解 参考了两篇洛谷题解&#xff0c;第一篇能得出这个式子&#xff0c;第二篇有比较严格的复杂度分析 结合去年蓝桥杯洛谷P9238&#xff0c;基本就能得出这题的正确做法 代码 #include<bits/stdc.h> #include<iostream&g…

单选题22届期末复习PTA

知识点&#xff1a; 1. (p->n) 会递增 p->n 的值&#xff0c;但是这个表达式的值仍然是递增之前的值 p->n 会得到 a[0].n 的值&#xff0c; p->n 也会递增 p->n 的值&#xff0c;但是这个表达式的值是递增后的值 p->next->n 访问 p 指向的结点的下一…

八大排序浅入浅出

1&#xff09;选择一个增量序列t1&#xff0c;t2&#xff0c;…&#xff0c;tk&#xff0c;其中ti>tj&#xff0c;tk1&#xff1b; 2&#xff09;按增量序列个数k&#xff0c;对序列进行k 趟排序&#xff1b; 3&#xff09;每趟排序&#xff0c;根据对应的增量ti&#xff…

头歌资源库(16)分苹果

一、 问题描述 二、算法思想 首先&#xff0c;我们可以初始化一个数组apple来记录每个孩子分配的苹果数量&#xff0c;将所有元素初始化为1&#xff0c;表示每个孩子至少分配到一个苹果。 然后&#xff0c;从左到右遍历评分数组ratings&#xff0c;判断当前孩子的评分与前一个…

自动驾驶仿真测试用例表格示例 ACC ELK FCW

自动驾驶仿真测试用例表格示例 测试用例概览 本测试用例表格涵盖了自动驾驶系统中多个关键功能和场景的测试&#xff0c;旨在确保系统在不同条件下的表现和稳定性。 用例编号测试项目测试描述预期结果实际结果通过/失败TC-001ACC功能测试在高速公路上启用ACC&#xff0c;测试车…

2024最新版Python 3.12.4安装使用指南

2024最新版Python 3.12.4安装使用指南 2024最新版Python 3.12.4安装使用指南0. Python的受欢迎程度1. 安装最新版Python 3.12.42. 验证Python 3.12.4版本3. 验证Python功能4. 使用IDLE交互式开发模式5. 安装Python扩展库相关阅读&#xff1a; By Jackson 2024最新版Python 3.12…

C语言笔试题:实现把一个无符号整型数字的二进制序列反序后输出

目录 题目 实例 方法一&#xff1a;直接交换 方法二&#xff1a;间接交换 拓展 题目 编写一个函数&#xff0c;将一个无符号整数的所有位逆序&#xff08;在32位机器下&#xff09; 实例 例如有一个无符号整数 unsigned int num 32; unsigned int 在32位系统中占4个字…

C# 中的静态关键字

C# 语言中的 static 关键字用于声明静态类和静态类成员。静态类和静态类成员&#xff08;如构造函数、字段、属性、方法和事件&#xff09;在只需要一个对象&#xff08;类或类成员&#xff09;副本并在类型&#xff08;和成员&#xff09;的所有实例&#xff08;对象&#xff…

基于SpringBoot+Vue汽车配件销售管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

css-vxe列表中ant进度条与百分比

1.vxe列表 ant进度条 <vxe-column field"actualProgress" title"进度" align"center" width"200"><template #default"{ row }"><a-progress:percent"Math.floor(row.actualProgress)"size"s…

算法竞赛创新实践总结

目录 1 算法题目................................... 3 1.1 盛最多水的容器.......................... 3 1.1.1 题目................................ 3 1.1.2 双指针.............................. 4 1.1.3 代码................................ 5 1.2 分巧克力...…

【辨析】快速了解RBF神经网络与BP神经网络的区别

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 目录 一、RBF与BP模型简介1.1.模型结构1.2.模型表达式 二、RBF神经网络与BP神经网络的对比2.1 RBF与BP的激活函数对比2.2 RBF与BP的思想对比 三、RBF神经网络与BP神经网络的训练方法对比2.1.BP神经网络的训练2.2.RBF神…

分布式架构的优势与实现

目录 前言1. 什么是分布式架构1.1 分布式架构的定义1.2 分布式架构的基本原理 2. 分布式架构的优势2.1 可扩展性2.2 容错性和高可用性2.3 性能优化2.4 灵活性和可维护性 3. 分布式架构的实现方法3.1 服务拆分3.1.1 功能拆分3.1.2 垂直拆分3.1.3 水平拆分 3.2 数据分布与存储3.2…

ES6 解构赋值详解

ES6是JavaScript语言的一次重大更新&#xff0c;引入了许多新特性和语法改进&#xff0c;其中解构赋值是一个非常实用和灵活的语法特性。它可以让我们从数组或对象中提取值&#xff0c;并赋给对应的变量&#xff0c;让代码变得更加简洁和易读。本文将深入探讨ES6解构赋值的语法…