C#使用UNC路径打开局域网共享SQLite3数据库失败问题求助
解决方案
根因说明
你遇到的路径解析错误本质是System.Data.SQLite驱动默认的路径处理逻辑,会将开头不带盘符的UNC路径误识别为相对路径,自动拼接程序运行所在盘符的根目录,最终生成错误的本地路径。
可行修复方案
方案1:在连接字符串新增UseUri=true参数(优先选择)
该参数会强制驱动启用URI路径解析逻辑,可正确识别UNC路径,无需修改原有路径生成代码,示例代码如下:
// 拼接UNC路径(你的原有代码无需修改) string dbPath = Path.Combine(@"\\OAK\OCH-POS\", @"testing.db"); // 连接字符串新增UseUri=true参数 string connectionString = $"Data Source={dbPath};Version=3;UseUri=true;"; using(SQLiteConnection conn = new SQLiteConnection(connectionString)) { conn.Open(); // 原有查询逻辑保持不变 }
方案2:将UNC路径转换为文件URI格式(适配旧版本驱动)
如果你使用的System.Data.SQLite版本低于1.0.94.0(不支持UseUri参数),可以将UNC路径转换为标准文件URI格式传入:
// 转换UNC路径为文件URI string dbPath = new Uri(@"\\OAK\OCH-POS\testing.db").AbsoluteUri; string connectionString = $"Data Source={dbPath};Version=3;";
注意事项
- 运行程序的Windows账号必须拥有目标共享目录的读写权限,SQLite打开数据库时需要创建临时WAL日志、锁文件,仅读权限会导致打开失败
- 不建议在高并发场景下使用网络共享路径存放SQLite数据库,网络文件系统的锁机制可靠性较差,极易出现数据损坏,仅适合低频单客户端读取场景
- 不要在Path.Combine拼接的子路径前加反斜杠,否则会覆盖父路径导致拼接错误
内容的提问来源于stack exchange,提问作者SqueezeOJ
相关产品推荐
相关产品推荐

