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

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

一、解决连接的问题

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目录的权限即可。

posted @ 2024-11-23 15:40  别动我的猫  阅读(390)  评论(0编辑  收藏  举报