2017-02-07 2 views
1

У меня возникла проблема с чтением таблиц базы данных SQLite.Нет такой таблицы sqlite при выполнении запроса на форматах xamarin pcl

мой 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(); 
    } 

Android

[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); 
     } 
    } 
} 

ПКЛ соединение (база данных право подключения):

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

enter image description here

запрос:

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

когда я запустить запрос у меня есть эта ошибка:

SQLite.SQLiteException: no such table: OBJ_User

enter image description here

OBJ_User находится в дабатасе с одной записью. Почему соединение не отображает таблицу? переменная базы данных правильно подключается к базе данных sqlite, я не понимаю, потому что база данных не получает сопоставление из файла sqlite. Решение?

если вы хотите другую информацию, напишите мне в комментариях, я отвечу

+0

Вы вызываете 'database.CreateTable ();' где-нибудь в вашем коде? Я знаю, что у вас уже есть таблица в базе данных, но вам может понадобиться «Создать» ее для библиотеки SQLite, чтобы получить сопоставление. –

+0

Также в качестве дополнительной заметки параметризация вашего запроса может быть полезна для предотвращения орфографических ошибок (например, 'var test = database.Query (« SELECT * FROM? », Nameof (OBJ_user));' «Просто заполняется» in с параметром, и библиотека выполняет некоторую работу внутри, чтобы убедиться, что она отформатирована правильно. –

+0

если я делаю database.CreateTable (); я получаю эту ошибку: System.NotSupportedException: не знаю о System.Object, то если i do var test = database.Query («SELECT * FROM?», nameof (OBJ_user)), у меня есть ошибка в OBJ_User. –

ответ

2

SQLite библиотека не знает, как отобразить свойства объекта типа в SQLite колонке. Библиотека SQLite по умолчанию поддерживает следующие типы столбцов: string, int, double, byte [], DateTime.

+1

Я попытался удалить элемент с типом «объект», я оставил только строку и объект int..that works.! Благодарю. Я подписываю правильный ответ. –

+0

Последний вопрос, если мы не делаем «database.CreateTable ();» таблица не создана, вы можете использовать существующую базу данных? так как у меня есть около 1000 записей. –

+0

Проблема остается, делает сопоставление, а если я создаю таблицу, но я собираюсь потерять существующие записи, если создам таблицу. –

Смежные вопросы