我的sqlite3数据库不显示设备中的列值,但它在模拟器中显示

时间:2014-07-16 12:42:30

标签: ios sqlite xamarin ios-simulator

我的数据库不会被复制到我的设备上,但它会模拟到模拟器。

这是我正在做的事情:

从终端创建一个新的sqllite3数据库:

sqlite> create table myTable (id integer primary key, name text);
sqlite> insert into myTable (name) values ('john');
sqlite> select * from myTable;
1|john

这将在此路径中创建一个db:users / John / iosApp.db

然后我关闭终端并将该数据库复制到我的xamarin项目并将其buildAction设置为'content'。

这是我的模特:

[Table("myTable")]
public class MyTable
{
    [PrimaryKey, AutoIncrementAttribute, Column("id")]
    public int ID {get; set;}

    [Column("name")]
    public string Name { get; set; }
}

我这样做是为了将数据库复制到Document文件夹:

string pathToDatabase = "iosApp.db";
userPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), pathToDatabase);
File.Delete (userPath); // delete first and copy next
File.Copy (pathToDatabase, userPath);
var myDB = new SQLiteConnection (userPath);
MyTable myTable = myDB.Get<MyTable> (1);

然后我运行应用程序并在上面代码的最后一行之后设置了一个断点,我将鼠标悬停在myTable上:

如果我使用模拟器,我会看到ID的模式和值为1,而Name的模式和值为'john'。

如果我正在使用该设备,我会看到架构,但ID为0,而Name为null!

查看我使用设备时的路径,请指出: “/private/var/mobile/Applications/277749D4-C5CC-4BF4-8EF0-23B23833FCB1/Documents/iosApp.db”

我使用iFunBox加载了文件,db文件的大小确实为

我尝试了以下所有方法:

  • 项目中的全部清除
  • 重建所有
  • 从项目中删除了'debug'文件夹
  • 重启Xamarin
  • 甚至重启机器

但仍然是相同的行为,我还应该尝试哪些能够看到ID和名称的值?

我的sdk版本已附加enter image description here

更新:

经过大量的更改和清理后,我设法显示除标识列显示为0之外的所有列的值。困惑的是,我回到了xamarin示例项目:http://developer.xamarin.com/recipes/ios/data/sqlite/create_a_database_with_sqlitenet/ 它正确显示了身份的价值。 试图为我的项目引入类似的代码,但没有成功。 为了解决版本问题的可能性,我从这个链接下载了最新的sqlite: http://components.xamarin.com/gettingstarted/sqlite-net/true

相同的行为......我在项目中创建了一个全新的页面,使用了示例所使用的引用,并且只有代码来创建示例表。同样的行为,身份值显示在另一个项目中但不是我的。这让我得出结论,我的项目中有一些完全古怪的东西。现在我正在考虑创建一个全新的项目并将我的文件移动到新的项目之后,首先要确保能够在我的模型中看到我的id的值。保持健美,我会确保更新这个帖子。

如果您有任何指示,请分享

1 个答案:

答案 0 :(得分:0)

我无法找到问题的解决方案,但我找到了另一种创建数据库的方法,结果比原来的更好。 需要注意的一件重要事情是,在最初的问题(上面的详细信息)中,自从我开始开发应用程序以来,数据库代码已经运行了几个月。我不知道它什么时候开始表现不好,但我怀疑是因为下载了新的Xamarin 3.0。我无法想到任何其他原因。

所以,为了解决我的问题,我做了两件主要事情:

  1. 我按照此链接介绍了如何创建数据库和表并执行CRUD操作:http://components.xamarin.com/gettingstarted/sqlite-net/true 这种方法似乎是创建数据库的最新方法。它是:发布于 2014年6月24日。它有一个SQLite.dll,而我之前的解决方案是使用SQLite.cs文件。所以,现在我正在运行时创建我的数据库。

  2. 有些东西还没有使用新方法。它给了我一个对象null异常错误。我没有花太多时间来调查它。当我为主键和标识值提供值时,错误就消失了。实际上,这可能是我之前问题的解决方案。如果我对新方法不满意的话,我会尝试提供旧代码的标识值。

    我希望这有助于某人。