C# 在xamarin表单pcl上执行查询时,没有这样的表sqlite

C# 在xamarin表单pcl上执行查询时,没有这样的表sqlite,c#,database,sqlite,xamarin.forms,portable-class-library,C#,Database,Sqlite,Xamarin.forms,Portable Class Library,我在读取SQLite数据库上的表时遇到问题 我的OBJ_用户类: 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; } publi

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

我的OBJ_用户类:

    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

pcl连接(数据库是右连接):

database=DependencyService.Get().DbConnection();

查询:

var test = database.Query<OBJ_User>("SELECT * FROM OBJ_User");
var test=database.Query(“SELECT*FROM OBJ_User”);
启动查询时,出现以下错误:

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

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


如果您想在注释中输入其他信息,我将回答SQLite库不知道如何将object类型的属性映射到SQLite列。SQLite库默认支持以下列类型:string、int、double、byte[]、DateTime。

是否调用
database.CreateTable()代码中的任何地方?我知道数据库中已经有了该表,但是您可能需要“创建”它,以便SQLite库获得映射。另外,参数化查询有助于避免拼写错误(即
var test=database.query(“SELECT*FROM?”,nameof(OBJ_user))
The?刚刚用参数填充,库在内部做了一些工作,以确保其格式正确。如果我使用database.CreateTable();我会出现以下错误:System.NotSupportedException:不知道System.Object,那么如果我使用var test=database.Query(“SELECT*FROM?”,nameof(OBJ_user));我在OBJ_用户上出错。您能为OBJ_用户类声明添加代码吗?我认为这与类库不支持的类声明中的非CLR类型列表有关。我添加了类,您认为这是错误的类吗?我尝试删除类型为“object”的元素,我只剩下字符串和int对象..这很有效!谢谢。我签署了正确的答案。最后一个问题,如果我们不执行“database.CreateTable();”表没有创建,您可以使用现有数据库?因为我有一个数据库有大约1000条记录。问题仍然是,如果我创建表,映射是否有效,但如果我创建表,我将丢失现有记录。CreateTable不会删除数据库中的任何记录。如果表不存在,它只会创建一个表并将映射添加到连接中。这就是你要问的吗?我在你的回答后尝试过,非常感谢。效果很好
database = DependencyService.Get<IDatabaseConnection>().DbConnection();
var test = database.Query<OBJ_User>("SELECT * FROM OBJ_User");