A2:连接字符串统一收敛(6份+导入报价裸串→数据库连接.串/串无池,调系数/甲方报表/导入报价由裸串升级WAL+超时); A1:OCR/PDF基础设施链接共享(pdfbt链接主项目扒图源11文件,删10个旧副本,pdfbt获得ocr.cls方向纠正等修复); 双项目编译零警告通过,扒图护栏PASS

This commit is contained in:
dqb-dev
2026-10-01 23:12:48 +08:00
parent 1e65792b09
commit 22fed025bb
25 changed files with 95 additions and 2723 deletions
+2 -1
View File
@@ -48,7 +48,8 @@ namespace 成套报价软件
InitializeComponent();
_projectId = projectId;
_dbPath = dbPath;
_connString = "Data Source=" + dbPath + ";Version=3;";
// ★ A2(2026-10-01):原为裸串(无 WAL/超时,并发易锁死)——统一收敛到 数据库连接.串
_connString = 数据库连接.串(dbPath);
// 绑定事件
this.button1.Click += button1_Click;
+2 -1
View File
@@ -305,7 +305,8 @@ namespace 成套报价软件
private string GetConnString(string dbPath)
{
return "Data Source=" + dbPath + ";Version=3;";
// ★ A2(2026-10-01):原为裸串(无 WAL/超时,并发易锁死)——统一收敛到 数据库连接.串
return 数据库连接.串(dbPath);
}
private Dictionary<string, string> LoadProjectInfo()
+3 -2
View File
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
@@ -503,7 +503,8 @@ namespace 成套报价软件
private string GetConnString(string dbPath)
{
return "Data Source=" + dbPath + ";Version=3;";
// ★ A2(2026-10-01):原为裸串(无 WAL/超时,并发易锁死)——统一收敛到 数据库连接.串
return 数据库连接.串(dbPath);
}
/// <summary>查表索引(复用连接版本)。</summary>
+2 -3
View File
@@ -3663,9 +3663,8 @@ namespace 成套报价软件
private string GetConnString(string dbPath)
{
// ★ B4(2026-10-01):加 BusyTimeout=5000——直写队列/全库重算/扒图窗口并发访问同一库时,
// 遇锁默认 0 等待直接抛 database is locked;加超时后 SQLite 自动等待重试(方案窗口早已同款)
return "Data Source=" + dbPath + ";Version=3;Journal Mode=WAL;Synchronous=Normal;Pooling=True;BusyTimeout=5000;";
// ★ A2(2026-10-01):统一收敛到 数据库连接.串(一处管理),本方法保留签名做转发,调用方零改动
return 数据库连接.串(dbPath);
}
/// <summary>
+4 -4
View File
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
@@ -106,11 +106,11 @@ namespace 成套报价软件
return list;
}
/// <summary>GetConnString 的静态包装,供静态方法调用。</summary>
/// <summary>GetConnString 的静态包装,供静态方法调用。
/// ★ A2(2026-10-01):统一收敛到 数据库连接.串(一处管理),本方法保留签名做转发。</summary>
private static string GetConnStringStatic(string dbPath)
{
// ★ B4(2026-10-01):与实例版同款加 BusyTimeout(防并发锁直报错)
return "Data Source=\"" + dbPath + "\";Version=3;Journal Mode=WAL;Synchronous=Normal;Pooling=True;BusyTimeout=5000;";
return 数据库连接.串(dbPath);
}
/// <summary>
+2 -1
View File
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<PropertyGroup>
<ProjectGuid>{B6966FA3-E161-44ED-8A40-CCDBE1F15192}</ProjectGuid>
@@ -159,6 +159,7 @@
<Compile Include="DockWindows\DockWindow10\DockWindow10.cs" />
<Compile Include="DockWindows\DockWindow10\DockWindow10.Designer.cs" />
<Compile Include="OpenClawHost.cs" />
<Compile Include="数据库连接.cs" />
<Compile Include="AI助手接口.cs" />
<Compile Include="AI助手设置.cs" />
<Compile Include="AI助手设置.Designer.cs" />
+2 -3
View File
@@ -612,9 +612,8 @@ namespace MyApp
private string GetConnString(string dbPath)
{
// ★ busy_timeout=3000:数据库被 CAD 或其他进程短暂占用时等待重试而非卡死;
// Pooling 关闭,避免连接池长期持有文件句柄
return "Data Source=" + dbPath + ";Version=3;busy_timeout=3000;";
// ★ A2(2026-10-01):统一收敛到主程序 数据库连接.串无池(保留扒图关池语义,一处管理)
return 成套报价软件.数据库连接.串无池(dbPath);
}
private string GetQuoteDbPath(string projectId)
+2 -3
View File
@@ -635,9 +635,8 @@ namespace MyAppPdf
private string GetConnString(string dbPath)
{
// ★ busy_timeout=3000:数据库被 CAD 或其他进程短暂占用时等待重试而非卡死;
// Pooling 关闭,避免连接池长期持有文件句柄
return "Data Source=" + dbPath + ";Version=3;busy_timeout=3000;";
// ★ A2(2026-10-01):统一收敛到主程序 数据库连接.串无池(保留扒图关池语义,一处管理)
return 成套报价软件.数据库连接.串无池(dbPath);
}
private string GetQuoteDbPath(string projectId)
+30
View File
@@ -0,0 +1,30 @@
using System;
namespace 成套报价软件
{
/// <summary>SQLite 连接字符串统一管理(A2,2026-10-01):全项目连接参数一处调整全局生效。
/// 此前 6 份重复定义(主窗口/菜单与库/调系数/甲方报表/Cad扒图/Pdf扒图)参数漂移——
/// 调系数与甲方报表是裸串(无 WAL/超时,并发易锁死),扒图窗口是有意关池(防句柄常驻)。
/// 现收敛为两个变体:各处私有 GetConnString 均转发到这里,调用方零改动。</summary>
public static class 数据库连接
{
/// <summary>标准连接串(主窗口/直写队列/重算/报表等主程序各模块用):
/// WAL+Normal 同步+连接池+5秒锁等待。项目库文件首开后即持久保持 WAL 模式,
/// 各连接串里是否声明 Journal Mode 只影响新库,对已建库无实际差异。</summary>
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;";
}
/// <summary>无池连接串(扒图窗口 Cad/Pdf Form3 专用):
/// ★ Pooling 关闭是该窗口的历史有意设计——避免连接池长期持有库文件句柄
/// (导出项目复制库/删库等文件操作不受池句柄干扰),收敛时保留该语义;
/// busy_timeout=3000:库被其他模块短暂占用时等待重试而非卡死。</summary>
public static string 串无池(string dbPath)
{
return "Data Source=" + dbPath + ";Version=3;busy_timeout=3000;";
}
}
}