当前位置: 首页 > news >正文

C# SQL 辅助工具

{/// <summary>/// sql 辅助工具/// </summary>public class SqlStructureHelps{#region 增删改查/// <summary>/// 截断/// </summary>/// <typeparam name="T"></typeparam>/// <returns></returns>public static string TruncateTable<T>(){try{Type type = typeof(T);var tableName = GetClassName(type);return GetSql(SqlType.TruncateTable, tableName);}catch (Exception ex){throw ex;}}/// <summary>/// 修改/// </summary>/// <typeparam name="T"></typeparam>/// <param name="condition">修改条件 (1=1and2=2)</param>/// <param name="param">更新字段</param>/// <returns></returns>public static string Update<T>(string condition = "", List<string> param = null){try{Type type = typeof(T);var tableName = GetClassName(type);var conditionStr = "";if (!string.IsNullOrEmpty(condition)){conditionStr += " WHERE " + condition;}List<string> arrStr = new List<string>();if (param != null && param.Count() > 0){arrStr = param.ToList();}else{var columns = GetTableNames(type, param);arrStr = columns.Select(x => x.name).ToList();}return GetSql(SqlType.Update, tableName, arrStr, conditionStr);}catch (Exception ex){throw ex;}}/// <summary>/// 新增/// </summary>/// <typeparam name="T"></typeparam> /// <param name="param">新增字段</param>/// <returns></returns>public static string Add<T>(List<string> param = null){try{Type type = typeof(T);var tableName = GetClassName(type);List<string> arrStr = new List<string>();if (param != null && param.Count() > 0){arrStr = param.ToList();}else{var columns = GetTableNames(type, param);arrStr = columns.Select(x => x.name).ToList();}return GetSql(SqlType.Insert, tableName, arrStr);}catch (Exception ex){throw ex;}}/// <summary>/// 删除/// </summary>/// <typeparam name="T"></typeparam>/// <param name="condition">删除条件 (1=1and2=2)</param>/// <returns></returns>public static string Delete<T>(string condition = ""){try{Type type = typeof(T);var tableName = GetClassName(type);var conditionStr = "";if (!string.IsNullOrEmpty(condition)){conditionStr += " WHERE " + condition;}return GetSql(SqlType.Delete, tableName, null, conditionStr);}catch (Exception ex){throw ex;}}/// <summary>/// 查询/// </summary>/// <typeparam name="T"></typeparam>/// <param name="condition">查询条件 (1=1and2=2)</param>/// <param name="v1">当前页</param>/// <param name="v2">条数</param>/// <param name="param">查询指定字段</param>/// <returns></returns>public static string Query<T>(string condition = "", int v1 = 0, int v2 = 0, List<string> param = null){try{// 查询的列var arrStr = new List<string>();// 条件var conditionStr = "";if (!string.IsNullOrEmpty(condition)){conditionStr += " WHERE " + condition;}if (v1 > 0 && v2 > 0){conditionStr += string.Format(@" LIMIT {1} OFFSET ({0} - 1) * {1}", v1, v2);}Type type = typeof(T);var tableName = GetClassName(type);if (param != null && param.Count() > 0){arrStr = param.ToList();}else{var columns = GetTableNames(type, param);arrStr = columns.Select(x => x.name).ToList();}return GetSql(SqlType.Select, tableName, arrStr, conditionStr);}catch (Exception ex){throw ex;}}/// <summary>/// 获取sql/// </summary>/// <param name="sqlType">类型</param>/// <param name="table">表名</param>/// <param name="columns">新增字段 / 更新字段  / 查询字段(默认全部)</param>/// <param name="condition">更新字段条件 / 查询条件 / 删除条件</param>/// <returns></returns>private static string GetSql(SqlType sqlType, string table, List<string> columns = null, string condition = ""){var s = "";switch (sqlType){case SqlType.Insert:if (columns == null || columns.Count < 1){throw new Exception("新增字段为空");}else{s += string.Format(@"INSERT INTO {0} ({1}) VALUES ({2});", table, string.Join(",", columns), string.Join(",", columns.Select(x => "@" + x)));}break;case SqlType.Delete:s += string.Format(@"DELETE FROM {0} {1};", table, condition);break;case SqlType.Update:if (columns == null || columns.Count < 1){throw new Exception("更新字段为空");}s += string.Format(@"UPDATE {0} SET {1} {2};", table, string.Join(",", columns.Select(x => x + "=@" + x)), condition);break;case SqlType.Select:if (columns == null || columns.Count < 1){s += string.Format(@"SELECT * FROM {0} {1};", table, condition);}else{s += string.Format(@"SELECT {1} FROM {0} {2};", table, string.Join(",", columns), condition);}break;case SqlType.TruncateTable:s += string.Format(@"TRUNCATE TABLE {0};", table);break;}return s;}/// <summary>/// 获取表名,默认为类名/// </summary>/// <param name="type"></param>/// <returns></returns>private static string GetClassName(Type type){var name = type.Name;object[] attrClassName = type.GetCustomAttributes(typeof(MyIsStructureAttribute), true);if (attrClassName != null && attrClassName.Length > 0){var myIsStructureAttribute = (MyIsStructureAttribute)attrClassName.First();name = myIsStructureAttribute.TableName;}return name;}/// <summary>/// 获取字段集合/// </summary>/// <param name="type"></param>/// <param name="obj"></param>/// <returns></returns>/// <exception cref="Exception"></exception>private static List<Column> GetTableNames(Type type, object obj = null){var list = new List<Column>();PropertyInfo[] properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);if (properties.Length > 0){foreach (PropertyInfo property in properties){if (property.CanWrite && property.CanRead){var a = property.GetCustomAttributes(typeof(MyIsStructureAttribute), true);var isNext = true;if (a != null && a.Length > 0){var temp = (MyIsStructureAttribute)a.First();isNext = temp.IsStructure;}if (isNext){var tempuu = new Column();tempuu.name = property.Name;tempuu.type = property.GetMethod.ReturnType.Name;if (obj != null){tempuu.value = property.GetMethod.Invoke(obj, null);}list.Add(tempuu);}}}}else{throw new Exception("未查询到字段");}return list;}#endregion#region 扩展/// <summary>/// 获取所有的表信息/// </summary>/// <param name="sqlTypes"></param>/// <param name="database"></param>/// <returns></returns>public static string GetTable(SqlTypes sqlTypes, string database = ""){try{string sql = "";switch (sqlTypes){case SqlTypes.Mysql:if (string.IsNullOrEmpty(database)) throw new Exception("数据库名称不能为空");sql = string.Format(@"SELECT TABLE_NAME AS `TableName`, TABLE_COMMENT AS `TableExegesis` FROM information_schema.TABLES   WHERE   TABLE_SCHEMA = '{0}' ORDER BY   TABLE_NAME;", database);break;case SqlTypes.SqlServer:sql = string.Format(@"SELECT t.name AS TableName, ep.value AS TableExegesis  FROM  sys.tables t LEFT JOIN sys.extended_properties ep ON t.object_id = ep.major_id AND ep.minor_id = 0  AND ep.name = 'MS_Description' AND ep.class = 1 WHERE t.type = 'U'  AND t.is_ms_shipped = 0  ORDER BY  t.name;");break;default:throw new Exception("未扩展的数据库");}return sql;}catch (Exception ex){throw ex;}}/// <summary>/// 获取所有的列信息/// </summary>/// <param name="sqlTypes"></param>/// <param name="database"></param>/// <param name="tablename"></param>/// <returns></returns>public static string GetColumn(SqlTypes sqlTypes, string database, string tablename){try{string sql = "";switch (sqlTypes){case SqlTypes.Mysql:sql = string.Format(@"SELECT   COLUMN_NAME AS `columnName`,  COLUMN_COMMENT AS `columnExegesis`,  DATA_TYPE AS `columnType`,  CHARACTER_MAXIMUM_LENGTH AS `columnMax` FROM     information_schema.COLUMNS   WHERE   TABLE_SCHEMA = '{0}' AND TABLE_NAME = '{1}'; ", database, tablename);break;case SqlTypes.SqlServer:sql = string.Format(@"SELECT   c.name AS columnName,  ty.name AS columnType,  CASE   WHEN ty.name IN ('nchar', 'nvarchar', 'ntext') THEN c.max_length / 2  WHEN ty.name IN ('text') THEN -1 ELSE c.max_length    END AS columnMax,   ep.value AS columnExegesis  FROM  sys.columns c INNER JOIN sys.types ty ON c.user_type_id = ty.user_type_id LEFT JOIN sys.extended_properties ep ON c.object_id = ep.major_id    AND c.column_id = ep.minor_id AND ep.name = 'MS_Description'  WHERE c.object_id = OBJECT_ID('{0}.dbo.{1}'); ", database, tablename);break;default:throw new Exception("未扩展的数据库");}return sql;}catch (Exception ex){throw ex;}}/// <summary>/// mysql 类型  转 c# 类型/// </summary>/// <param name="mysqlType"></param>/// <returns></returns>/// <exception cref="NotSupportedException"></exception>/// <exception cref="ArgumentException"></exception>public static Type MySqlTypeToCSharpType(string mysqlType){switch (mysqlType.ToLowerInvariant()){case "int":case "tinyint":case "smallint":case "mediumint":case "bigint":case "bigint unsigned":case "int unsigned":return typeof(int);case "float":case "double":case "decimal":case "numeric":return typeof(double);case "varchar":case "char":case "text":case "tinytext":case "mediumtext":case "longtext":return typeof(string);case "datetime":case "timestamp":case "date":case "time":case "year":return typeof(DateTime);case "blob":case "tinyblob":case "mediumblob":case "longblob":case "binary":case "varbinary":return typeof(byte[]);case "json":return typeof(string);case "bit":return typeof(bool);default:throw new ArgumentException($"MySQL type: {mysqlType}");}}/// <summary>/// sqlserver类型  转 c#类型/// </summary>/// <param name="sqlType"></param>/// <returns></returns>/// <exception cref="ArgumentException"></exception>public static Type SqlServerTypeToCSharpType(string sqlType){switch (sqlType.ToLowerInvariant()){case "int":case "smallint":case "tinyint":return typeof(int);case "bigint":return typeof(long);case "bit":return typeof(bool);case "decimal":case "numeric":return typeof(decimal);case "float":return typeof(float);case "real":return typeof(float);case "money":case "smallmoney":return typeof(decimal);case "char":case "nchar":case "varchar":case "nvarchar":case "text":case "ntext":return typeof(string);case "datetime":case "smalldatetime":case "date":case "time":case "datetime2":case "datetimeoffset":return typeof(DateTime);case "binary":case "varbinary":case "varbinary(max)":return typeof(byte[]);case "uniqueidentifier":return typeof(Guid);case "sql_variant":return typeof(object);case "xml":return typeof(string);default:throw new ArgumentException($"SQL Server type: {sqlType}");}}#endregion}#region 内部辅助使用/// <summary>/// 类型/// </summary>enum SqlType{/// <summary>/// 增加/// </summary>Insert,/// <summary>/// 删除/// </summary>Delete,/// <summary>/// 更新/// </summary>Update,/// <summary>/// 查询/// </summary>Select,/// <summary>/// 截断/// </summary>TruncateTable}/// <summary>/// 列/// </summary>class Column{/// <summary>/// 名称/// </summary>public string name { get; set; }/// <summary>/// 值/// </summary>public object value { get; set; }/// <summary>/// 类型/// </summary>public string type { get; set; }}#endregion#region 外部配合使用/// <summary>/// 自定义属性/// </summary>public class MyIsStructureAttribute : Attribute{/// <summary>/// /// </summary>/// <param name="isStructure"></param>public MyIsStructureAttribute(bool isStructure = false){IsStructure = isStructure;}/// <summary>/// /// </summary>/// <param name="tableName"></param>public MyIsStructureAttribute(string tableName){TableName = tableName;}/// <summary>/// 是否为表结构中的数据/// </summary>public bool IsStructure { get; }/// <summary>/// 表名称/// </summary>public string TableName { get; }}/// <summary>/// 数据库类型/// </summary>public enum SqlTypes{/// <summary>/// mysql/// </summary>Mysql,/// <summary>/// SqlServer/// </summary>SqlServer}/// <summary>/// 表/// </summary>public class Tables{/// <summary>/// 名称/// </summary>public string TableName { get; set; }/// <summary>/// 注释/// </summary>public string TableExegesis { get; set; }}/// <summary>/// 列/// </summary>public class Columns{/// <summary>/// 名称/// </summary>public string columnName { get; set; }/// <summary>/// 注释/// </summary>public string columnExegesis { get; set; }/// <summary>/// 类型/// </summary>public string columnType { get; set; }/// <summary>/// 最大长度/// </summary>public string columnMax { get; set; }}#endregion}

相关文章:

C# SQL 辅助工具

{/// <summary>/// sql 辅助工具/// </summary>public class SqlStructureHelps{#region 增删改查/// <summary>/// 截断/// </summary>/// <typeparam name"T"></typeparam>/// <returns></returns>public static …...

eNSP简单用法

建立一个简单的拓扑图 点击绿色三角开启设备 双击设备可以进行命令编辑 视图 分为三个视图&#xff1a;用户视图、系统视图、接口视图 用户视图 在默认模式下就是&#xff0c;为<huawei> 按ctrlz返回用户视图 系统视图&#xff1a; 在用户视图下输入sys切换&#…...

1035. 不相交的线

1. 题目 1035. 不相交的线 2. 解题思路 题目一看是求最值&#xff0c;那就可以考虑用DP来做。 核心点就是确定DP数组的含义以及状态转移方程&#xff1a; dp数组含义&#xff1a;dp[i][j]&#xff0c;nums1 前 i 个数和 nums2 前 j 个数的最大连线数dp[i][j] dp[i - 1][j …...

1.pytest基础知识(默认的测试用例的规则以及基础应用)

一、pytest单元测试框架 1&#xff09;什么是单元测试框架 单元测试是指再软件开发当中&#xff0c;针对软件的最小单位&#xff08;函数&#xff0c;方法&#xff09;进行正确性的检查测试。 2&#xff09;单元测试框架 java&#xff1a;junit和testing python&#xff1a;un…...

Linux常见查看文件命令

目录 一、cat 1.1. 查看文件内容 1.2. 创建文件 1.3. 追加内容到文件 1.4. 连接文件 1.5. 显示多个文件的内容 1.6. 使用管道 1.7. 查看文件的最后几行 1.8. 使用 -n 选项显示行号 1.9. 使用 -b 选项仅显示非空行的行号 二、tac 三、less 四、more 五、head 六、…...

初识 performance_schema:轻松掌握MySQL性能监控

什么是 performance_schema performance_schema 是 MySQL 5.8 版本的一个强大功能&#xff0c;它就像是一个内置的**“性能侦探”**&#xff0c;专门用来监控和分析 MySQL 服务器的资源消耗和等待情况。有了它&#xff0c;数据库管理员和开发者就能实时了解服务器的运行状态&a…...

linux下top命令查看和解释

怎么看top结果&#xff1a; top - 10:20:48 up 8 days, 14:07, 2 users, load average: 6.04, 5.82, 4.73 Tasks: 11099 total, 1 running, 10916 sleeping, 0 stopped, 1 zombie %Cpu(s): 8.9 us, 4.6 sy, 0.0 ni, 86.1 id, 0.1 wa, 0.0 hi, 0.3 si, 0.0 st K…...

换个手机IP地址是不是不一样?

在当今这个信息爆炸的时代&#xff0c;手机已经成为我们生活中不可或缺的一部分。而IP地址&#xff0c;作为手机连接网络的桥梁&#xff0c;也时常引起我们的关注。你是否曾经好奇&#xff0c;换个手机&#xff0c;IP地址会不会也跟着变呢&#xff1f;本文将深入探讨这个问题&a…...

【从计算机的发展角度理解编程语言】C、CPP、Java、Python,是偶然还是应时代的产物?

参考目录 前言什么是"computer"?计算机的大致发展历程计算机系统结构阶段(1946~1981)计算机网络和视窗阶段(1982~2007)复杂信息系统阶段(2008~today)人工智能阶段 越新的语言是越好的吗、越值得学习吗&#xff1f; 前言 最近读了 《Python语言程序设计基础》 这本书…...

《Google软件测试之道》笔记

介绍 GTAC&#xff1a;Google Test Automation Conference&#xff0c;Google测试自动化大会。 本书出版之前还有一本《微软测试之道》&#xff0c;值得阅读。 质量不是被测试出来的&#xff0c;但未经测试也不可能开发出有质量的软件。质量是开发过程的问题&#xff0c;而不…...

实战讲稿:Spring Boot整合MyBatis

文章目录 实战讲稿&#xff1a;Spring Boot整合MyBatis课程目标课程内容1. 创建员工映射器接口1.1 创建子包1.2 创建接口 2. 测试员工映射器接口2.1 自动装配员工映射器2.2 测试按标识符查询员工方法2.3 测试查询全部员工方法2.4 测试插入员工方法2.5 测试更新员工方法2.6 测试…...

基于深度学习的眼部疾病检测识别系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 眼部疾病的早期诊断对于防止视力下降乃至失明至关重要。然而&#xff0c;专业的医疗资源分布不均&#xff0c;尤其是在偏远地区&#xff0c;人们很难获得专业的眼科医生提供的及时诊断服务。本系统…...

curl格式化json之jq工具?

jq 是一个轻量级的命令行工具&#xff0c;用于解析、操作和格式化 JSON 数据。它类似于 sed 或 awk&#xff0c;但专门用于处理 JSON 格式。使用 jq&#xff0c;你可以从复杂的 JSON 数据中提取所需的信息&#xff0c;格式化输出&#xff0c;进行数据筛选&#xff0c;甚至修改 …...

百收SEO蜘蛛池

百收SEO蜘蛛池 网站搜索排名上不去&#xff1f;SSL证书来帮忙&#xff01; #SSL证书#网站优化#搜索引擎优化 谷歌蜘蛛石的话有非常多的一个重要性&#xff0c;首先的话就是能够提升我们网站的一个输入&#xff0c;尤其是对于我们百收SEO蜘蛛池新站来说&#xff0c;我们在做独立…...

(娱乐)魔改浏览器-任务栏图标右上角加提示徽章

一、目标&#xff1a; windows中&#xff0c;打开chromium&#xff0c;任务栏中会出现一个chromium的图标。我们的目标是给这个图标的右上角&#xff0c;加上"有1条新消息"的小提示图标&#xff0c;也叫徽章(badge)注意&#xff1a;本章节纯属娱乐&#xff0c;有需要…...

JVM相关

1.JVM内存区域 一个运行起来的java进程就是一个Java虚拟机&#xff0c;就需要从操作系统中申请一大块内存。 内存中会根据作用的不同被划分成不同的区域&#xff1a; &#xff08;1&#xff09;栈&#xff1a;存储的内容是代码在执行过程中&#xff0c;方法之间的调用关系&a…...

9.18 微信小程序开发笔记

如何获取英语单词的发音&#xff0c;使其能在小程序界面通过点击外发&#xff1f; 1.通过外界API获取&#xff08;例如有道API&#xff09; 不下载音频文件&#xff0c;每次需要时直接API获取发音&#xff0c;存储压力小。但是一般的API都有使用次数限制&#xff0c;在背单词…...

dpdk课程学习之练习笔记八(dpvs的了解)

只是看到这个&#xff0c;跟着流程做一下练习&#xff0c;了解这个东东是干啥的&#xff0c;再就是搭建环境&#xff0c;基于dpdk的环境&#xff0c;顺手也就练习dpdk的环境搭建了。 0&#xff1a;总结 1&#xff1a;知道了lvs能实现的功能&#xff0c;挺强大。 2&#xff1…...

Linux标准IO-系统调用详解

1.1 系统调用 系统调用&#xff08;system call&#xff09;其实是 Linux 内核提供给应用层的应用编程接口&#xff08;API&#xff09;&#xff0c;是 Linux 应用层进入内核的入口。不止 Linux 系统&#xff0c;所有的操作系统都会向应用层提供系统调用&#xff0c;应用程序通…...

LeetCode004-两个有序数组的中位数-最优算法代码讲解

最有帮助的视频讲解 【LeetCode004-两个有序数组的中位数-最优算法代码讲解】 https://www.bilibili.com/video/BV1H5411c7oC/?share_sourcecopy_web&vd_sourceafbacdc02063c57e7a2ef256a4db9d2a 时间复杂度 O ( l o g ( m i n ( m , n ) ) ) O(log(min(m,n))) O(log(min(…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...