2016-03-20 11 views
1

Ich habe eine SQLite-Datenbank an mein Windows Phone 8.1-Projekt angehängt. Die Verbindung funktioniert, aber die von der Datenbank zurückgegebenen Ergebnisse sind null.Wie korrigieren Datenbankfeldzuordnungen in SQLite?

Zuvor habe ich eine question on the null bindings meiner Abfrage gebucht. Aber die vorgeschlagene Antwort hat das Problem eines Null-Ergebnisses nicht gelöst, weshalb ich die Frage erneut posten werde.

Debuggen: die SQLlite Klasse Stepping durch mich, dass die Bindungen null sind sehen, obwohl ich die Typen in meinem DB-Schema und die dazugehörigen Feldzuordnungen in ZoneInfo.cs Berücksichtigung keinen Grund dafür sehen.

enter image description here

ich die Datenbank abfragen, wie folgt, die jedes Feld unter meiner Klasse abbilden sollte Zoneinfo.

  using (var dbConn = new SQLiteConnection(Path.Combine(ApplicationData.Current.LocalFolder.Path, AppDBPath), true)) 
      { 
       List<ZoneInfo> zoneInfo = dbConn.Query<ZoneInfo>("select * from " + tableName).ToList<ZoneInfo>(); 
       ObservableCollection<ZoneInfo> zoneInfoCollection = new ObservableCollection<ZoneInfo>(zoneInfo); 
       return zoneInfoCollection; 
      } 

Frage:

Wie kann ich meine Datenbank-Mappings korrigieren, so dass das Abfrageergebnis nicht leer ist?

**ZoneInfo.cs (mapping class for DB fields)** 

public class ZoneInfo 
{ 

    //The ObjectId property is marked as the Primary Key 
    [SQLite.PrimaryKey] 
    [Column("objectId")] 
    public string ObjectId { get; set; } 

    [Column("zone")] 
    public string ZoneName { get; set; } 

    [Column("tariff_ph")] 
    public float TariffPH { get; set; } 

    [Column("tariff_pd")] 
    public float TariffPD { get; set; } 

    [Column("restrictions")] 
    public string Restrictions { get; set; } 

    [Column("days_of_operation")] 
    public string DaysOpen { get; set; } 

    [Column("hours_of_operation")] 
    public string HoursOpen { get; set; } 



    public ZoneInfo() 
    { 

    } 


    public ZoneInfo(string objectId, string zoneName, int tariffPH, int tariffPD, 
     string restrictions, string daysOpen, string hoursOpen) 
    { 

     ObjectId = objectId; 
     ZoneName = zoneName; 
     TariffPH = tariffPH; 
     TariffPD = tariffPD; 
     Restrictions = restrictions; 
     DaysOpen = daysOpen; 
     HoursOpen = hoursOpen; 
    } 



} 

Abfrageergebnis: (Sie sehen, dass das Ergebnis des Feld Abfrage sind alle null was nicht der Fall in der Datenbank:

enter image description here

Der DB-Schema wird wie folgt und dies ist ein Link auf die DB file zum Testen:

enter image description here

+0

Ihre vorige [Frage] (http://stackoverflow.com/q/35808724/2898399) enthielt ein Beispiel Repo. Bei der Ausführung wurde der Lese- und Bindungswert von 'ReadZones' gefunden. Sie sind also sicher, dass es sich um einen Binding-Schema-Fehler handelt, nicht um einige andere Änderungen, die Sie möglicherweise vorgenommen haben. – Jerin

+0

@Jerin Der DBHelper-Code ist derselbe, da ich diese Frage geschrieben habe..so nicht sicher, was der Unterschied sein könnte. Mein aktuelles Repo ist hier https://github.com/BrianJVarley/Parking-Tag-Sms-Sender/blob/master/Parking%20Tag%20Picker%20WRT/Helpers/DataBaseHelper.cs –

+1

Getestet von Ihrem Repo kann ich das empfangen Werte Ihrer Datenbank innerhalb der 'TagRequestViewModel' Klasse, die' InitZoneInfoAsync() 'Methode liefert den Wert für die Zeile' var zoneResult = _dbHelper.ReadZones (tableName); 'So wird Ihre' ObservableCollection ReadZones' aufgerufen und funktioniert einwandfrei. Könnten Sie bitte angeben, wo Sie Nullwert erhalten? – Jerin

Antwort

0

Das Schema Fehler causin Die ungültigen Zuordnungsbindungen waren das Ergebnis einer veralteten SQLLite-Datenbank, auf die auf dem Gerät verwiesen wurde.

Das Löschen der App vom Telefon und das Neuerstellen der App über Visual Studio führte dazu, dass die Datenbank mit den aktualisierten korrekten Zuordnungen erneut im Dateisystem bereitgestellt wurde. :)

1.From the Start screen, swipe left to display the Apps list. Alternatively from the Start screen, tap the right arrow (located in the lower-right). 
2.Touch and hold an app. 
3.Tap uninstall. 
4.Tap yes. 
Verwandte Themen