using System; namespace 成套报价软件 { /// SQLite 连接字符串统一管理(A2,2026-10-01):全项目连接参数一处调整全局生效。 /// 此前 6 份重复定义(主窗口/菜单与库/调系数/甲方报表/Cad扒图/Pdf扒图)参数漂移—— /// 调系数与甲方报表是裸串(无 WAL/超时,并发易锁死),扒图窗口是有意关池(防句柄常驻)。 /// 现收敛为两个变体:各处私有 GetConnString 均转发到这里,调用方零改动。 public static class 数据库连接 { /// 标准连接串(主窗口/直写队列/重算/报表等主程序各模块用): /// WAL+Normal 同步+连接池+5秒锁等待。项目库文件首开后即持久保持 WAL 模式, /// 各连接串里是否声明 Journal Mode 只影响新库,对已建库无实际差异。 public static string 串(string dbPath) { // ★ BusyTimeout=5000(B4):直写队列/全库重算/扒图窗口并发访问同一库时, // 遇锁默认 0 等待直接抛 database is locked;加超时后 SQLite 自动等待重试 return "Data Source=\"" + dbPath + "\";Version=3;Journal Mode=WAL;Synchronous=Normal;Pooling=True;BusyTimeout=5000;"; } /// 无池连接串(扒图窗口 Cad/Pdf Form3 专用): /// ★ Pooling 关闭是该窗口的历史有意设计——避免连接池长期持有库文件句柄 /// (导出项目复制库/删库等文件操作不受池句柄干扰),收敛时保留该语义; /// busy_timeout=3000:库被其他模块短暂占用时等待重试而非卡死。 public static string 串无池(string dbPath) { return "Data Source=" + dbPath + ";Version=3;busy_timeout=3000;"; } } }