首页 > 数据库 >c# sqlite "unable to open database file"错误

c# sqlite "unable to open database file"错误

时间:2024-11-23 15:44:27浏览次数:6  
标签:sqlite DataDirectory database c# 数据库 connectionString db SQL 权限

我这个问题是开发环境正常,打安装包后运行报错,记录一下

一、解决连接的问题

App.config

<connectionStrings>
    <add name="sqliteConnection" connectionString="Data Source=|DataDirectory|\UpperMaterial.db;Pooling=true;FailIfMissing=false" providerName="System.Data.SQLite" />
</connectionStrings>

数据库连接类

public class SqlSugarHelper
{

    public static SqlSugarScope Db = new SqlSugarScope(new ConnectionConfig()
    {
        ConnectionString = GetConnectionString(), // 动态获取连接字符串
        DbType = SqlSugar.DbType.Sqlite, // 数据库类型
        IsAutoCloseConnection = true // 不设成 true 要手动 close
    },
    db =>
    {
       // (A) 全局生效配置点,一般 AOP 和程序启动的配置扔这里面,所有上下文生效
       // 调试 SQL 事件,可以删掉
       db.Aop.OnLogExecuting = (sql, pars) =>
       {
           Console.WriteLine(sql); // 输出 SQL,查看执行 SQL 性能无影响

           // 5.0.8.2 获取无参数化 SQL  对性能有影响,特别大的 SQL 参数多的,调试使用
           // UtilMethods.GetSqlString(DbType.SqlServer, sql, pars)
       };

       // 多个配置就写下面
       // db.Ado.IsDisableMasterSlaveSeparation = true;

       // 注意多租户 有几个设置几个
       // db.GetConnection(i).Aop
    });

    private static string GetConnectionString()
    {
        // 设置 DataDirectory 为应用程序的安装路径
        string installPath = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
        AppDomain.CurrentDomain.SetData("DataDirectory", installPath);

        // 获取连接字符串
        string connectionString = ConfigurationManager.ConnectionStrings["sqliteConnection"].ConnectionString;

        // 替换 |DataDirectory| 占位符
        connectionString = connectionString.Replace("|DataDirectory|", installPath);

        return connectionString;
    }
}

 二、开放权限

首先找到你要访问的数据库.db,右键属性,有只读去掉只读。然后安全里面,给用户开放读写权限。

如此仍然不行,原因是:sqlite库在对数据库进行操作时,会在数据库的当前文件夹下创建一个临时文件,当操作结束时,该临时文件将被删除。这个临时文件是没有权限操作。解决办法:给它的父级文件开放读写权限即可。比如SQLLite数据文件放在bin目录下,那么我们开放bin目录的权限即可。

标签:sqlite,DataDirectory,database,c#,数据库,connectionString,db,SQL,权限
From: https://www.cnblogs.com/zeussbook/p/18564517

相关文章

  • 每日一题:https://codeforces.com/contest/2005/problem/B1
    题目链接:https://codeforces.com/contest/2005/problem/B1(开局看掉m=2和q=1)includeincludeusingnamespacestd;intmain(){longu;cin>>u;for(;u>0;u--){longn;longm,q;longarr1[3];longcha;cin>>n>>m>>q;for(inti=0;i<2;i++){......
  • C++ WZOI P2833农场派对
    农场派对提交数:183,通过率:13.11%,平均分:69.28题目描述:N头牛都要去参加一场在编号为X(1≤X≤N)的牛的农场举行的派对(1≤N≤3000),农场之间有M(1≤M≤100,000)条有向路,每条路长Ti(1≤Ti≤100)。每头牛参加派对后都必须回到家,每头牛都会选择最短路。求这N头牛的最短路(一个来回......
  • CSP/信奥赛C++语法基础刷题训练(23):洛谷P1217:[USACO1.5] 回文质数 Prime Palindromes
    CSP/信奥赛C++语法基础刷题训练(23):洛谷P1217:[USACO1.5]回文质数PrimePalindromes题目描述因为151151151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),......
  • CF1699E
    CF1699EThreeDaysGrace题面翻译给定一个初始有\(n\)个元素的可重复集合\(A\),其中每个元素都在\(1\)到\(m\)之间。每次操作可以将\(A\)中的一个元素(称之为\(x\))从\(A\)中删除,然后在\(A\)中加入两个元素\(p,q\),满足\(p\cdotq=x\)且\(p,q>1\)。显然每次操......
  • [JOISC2022] 洒水器
    [JOISC2022]洒水器题目描述JOI君有多年在自家菜园种植蔬菜的经验,现在他计划管理IOI农场。IOI农场由NNN块土地组成。土地间有......
  • CF2008E
    CF2008E题意简述对题目给出的字符串进行一下两种操作:删除一个字符(只能操作一次)将一个字符变为另一个。求变成一个交替字符串最少操作次数。Solution我们先进行分类讨论:当nn......
  • Colors and Intervals
    ColorsandIntervalsn×kn\timeskn×k个格子,编号从1......
  • C++ 标准模板库(STL)——queue的使用
    目录一、描述二、初始化1、包含的头文件2、变量初始化三、函数1、构造函数2、成员函数四、插入元素五、删除元素六、访问元素七、修改元素八、示例代码九、注意事项十、总结一、描述STL(StandardTemplateLibrary)是C++标准库的一部分,它提供了一系列容......
  • C++ 标准模板库(STL)——set的使用
    目录一、描述二、创建和初始化三、插入元素四、删除元素五、查找元素六、遍历元素七、大小和空判断八、迭代器九、自定义比较函数十、其他函数十一、注意事项一、描述std::set是C++STL中的一个关联容器,用于存储唯一的元素,并且这些元素是按照某种顺序排列......
  • 机器学习实战——基于CART决策树实现葡萄酒品质预测(附完整代码和可视化)
    机器学习实战——基于CART决策树实现葡萄酒品质预测(附完整代码和可视化)关于作者作者:小白熊作者简介:精通c#、Halcon、Python、Matlab,擅长机器视觉、机器学习、深度学习、数字图像处理、工业检测识别定位、用户界面设计、目标检测、图像分类、姿态识别、人脸识别、语义分......