首页 > 解决方案 > Unity 中的 SQLite 数据库文件损坏

问题描述

嗨,我在 Unity 项目中使用 SQLite 作为数据库。由于某种原因,数据库文件损坏了,但幸运的是我有备份,所以我没有丢失任何东西。我认为腐败背后的原因是使用统一协作来共享数据库文件。我的问题是我该怎么做才能不再次损坏文件?在玩家的本地游戏文件中发布游戏后也会损坏吗?

这是我用来执行命令的静态方法,也许它有问题。

public static void Execute(string command, ref DataTable datatable)
{
    string dbPath = ("Data Source=" + Application.dataPath + "/database.s3db");
    using (SqliteConnection cnt = new SqliteConnection(dbPath))
    {
        using (SqliteCommand cmd = new SqliteCommand(command, cnt))
        {
            using (SqliteDataAdapter adapter = new SqliteDataAdapter(cmd))
            {
                adapter.Fill(datatable);
            }
        }
    }
}

public static void Execute(string command)
{
    string dbPath = ("Data Source=" + Application.dataPath + "/database.s3db");
    using (SqliteConnection cnt = new SqliteConnection(dbPath))
    {
        using (SqliteCommand cmd = new SqliteCommand(command, cnt))
        {
            cnt.Open();
            cmd.ExecuteNonQuery();
            cnt.Close();
        }
    }
}

标签: c#databasesqliteunity3d

解决方案


SQLite 实现了原子事务,但这些保证仅在仅通过 SQLite 库访问数据库文件时才成立。

在您的情况下,数据库文件很可能是在交易过程中从您朋友的计算机上复制的,即,某些更改并未最终出现在已发布的版本中。避免这种情况的唯一方法是确保在发布时当前没有文件被修改。


推荐阅读