
C#/.NET CORE
文章平均质量分 68
C#程序開發
罗马苏丹默罕默德
寇可往,我亦可往
展开
-
NPOI中关于公式的使用Formula
鄙人在做Excel数据导出时,一般不使用Excel的公式Formula,因为数据都在程序里获取到了,可以直接用(统计加总/平均… 但一些需求要求固定使用Excel公式计算(可能是为了’美观’,亦或是’不信任程序的计算结果’),则需要在NPOI中设置Excel的公式.谨以此文介绍其用法以及一些细节.前面的用例都是动态状态下的使用,如果在动态打印Excel的情况下使用公式,则必须准确的获取到列号(like A,B,C,D…像是SUM(),AVERAGE(),ABS()…2.日期计算公式的使用。原创 2024-02-28 11:49:45 · 1434 阅读 · 1 评论 -
BlazorServer中C#与JavaScript的相互调用
虽然BlazorServer中推荐使用C#在razor页面中的替代JavaScript来完成逻辑的编写,但当需要使用第三方的javascript文件/组件里的内容时,则难免要在C#中调用其方法或对象。反之当你的(用到第三方组件的)Javascript代码想要和后台交互时,则需要调用C#的代码。好在BlazorServer中这两种通信都是支持的。下面将介绍其具体的实现方式。原创 2023-08-23 20:36:53 · 2218 阅读 · 0 评论 -
CS1988|C#无法在异步方法中使用ref,in,out类型的参数的问题
参数,因为当控件返回到调用代码时,该方法可能尚未完成。对引用变量的任何更改都对调用代码不可见,从而导致 CS1988 错误。BlazorServer的场景中推荐使用异步方法,使用ref,out,in为参数前缀则报错CS1988。如果要在async方法中获取一些返回值,请直接加在的Task的返回中。如果是一些运行时间长的方法,则可能造成一些响应不及时的效果。将需要用到的参数作为Task的返回,即。应避免使用引用类型为参数来充当返回值。现有Blazor页面如下。延申:引用变量的可见性。在方法的运行时间内,原创 2023-08-17 11:47:57 · 2270 阅读 · 0 评论 -
.NetCore录屏生成Gif动图程序(Form)的开发过程[代码已上传GitCode]
桌面录制Gif程序https://gitcode.net/jamenu/recorddesktopgif原创 2023-07-14 17:07:39 · 353 阅读 · 1 评论 -
BlazorServer非鉴权的登录和注册
BlazorServer入门,参数的绑定与跳转原创 2023-07-05 15:52:38 · 918 阅读 · 0 评论 -
Dapper存取Blob类型数据
blob类型是数据库用于保存二进制文件的一种类型,可以将文件存储到数据库的表中。ADO.NET原生的方法操作blob类型需要一个OracleBlob类作为中介,通过它来获取流或是字节。然后再进行下一步的操作,如果要获取的数据比较多,则比较繁琐。🚩 Tip: 如需通过ORM对象来获取Blob列,只需要将Blob列的对应类型设置为和上例中的byte[]即可。而Dapper的方法更加简单,直接用byte[]来传递二进制文件,操作则更加简单。原生的Ado.Net存取Blob比较繁琐,通过上面的例子可以看出,原创 2023-05-30 08:28:01 · 753 阅读 · 0 评论 -
如何在Oracle存储过程发生异常时获取out类型参数的值
✈️有一些关于金额和时间的精确且量大的计算需要在存储过程中完成。存储过程中有一些自定义的异常。并且将在RAISE前通过out类型的参数将详细的异常原因返回。但是在通过Csharp的调用中,发现了很多的问题。需要书面总结。原创 2023-05-12 15:55:59 · 1354 阅读 · 1 评论 -
关于修改压缩包内的文件(Excel...)内容的解决方法
要避免这种情况,你必须新建压缩包,把Excel一个个修改后直接存在新的压缩包里,毕竟上面的代码改动后还是被流塞进了原来的文件,故会造成一些不知名的损坏。在他下载对应压缩包的接口中直接修改压缩包内的Excel文件,这种方法比较直接且好像可行。虽然在Excel自动的修复后可以使用,但终究是不能使用这种方法的。在他的接口逻辑里直接在拆分后直接设置自动列宽…如果能在压缩前就修改完成就不需要修改压缩包内的文件。如果能在压缩前就修改完成就不需要修改压缩包内的文件。如果能在压缩前就修改完成就不需要修改压缩包内的文件。原创 2023-04-12 10:30:27 · 1852 阅读 · 0 评论 -
SignalR在Asp.NetCore的使用入门
一定要弄清Hub类的作用,Hub类中定义的方法为只能被前端invoke调用,但是否响应(SendAsync)是可选的当你在其他的地方要推送信息(SendAsync)时,使用的是IHubContextIHubContext可以使用DI,你可以在后台的任何地方自动发送消息不要尝试将IHubContext 转化为T,后台无法调用Hub类方法,路已被锁死。原创 2023-01-12 16:16:20 · 1273 阅读 · 1 评论 -
QuartzNet的基本使用,Scheduler,Job,Trigger的应用
Quartz.Net的基本使用是比较简单的,主要是对下面三个工具的创建和使用。原创 2023-01-10 14:25:54 · 1008 阅读 · 0 评论 -
C#在控制台中打印进度条【同步和异步】
这个方法的参数是一个无返回值的action(可以理解为一个void method),但必须要一个T泛型的参数。可以不同的数据类型,最常见的比如int,则多表示为1~100,double多表示为0.01-1.00。IProgress接口需要实现void Report(T value);C#提供一个IProgress的基本实现类。Progress它可有一个有参的构造方法。这里的T就是进度的值。原创 2023-01-05 11:07:58 · 1480 阅读 · 0 评论 -
【非付费】C#关于将Excel转为PDF的两种方法
其实有很多的组套软件提供Excel转PDF,而且也包含更多更强大的关于文件格式转化和操作的API,像是ITextshape,但全都是商业付费的。上午只找到两种可以使用的方法,暂时先记录一下。原创 2023-01-02 15:06:55 · 4035 阅读 · 0 评论 -
C#在Pdf画统计图表之【雷达图】(以五边形为例)
工具:PdfSharpCore或Pdfsharp知识 :基本的三角函数思路 : 画坐标,确定点-------->画多个半径渐变的正多边形------->根据数据确定雷达图的数值位置PdfSharp/Core的绘图方法很丰富,可以用来绘制比较精密的图形。同时,如果想要更进一步的绘制,最好将数据Model固定,弄一种固定格式,也可以借此展示更多信息。最后注意坐标点的计算需要用到一些三角函数,请不要忘光了。原创 2022-11-22 15:38:13 · 1146 阅读 · 0 评论 -
LINQ对集合的聚合操作
常见的函数使用非常简单,但重要的是。原创 2022-09-07 18:33:16 · 417 阅读 · 0 评论 -
C#把Type当做泛型T,来作为方法的泛型进行使用
一般情况下,是无法把Type类型当做泛型T来使用的,你会收到IDE的提示如下这里当然可以直接将Person传入泛型,但我使用一个Person类来获取Type只是为了测试,因为。按IDE的提示,我们无法这样直接使用,但是微软为我们提供了。...原创 2022-07-25 23:57:32 · 4654 阅读 · 0 评论 -
ASP.NET CORE写一个缓存Attribute工具
本工具启发于Spring Cache,故使用C#的Attribute去模仿Spring的@Cahce相关的注解,试图实现一样的效果。代码地址:https://gitee.com/godenSpirit/cache-attribute,欢迎提出意见和改善。Cache接口和实现Redis的实现类CacheFilter将执行代码通过策略模式抽取到CacheOperation缓存名解析使用方法使用方法非常简单测试在Gitee地址中自带一个WebAPI的测试,可以直接在其基础上扩写...原创 2022-07-23 15:18:00 · 442 阅读 · 1 评论 -
关于ASP.NET CORE使用DateTime日期类型参数的一个小细节
2.不要在方法里对DateTime参数进行判空操作,因为当你不为DateTime传入值时,它会被默认设置为 DateTime.MinValue测试:故原创 2022-07-01 11:34:08 · 1430 阅读 · 0 评论 -
关于SqlSugar的多对多的级联插入的问题(无法获取集合属性的id,导致无法维护中间表)
今天没有事,想着用.Net Core WebApi写一个RBAC的小Demo,Demo很简单,主要就是Role和Permission,User和Role的两个多对多的关系,也就5张表的事。打算使用ORM来简化操作,故使用SqlSugar来帮助开发。但在级联插入时好像出现了一些问题。现有模型,和生成的表如下我们写个方法测试一下在swagger中测试插入,(这里的参数id是没有用的,它们实际上生成的是自增值)这一点还是有点问题的,一般的ORM应该自动去维护中间表。故多对多的级联操作还是很重要的,原创 2022-06-27 11:12:57 · 1461 阅读 · 0 评论 -
在ASP.NET CORE中使用Log4Net
前言:Log4Net同样是Apache下的日志框架,在.net整个系列上基本上都可以使用。API也和其他的日志框架(log4j)相似,所以学习上手非常快。配置方法也很简单,完成log4net的xml配置文件,命名为log4net.config(注:不要保存为xml,vs中默认以.config代替.xml)3.直接在程序中使用使用方式大体可以分为,构造函数注入日志器,和静态工厂获取。后者就和Java中著名的slf4j日志门面提供的API差不多,从工厂中获取logger构造函数注入(ASP.NET原创 2022-06-15 16:10:08 · 921 阅读 · 1 评论 -
奇怪的要求,判断集合元素的属性值是否有重复
要求导入一个EXCEL,每一行的值都封装到一个对象中,最后导到数据库里去,因为某些业务要求,某列不能出现重复的值(所以在存到集合里去后再检查一下),思路还是比较简单,单独拿出集合中那个指定属性的所有值作为另一新集合,再循环新集合中用原对象集合的属性值计算Count出现次数即可,大于定于2就可以定义为重复。当时在C#中的实现(使用LINQ)internal class TheOneTest{ public int ID { get; set; } public string Nam.原创 2022-05-26 11:27:53 · 468 阅读 · 0 评论 -
(ASP.NET CORE)记一个因Newtonsoft.json的序列化规则造成的BUG
背景: 要给一个以前的项目从APIKey的验证方式换成JWT的验证方式,之前也换过一个老系统,当时也没出现什么问题。但换到这个项目却因为序列化出现了点小问题,而且比较细节,不好找是什么原因。问题描述:前端收到的返回值的属性名都是小写,所以要求我在Token校验通过后放行的结果里也要保持全部小写的属性名。之前在StartUp里面是设置了小写属性名Resolver的,services.AddMvc(filters).SetCompatibilityVersion(CompatibilityVersio原创 2022-05-19 14:11:11 · 668 阅读 · 0 评论 -
SqlSugar初体验|比EFCore更优秀
前言: 之前看微软的文档学了一会EFCore,当时觉得还不错,但是在工作中也没有使用。然后前段时间终于要答辩完了,也没有去总结,写点什么。反正趁作为学生身份最后的几天玩几天也无所谓了。首先,SqlSugar的官网:https://www.donet5.com/官网有详细的文档,也有相关的论坛,如果有问题可以到里面讨论,1.迁移与逆向迁移在微软的文档中喜欢用这个词,其实意思就是把Model映射到数据库生成表。(建表)反向迁移就是从数据库的表都读出来生成对应的Model下面是一些和其他的框原创 2022-05-17 23:06:54 · 13866 阅读 · 0 评论 -
记C#的操蛋字符串转Base64和Base64还原字符串
字符串转Base64再转回字符串原创 2022-04-20 08:22:10 · 819 阅读 · 0 评论 -
C#索引器的使用
索引器是C#是一个比较特殊的功能,它一般用来提供数组/集合被外部访问的接口(其实就是对集合或数组成员的方便的操作 eg:获取OR设置数组/集合元素…)C#的索引器定义在类中,可以重载(索引可以不是整形,也就是可以快速访问Dictionary[即map]),需要注意的点它固定要有get,set的方法,get需要返回要取的值set方法由于没有参数,看似不可以赋值,但其提供了一个默认的values关键字public class Kingdom { private List<原创 2022-02-21 20:18:00 · 511 阅读 · 0 评论 -
多线程对比|Java的Future使用和C#的TASK的使用
前言:这里不会探讨它们的运行原理,考据党可以先行告退常在.NET 开发中涉及到TASK的使用,也知道TASK是C#中对多线程编程的一种优化,它的使用非常简单,你可以用它修饰在方法上,也可以直接传递一个Action让它直接执行同时也可以从中获取执行的返回值,捕获异常什么的.而之前笔者对Java的多线程的知识还停留在Thread和Runnable,回头一想,是否Java也有类似的机制,所有看了一些文章,了解了Future的概念发现这两个机制的风格有些相像,故记录下来Java的简单原创 2022-02-15 09:51:21 · 1085 阅读 · 0 评论 -
粗略的对比下Java的stream操作和C#的LINQ操作
前言:笔者的实习使用.NET环境而之前在学校给培训的是Java,所以目前经常在两种语言和平台中切换,由于工作中使用C#,学到了很多C#的知识和框架,它们或多或少和Java中有的东西有相似性.从中也有一些启发,故将之记录下来背景:C#的Linq最早发布于2007年的C#3.0而Java的流操作到Java8标准才出现两者的使用目的都是为了简化或提高对集合类型(广义的IEumnable对象)的操作,提高效率.且都被实践证明是非常重要的.理解和掌握他们的使用对自己的编程思想是一次大的提升接下来原创 2022-02-10 10:07:14 · 2888 阅读 · 0 评论 -
从观察者模式过渡到event类型
前言:在笔者短暂的.NET编程时间中(FCK实习的这三个月),见过的event类型的使用次数一只手能数的过来.之前一直不是很明白,直到到到这一篇文章,C#事件的使用让我觉得从观察者/发布订阅的设计模式来理解能让事情变得更简单**一.最简单的发布和订阅/观察者的形式为了小白能够理解什么是观察者/发布订阅的概念,还是有必要浪费口舌表述一下如果对设计模式想做更深入的了解可以参考这个网站https://refactoringguru.cn/1.概念的表达观察者模式的表述一般是以某个组件为主体原创 2022-01-23 20:29:28 · 251 阅读 · 0 评论 -
C#重载运算符与转型关键字ex|im/plicit
1.重载运算符一.首先是赋值类型的运算符不能重载二.其次是逻辑判断类型的运算符必须成对重载像是重载true就必须重载false,重载==就必须重载!=。。。。三.其他的常用的一元和二元都可以被重载+,-,*,%…2.显示和隐式转型的关键字explicit(显)implicit(隐)显式和隐式转型的方法和重载运算符比较像,但又不一样,(不知道设置转型是不是重载运算符的一种特殊的形势呢?)测试代码; public class FlatSet { public Fla原创 2022-01-20 22:51:58 · 455 阅读 · 0 评论 -
在ASP.NET CORE项目中使用AutoFac设置AOP的Redis缓存
1.创建一个ASP.NET CORE项目先创建一个asp.net core项目,可以是WebAPI也可以是MVC或者其他的形式,这并没有关系这里以WebAPI项目举例导入相关的依赖包需要用到AutoFac和stackExchange.redis和Newtonsoft.JSON当然,这个测试可以不使用数据库,但为了更真实一些,我需要加上SqlClinet.Data去连接测试用的SqlServer数据库...原创 2022-01-19 12:58:29 · 1109 阅读 · 0 评论 -
Dapper的效率问题的总结
前言:Dapper是一款非常方便的轻量级的ORM工具,这里放一个它的文档:Dapper帮助文档它拓展了IConnection接口的方法,使其能够查询Model的List,不需要提前的Mapper设置,也支持多种写入参数的方式与其他ORM框架相比,确实很方便.但在实际的使用中,当数据量很大时,它的执行效率比原生的ADO.NET低了很多倍.问题的发现有需求要把大量的数据查出然后导入ExceL中,开始是使用的Dapper进行List查询,大概在执行上花了2分钟左右(只是需要的数据的一部分)后来原创 2022-01-14 16:40:21 · 1925 阅读 · 0 评论 -
AutoFac的AOP的实现以及和SpringAOP方式的对比
前言:AutoFac的AOP和Spring的AOP一样都是基于动态代理的设计模式(废话)其中Spring的动态代理有两种方式Dynamic ProxyJDK在1.5版本提供的原生动态代理,主要为InvocationHandler接口(切面)及产生代理类的Proxy类(代理对象PS:不是被代理对象) ,其本质是基于接口的生产方式,如果被代理类没有实现任何接口则无法使用CGLib 则是通过子类生产代理对象,如果被代理类被final修饰,则无法产生代理现在的Spring已经支持原创 2022-01-07 13:57:13 · 1072 阅读 · 0 评论 -
AutoFac多个实现类中获取指定实现类的三个方法
一个业务接口有多个实现类的情况是很多的,如果我们都讲他们配置进容器,那么当要找到特定的实现类就会有些麻烦了这里总结几种方法去获取指定的实现类1.把所有实现类作为IEumnable集合都注入进来public interface IService { void DoSomething(); } public class HumanService : IService { public void DoSomething() { Console.Wr原创 2022-01-06 23:26:41 · 1970 阅读 · 1 评论 -
C#将List模型直接导出为Excel
首先,新的一年祝大家新年快乐。元旦也是浪了几天没怎么写东西,但必须趁着新的一年赶快开动起来前言:在学习了NPOI操作Excel并完成了打印报表的经历后,个人有一些感觉,1.用DataTable导Excel还是太麻烦...原创 2022-01-02 21:43:36 · 3552 阅读 · 0 评论 -
NPOI的使用学习记录(一)创建Excel和写入数据
NPOI即意为.NET平台的POI,是操作Excel的一个开源工具,被广泛的使用.一.创建Excel文件由于03版和07及以后版的Excel的格式不同,分别为xls,xlsx所以他们的创建并兼容,在NPOI中的表现为创建他们的对象不同03版的为HSSFWorkbook07及以后为XSSFWorkbook创建时必须正确的写Excel的格式,写混的话用Excel打开的话会报文件损坏同時创建的Excel文件又必须带有至少一个Sheet1.创建xlsclass Program{ publ原创 2021-12-26 23:37:22 · 3548 阅读 · 1 评论 -
EntityFrameWork Core从零开始,(十)EFCore应用于ASP.NET CORE6
即如EF 应用于 ASP.NET微软推出EFCore必然是要服务于ASP.NET CORE 的项目由于.NET6.0环境下 ASP.NET CORE项目的StartUp和program结合在了一起,所以使用的方法的也会有稍有不同,今天将介绍不同版本ASP.NET CORE项目下使用EFCore...原创 2021-12-18 18:55:53 · 1846 阅读 · 0 评论 -
stackExchange.redis将对象写入键值的两种方法(C#的序列化对比JSON)
stackService.redis是一款.NET 操作Redis数据库的一套工具,使用看起来简单,但使用却非如此.1.将C#对象写入Redis原创 2021-12-13 14:29:54 · 2140 阅读 · 0 评论 -
EntityFrameWork Core从零开始,(九)继承影射的补充
前言:继承影射其实也可以作为实体关系的一种,但使用的地方明显比较少一些.在Hibernate中,继承映射主要有两种方式1.单表继承映射2.多表继承映射当然比较好用的是单表继承映射,(只需要设置一个鉴别器属性即可),总体比较简单EFCore的继承映射也分为这两种情况,分别是单表和多表但不同的是按照约定,EF 不会自动扫描基类型或派生类型;这意味着,如果要映射层次结构中的 CLR 类型,就必须在模型上显式指定该类型。 例如,仅指定层次结构的基类型不会导致 EF Core 隐式包含其所有子类型原创 2021-12-10 16:48:34 · 1064 阅读 · 0 评论 -
EntityFrameWork Core从零开始,(八)数据查询
前言:EFCore的查询方式有几种,查询的API是比较简单的,至少不用像原生的ADO.NET那样,需要执行SQL后手动把结果从一张DataTable中设置到数据模型中这里只讲几种常见的查询方式,如需了解EFCore数据查询的原理,可以参考文档https://docs.microsoft.com/zh-cn/ef/core/querying/how-query-works1.数据库上下文查询一.查询实体二.查询属性2.构造LINQ表达式查询一.关联属性的加载3.原生SQL查询...原创 2021-12-10 11:02:09 · 617 阅读 · 1 评论 -
EntityFrameWork Core从零开始,(七)事务的应用与管理
前言:数据库事务想必Web开发都十分的熟悉.可以说是后台开发的必备技能了.笔者在校招面试时,关于事务的问题就快要被问烂了其无外乎以下内容如不熟悉,请尽快复习1.四大特性(ACID)2.事务的传播属性3.事务的隔离级别4.Spring的声明式事务的原理(AOP)5.一些具体的使用(PS:分布式事务不在应届生事务问题之列…)...原创 2021-12-08 10:32:19 · 1385 阅读 · 0 评论 -
EntityFrameWork Core从零开始,(六)对象跟踪与实体状态
前言(其实是复习)通过之前的学习,我们了解到DbContext实际上是一个"半手工"的Session学过Hibernate的都知道,它的难度很大程度上在于了解Session对对象状态的跟踪(或者说是管理)会始终与数据库中表的记录同步,这其中的原理则是通过Hibernate中对象的三种状态实现的1.瞬时态2.持久态3.离线态先不说Session是如何改变对象的状态,以及其复杂的内部结构(其实是快忘了)[状态转化图]一.EFCore的实体状态EFCore的实体状态有五种,分别是De原创 2021-12-07 09:06:54 · 1720 阅读 · 0 评论