WinForm中简单的MVVM模式使用方法 基本写法和wpf有点类似,但是比wpf略微简单简单案例viewModel的实现 这是viewmodel的基类,注意其中方法参数的CallerMemberName标记,这个特性标记的作用是自动传入调用者(方法或属性)名称 123456789public class ViewModelBase:INotifyPropertyChanged{ public event PropertyCha 2025-10-24 #winform #mvvm
MSSQL统计数据知识点备忘 统计数据 使用dbcc show_statistics('数据库名', 统计数据名)查看特定统计数据的详细信息 重点观察统计数据的histogram部分信息,此处决定估算的时候的行数和内存 查询的时候需要分配内存,如果统计数据的估算行数和实际的行数相差过大则会导致空间浪费或者将数据溢出到tempdb中(溢出行为非常影响性能,可以通过查询计划当中的感叹号部分分析) 建议开启自动数据更 2025-09-25 #sql server #statistics
在dotnet当中使用sqlite数据库遇到的问题 如果不引入SQLitePCLRaw.bundle_e_sqlite3包,则在创建连接的时候会出现System.Exception:“You need to call SQLitePCL.raw.SetProvider(). If you are using a bundle package, this is done by calling SQLitePCL.Batteries.Init().” 2025-09-12 #sqlite
一种灵活的鉴权实现方式 主要的思路是使用DynamicExpresso.Core包实现的两个鉴权的自定义函数:hasRole和hasAuth 主要程序: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647public sealed class AuthExpressionEvaluator{ 2025-09-07 #asp
AspNetCore当中JWT键值映射的问题 当使用JwtBearer库时,对于自定义的键可能出现映射错误的问题出错情况:当自定义的键出现在此库默认映射的列表当中时,就会出现根据自定义的键找不到值的情况比如 123456789var authClaim = GetAuthClaims(context.User, RoleKey);private static string[] GetAuthClaims(ClaimsPrincipal use 2025-09-07 #jwt #asp
内存优化表的事务处理过程的一些注意点 主要阶段 初始化阶段 计算全局的时间戳,赋值给当前事务,此时间戳用于确定哪些行可以被看到 生成TxId 插入行的新版本(但是BeginTs或者EndTs为TxId,根据操作类型生成1-2个delta节点,delta节点指向版本) 此阶段检查写写冲突 验证阶段(执行commit命令后) 递增全局时间戳并将其赋值逻辑上结束时间 根据不同的表提示来决定如何进行验证 序列化(检查幻读) 可重复读(检查 2025-09-03 #sql server #事务 #内存优化表
MSSQL如何让触发器在特殊语句执行时不触发 第一种方法:临时表 在需要禁用触发器的存储过程当中定义一个特殊名称的局部临时表 在触发器当中使用object_id(xxx)来检测是否存在来确定是否需要禁用触发器 第二种方法:context_info理论基础 context_info是局部的,类型是varbinary(128)的类型 varbinary类型可以使用+来进行拼接,也就是说0x11+0x12=0x1112 可以使用substring 2025-08-27 #sql server #触发器
使用ElTree组件实现懒加载+可拖动 前提说明 绝对不能用load方式实现所描述之功能,此方式问题极多 实现方式实现思路 在数据库表当中添加hasChildren等标记来表示当前节点是否有子节点(可以通过触发器等方式来确保数据一致性) 定义一个数组来存储已经加载子节点(其中也包括没有子节点)的节点id列表(这个数组的作用是为了防止特殊情况下的重复加载) 在加载页面的时候添加第一级的所有节点,并根据hasChildren标记来添加伪元 2025-08-26 #vue #element plus
MSSQL存储过程事务使用技巧 基本方法事务一定采用 12345678910111213set xact_abort on;begin try begin tran -- business logic commit tranend trybegin catch if xact_state() = -1 begin rollback tran end -- logen 2025-08-18 #sql server #事务
开发企业应用框架遇到的问题 常见功能模块的处理技巧 诸如menu、job、department之类的管理一定要设计成层级的 这些表都需要添加fullName列,用于实现层级的管理,尤其是department,可以实现下级查询的效果 这些表的数据量都不大,完全可以设计成内存优化表来提高性能 这些表的访问频率极高,但失效的成本也比较大,因为重建的成本比较高 在前端获取这些树形界面的时候,尽量都采用懒加载,否则在用户管理的时候,如 2025-08-18 #erp #crm