Xamarin和SQLite:修复损坏的数据库并缩小

时间:2017-04-04 09:09:41

标签: ios sqlite xamarin.forms

有没有办法从代码中收缩数据库?我在我的数据库中发现一些表已损坏:如何从代码中检测到并修复它?

当我尝试使用Execute更新特定表格中的记录时,我始终收到Corrupt错误。

表的定义是

[Table("tbl_Colour")]
public class Colour : BaseTableListing {
}

public class BaseTableListing : ITableEntity
{
    [PrimaryKey, AutoIncrement]
    [Indexed]
    public int Id { get; set; } = 0;

    public string CreatedBy { get; set; } = "";

    public DateTime CreatedDate { get; set; } = DateTime.Now;

    // more fields
    // ...
}

查询

UPDATE tbl_Colour SET IsUpdated = 0, 
SynchronizeDate=CAST((((JulianDay('2017-04-04 09:22:12', 'localtime') 
    - 2440587.5)*86400.0) + 62135596800) * 10000000 AS BIGINT) 
WHERE ID = 57;

提前谢谢。

2 个答案:

答案 0 :(得分:0)

收缩sqlite文件的命令是 VACUUM https://sqlite.org/lang_vacuum.html

重建文件,也许它可以解决你的问题。

答案 1 :(得分:0)

我的解决方案是database,如果您的解决方案或项目中的数据库是

/// <summary>
/// Compacts the database.
/// </summary>
public void CompactDatabase()
{
    try
    {
        SQLiteCommand cmd = database.CreateCommand("vacuum");
        cmd.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
        Debug.WriteLine("CompactDatabase has an error: " + ex.Message);

        // if you use MobileCenter
        Analytics.TrackEvent("CompactDb Error", new Dictionary<string, string> {
            { "Message", ex.Message },
            { "Source", ex.Source },
            { "StackTrace", ex.StackTrace.ToString() }
        });
    }
}