我这个问题是开发环境正常,打安装包后运行报错,记录一下
一、解决连接的问题
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