【发布时间】: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<OBJ_User>();?我知道您已经在数据库中拥有该表,但您可能需要为 SQLite 库“创建”它以获取映射。 -
另外作为旁注,参数化查询有助于避免拼写错误(即
var test = database.Query<OBJ_User>("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