C# 打开网络路径下SQLite数据库被识别为本地路径报错如何解决
问题原因
- 核心原因是System.Data.SQLite底层的Windows路径解析逻辑未正确识别你传入的UNC网络路径,将其判定为相对路径,自动拼接至程序运行所在的C盘工作目录,最终形成错误的本地路径。
- 触发这个问题的常见诱因是路径转义异常:你当前硬编码的
"\\\\NW\\test\\DB\\test.sqlite"在字符串转义过程中可能出现了斜杠丢失,导致最终传入SQLite的路径开头只有1个反斜杠,Windows会将单斜杠开头的路径识别为当前驱动器根目录下的相对路径,也就出现了拼接C盘的现象。 - 1.0.115版本的System.Data.SQLite对标准UNC路径的解析存在兼容问题,即使路径格式正确也可能出现识别错误。
解决方案
方案1:使用逐字字符串避免转义错误
修改DataSource的赋值方式,改用C#逐字字符串(前缀加@),无需手动转义反斜杠,降低写错概率:
var builder = new SQLiteConnectionStringBuilder { DataSource = @"\\NW\test\DB\test.sqlite", Version = 3, ForeignKeys = true, };
修改后先调试输出生成的完整连接字符串,确认DataSource部分的路径开头为两个反斜杠\\。
方案2:添加UNC路径专用前缀强制识别
如果方案1无效,可以给路径增加Windows UNC路径专用的长路径前缀,强制SQLite识别为网络路径:
DataSource = @"\\?\UNC\NW\test\DB\test.sqlite",
前缀规则为:将原UNC路径开头的\\替换为\\?\UNC\即可。
额外注意事项
SQLite的文件级锁机制在网络共享路径上稳定性很差,高并发场景下非常容易出现数据库损坏、读写失败的问题,非必要不建议将SQLite数据库存放在网络共享中使用。
内容的提问来源于stack exchange,提问作者br0ek
相关产品推荐
相关产品推荐

