Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从sqlite恢复已删除的数据?_C#_Sqlite_Data Recovery - Fatal编程技术网

C# 如何从sqlite恢复已删除的数据?

C# 如何从sqlite恢复已删除的数据?,c#,sqlite,data-recovery,C#,Sqlite,Data Recovery,我想从SQLite db文件中恢复删除的记录和删除的数据 我用文本编辑器检查我的db文件,我看到丢弃的数据仍然存在 我正在c中使用SQLite3.dll,但是我找不到包含删除数据的open db的某些属性,或者 有图书馆可以帮我吗?还是从sqlite db文件中恢复数据的简单代码 编辑1: 我试图为sqlite找到一个数据恢复库或程序。。经过多次搜索,我找到了 我可以使用IncludeDrop属性为我备份数据,但此库不是免费的,我无法使用它。。我喜欢寻找免费的库或程序…我认为这是不可能的,请参阅

我想从SQLite db文件中恢复删除的记录和删除的数据

我用文本编辑器检查我的db文件,我看到丢弃的数据仍然存在

我正在c中使用SQLite3.dll,但是我找不到包含删除数据的open db的某些属性,或者

有图书馆可以帮我吗?还是从sqlite db文件中恢复数据的简单代码

编辑1:

我试图为sqlite找到一个数据恢复库或程序。。经过多次搜索,我找到了


我可以使用IncludeDrop属性为我备份数据,但此库不是免费的,我无法使用它。。我喜欢寻找免费的库或程序…

我认为这是不可能的,请参阅。我不知道您在文本编辑器中看到的是什么数据。

删除记录时,SQLite会永久删除数据。这将取决于您实现一个模型,其中by数据仅被标记为已删除,或者您可以实现一个存储所有版本数据的系统。为此,可以添加字段来标记这些属性。然后,当您选择时,您可以将其更改为新字段功能的帐户

比如:

SQLite将其所有数据存储在一个文件中。如果您有一个文件系统备份服务,您可以获得旧版本的数据库

SQLite删除记录时,可能会在文件中留下重影数据。这些数据只是垃圾,不允许您在删除之前可靠地返回到上一点


SQLite db文件是二进制文件,如果保存,请使用文本编辑器小心编辑,否则会损坏它

雇佣一家非常昂贵的数据恢复公司,通过分析二进制文件来恢复数据,至少在一定程度上是可能的。您自己可能无法做到这一点,因为正如其他人所说,当您删除记录时,SQLite会永久删除数据,这是事实,因为SQLite中的数据删除操作涉及覆盖文件中描述数据所在位置及其与其他数据的关系的元数据

部分数据可能仍在文件中,但:

指向sqlite使用的数据树的指针消失,文件区域在metedata中标记为可用空间 在使用数据库的过程中,部分空间可能已被覆盖,现在包含垃圾。
如果您在接下来的几个月内无事可做,您可以从分析SQLite文件结构开始,并应用这些知识尝试猜测数据在删除之前可能在文件中的什么位置结束,也就是说,它的元数据被覆盖,因此执行恢复。您需要从这里开始:.

tanx帮助我,但我需要恢复库,我想打开我没有编写程序的db文件。。请检查Edit1,因为SQLite通过写入新的b-树和聚集索引记录等进行删除。。你可能会发现其中的一些片段,但大部分数据可能会永远消失。如果他们一次删除了很大一部分,那么你很可能会在文件中看到剩余的数据。大多数数据都将消失-这不是真的。我只是不小心掉了一个约15k行的表,当用编辑器打开它时,几乎可以看到其中的所有内容。恢复这一点可能很难,yes@Blauhirm你读了我的评论吗?困惑的tanQ但这是可能的,我可以在db文件中看到删除的数据。。请检查编辑1如果您的时间价值低于您的金钱,您必须阅读并手动提取数据。@CL,tanx。。这对我有好处。。我的问题是我居住的国家没有visa卡,也没有网上购物或。。我应该写下来,而不是去买;在处理任何数据库时,我真的不会依赖数据恢复公司,因为DBs倾向于相对快速地重用磁盘页面。
SQLiteConnection.Open(); 
SQLiteDump sqSqlDump = new SQLiteDump(); 
sqSqlDump.Connection = SQLiteConnection1; 
sqSqlDump.IncludeDrop = true;                          //<<-- check here
sqSqlDump.Backup(); 
StreamWriter stream = new StreamWriter("d:\\dump.dmp"); 
stream.WriteLine(sqSqlDump.DumpText); 
stream.Close(); 
select * from mytable where mytable.deleted<>true and etc=etc