.net core加载加密的sqlite文件失败解决方案
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了.net core加载加密的sqlite文件失败解决方案,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3740字,纯文字阅读大概需要6分钟。
内容图文
![.net core加载加密的sqlite文件失败解决方案](/upload/InfoBanner/zyjiaocheng/520/76f32dd982fa414493b893c19317e7a4.jpg)
.net core加载加密的sqlite文件失败解决方案
??在项目开发过程中,遇到使用sqlite的场景。在加载加密的sqlite时,连接sqlite时报错,,先用百度查询了下资料,尚未找到对应解决方法,故接着在stackoverflow上查找,找到了解决思路,并已解决问题。
1.开发时所用到的相关内容
1.1相关项目组件
组件名称 | 版本 |
---|---|
Microsoft.NETCore.App | 2.1.0 |
sqlSugarCore | 5.0.0.9 |
1.2 sqlite加密软件
软件名称 | 版本 |
---|---|
SQLiteStudio | 3.1.1 |
2.解决过程
2.1 遇错过程
??刚开始用的时候是直接用SQLiteStudio直接创建了SQLCipher加密的sqlite文件,用sqlsugar进行DB连接时候程序报错。报错提示如下:
file is encrypted or is not a database
2.2 第一种解决方案——System.Data.Sqlite
2.2.1 使用System.Data.Sqlite
??在sqlite连接的时候,弃用sqlsugar,转而采用System.Data.Sqlite中的sqliteconnection来连接,这个需要自行从nuget中下载,当前采用是System.Data.Sqlite的最新版本1.0.112,且需要将原先加密方式进行改变,不然仍会报上述的错误提示,数据类型要改为System.Data.SQLite,输入文件名,密码后重新创建DB文件。
2.2.2 相关Demo代码
??测试的SQLCipher.db3中已存有user表,表中仅有一个varchar(32)的Name字段,数据仅有一条为sqlcipher。以下是测试相关代码
using System;
using System.Data;
using System.Data.SQLite;
SQLiteConnection clinet = new SQLiteConnection($"Data Source={path3}");
string key = "123456";
clinet.Open();
SQLiteCommand command = clinet.CreateCommand();
command.CommandText = "PRAGMA key = " + key;
command.ExecuteNonQuery();
command.CommandText = "select name from user";
DataTable dt = new DataTable();
SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
adapter.Fill(dt);
var result = dt.Rows[0][0];
clinet.Close();
??运行完毕后,未报错且成功取到结果。
2.3第二种解决方法—Microsoft.Data.Sqlite
??第一种方法实现后,再查找是否有更好的办法来解决。sqlsugar采用的sqlite连接是用的Microsoft.Data.Sqlite中的连接方式,在使用Microsoft.Data.Sqlite连接加密方法时,目前仅找到对应的连接数据类型为SQLCipher加密的文件的方法
2.3.1引用的包
??第一个是引用nuget中的SQLitePCLRaw.bundle_sqlcipher包,我引用的是SQLitePCLRaw.bundle_sqlcipher包的最新版本1.1.14,第二个是Microsoft.Data.Sqlite包,因为sqlsugar中自带了,故就没有再次引用,没有的情况下需要引用Microsoft.Data.Sqlite。
2.3.2 相关Demo代码
??测试的SQLCipher.db3中已存有user表,表中仅有一个varchar(32)的Name字段,数据仅有一条为sqlcipher。以下是测试相关代码
using System;
using System.Data;
using Microsoft.Data.Sqlite;
string path=@"C:\Users\Administrator\Desktop\SQLCipher.db3";
string key="123456";//密码
SqliteConnection client=new SqliteConnection($"Data Source={path}");
client.Open();
SqliteCommand command = client.CreateCommand();
command.CommandText = "PRAGMA key = " + key;
command.ExecuteNonQuery();
command.CommandText = "select name from user";
DataTable dt = new DataTable();
SqliteDataAdapter adapter = new SqliteDataAdapter(command);
adapter.Fill(dt);
var result = dt.Rows[0][0];
client.Close();
??运行完毕后,未报错且成功取到结果。
2.4在sqlsugar中使用
??需要注意的地方是要在数据库开启的时候,先指定密码,再执行SQL语句,两者在同一个开启连接的DB连接中操作。
2.4.1相关Demo代码
??测试的SQLCipher.db3同上,以下是测试相关代码。
using System;
using SqlSugar;
string path=@"C:\Users\Administrator\Desktop\SQLCipher.db3";
string key="123456";//密码
ConnectionConfig config = new ConnectionConfig()
{
DbType = SqlSugar.DbType.Sqlite,
ConnectionString = $"Data Source={path}",
IsAutoCloseConnection = false
};
SqlSugarClient client = new SqlSugarClient(config);
client.Open();
client.Ado.ExecuteCommand($"PRAGMA key ={key}}");
var data = client.Queryable<User>().ToList();
client.Close();
??运行完毕后,未报错且结果在data变量中。
.net core加载加密的sqlite文件失败解决方案
标签:sqli net 密码 sqlite 查询 uga using http ring
本文系统来源:https://www.cnblogs.com/JustToDoIt/p/12443966.html
内容总结
以上是互联网集市为您收集整理的.net core加载加密的sqlite文件失败解决方案全部内容,希望文章能够帮你解决.net core加载加密的sqlite文件失败解决方案所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。