c# - 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();
}
}
}
解决方案
SQLite 实现了原子事务,但这些保证仅在仅通过 SQLite 库访问数据库文件时才成立。
在您的情况下,数据库文件很可能是在交易过程中从您朋友的计算机上复制的,即,某些更改并未最终出现在已发布的版本中。避免这种情况的唯一方法是确保在发布时当前没有文件被修改。
推荐阅读
- javascript - 汇总 node_modules 的完整文件路径或将每个外部模块捆绑在单独的目录中
- php - 如何使 laravel 成为我项目的作曲家依赖项
- regex - regexp_substr 正在跳过所有 &X
- mysql - 使用 mysqldump 编码问题转储 MariaDB 数据库
- android - Android 12 - Material You icons
- spring - 何时使用@EnableHypermediaSupport?
- grails - Passing a Closure as a method argument in Groovy
- c# - Why is the inserted value only visible while the program is running?
- mongodb - 当存在另一个字段时,Mongodb 投影会排除我的一个字段
- javascript - 如何在数组中搜索不同的参数?