【问题标题】:No such table sqlite when execute query on xamarin forms pcl在 xamarin 表单 pcl 上执行查询时没有这样的表 sqlite
【发布时间】:2017-06-24 20:38:24
【问题描述】:

我在读取 SQLite 数据库中的表时遇到问题。

我的 OBJ_User 类:

    namespace Fimap.Models
{
    public class OBJ_User
    {
        public int DLR_Id { get; set; }
        public string DLR_Username { get; set; }
        public string DLR_Password_Hash { get; set; }
        public object DLR_Nome { get; set; }
        public string DLR_Cognome { get; set; }
        public int DLR_Tipo { get; set; }
        public string DLR_Azienda { get; set; }
        public object DLR_Telefono { get; set; }
        public object DLR_Email { get; set; }
        public int DLR_Abilitato { get; set; }
        public object DLR_Time_Zone { get; set; }
        public object DLR_Country { get; set; }
        public string DLR_Culture { get; set; }
        public object DLR_Email1 { get; set; }
        public object DLR_MCC_Modello_Alias { get; set; }
        public object DLR_Anagrafica { get; set; }
        public object DLR_Firma { get; set; }
        public bool IsFIMAP { get; set; }
        public bool IsSTANDARD { get; set; }
        public bool IsDealerOrFimap { get; set; } //true dealer - false user
        public object DLR_Tipo_Esteso { get; set; }
        public object DLR_Abilitato_Esteso { get; set; }
    }
}

我在 pcl 项目中的界面:

public interface IDatabaseConnection
    {
        SQLite.SQLiteConnection DbConnection();
    }

安卓

[assembly: Xamarin.Forms.Dependency(typeof(DatabaseConnection_Android))]
namespace Fimap.Droid
{
    public class DatabaseConnection_Android : IDatabaseConnection
    {
        public SQLiteConnection DbConnection()
        {
            var dbName = "FimapDB.db3";
            var path = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), dbName);
            return new SQLiteConnection(path);
        }
    }
}

iOS

[assembly: Xamarin.Forms.Dependency(typeof(DatabaseConnection_iOS))]
namespace App.iOS
{
    public class DatabaseConnection_iOS : IDatabaseConnection
    {
        public SQLiteConnection DbConnection()
        {
            var dbName = "FimapDB.db3";
            string personalFolder = System.Environment.GetFolderPath(Environment.SpecialFolder.Personal);
            string libraryFolder = Path.Combine(personalFolder);
            var path = Path.Combine(libraryFolder, dbName);
            return new SQLiteConnection(path);
        }
    }
}

pcl连接(数据库正确连接):

database = DependencyService.Get<IDatabaseConnection>().DbConnection();

查询:

var test = database.Query<OBJ_User>("SELECT * FROM OBJ_User");

当我启动查询时出现此错误:

SQLite.SQLiteException:没有这样的表:OBJ_User

OBJ_User 在具有一条记录的数据库中。 为什么连接不映射表? 数据库变量正确连接到数据库 sqlite,我不明白,因为数据库没有从 sqlite 文件获取映射。 解决方案?

如果你想知道其他信息在评论中写给我,我会回答

【问题讨论】:

  • 您是否在代码中的任何位置调用database.CreateTable&lt;OBJ_User&gt;();?我知道您已经在数据库中拥有该表,但您可能需要为 SQLite 库“创建”它以获取映射。
  • 另外作为旁注,参数化查询有助于避免拼写错误(即var test = database.Query&lt;OBJ_User&gt;("SELECT * FROM ?", nameof(OBJ_user)); ? 只是用参数填充,库在内部做一些工作以确保它是格式正确。
  • 如果我做 database.CreateTable();我收到此错误:System.NotSupportedException:不了解 System.Object,然后如果我这样做 var test = database.Query("SELECT * FROM ?", nameof(OBJ_user));我在 OBJ_User 上有错误。
  • 您可以为您的 OBJ_User 类声明添加代码吗?我认为这与您的类声明中包含非 CLR 类型的列表有关,而库不支持该列表。 link
  • 我添加了课程,你认为这是错误的课程吗?

标签: c# database sqlite xamarin.forms portable-class-library


【解决方案1】:

SQLite 库不知道如何将类型 object 的属性映射到 sqlite 列。 SQLite 库默认支持以下列类型:string、int、double、byte[]、DateTime。

【讨论】:

  • 我试图删除类型为“object”的元素,我只留下了 string 和 int object..这有效。!谢谢。我在正确答案上签名。
  • 最后一个问题,如果不做“database.CreateTable ();”表没有创建,可以使用现有的数据库吗?因为我有一个大约 1000 条记录。
  • 问题仍然存在,是否映射,如果我创建表有效,但如果我创建表,我将丢失现有记录。
  • CreateTable 不会删除您在数据库中的任何记录。如果它不存在,它会简单地创建一个表并将该映射添加到连接中。你问的是这个吗?
  • 在您回复后我已经尝试过了,非常感谢。好作品
猜你喜欢
  • 2021-01-13
  • 2015-02-13
  • 2020-05-24
  • 1970-01-01
  • 2018-06-15
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多