Einstellungen in der Datenbank speichern Einstellungen in der Datenbank speichern
Ergebnis 1 bis 10 von 10
  1. Hallo Zusammen

    Ich habe bisher meine Anwendungseinstellungen immer in den Local Storage gelegt. Da ich mittlerweilen auf eine Datenbank umgestiegen bin, würde ich gerne auch die Einstellungen dahin verschieben. Kennt jemand ein gutes Beispiel wie das aussehen könnte? Meine bisherige Logik adaptieren hatte leider sehr beschränkten Erfolg ^^

    Ich hätte mir vorgestellt eine Tabelle zu machen mit einem Key und einem Value. Jedoch habe ich keinen sauberen Weg gefunden anschliessend darauf zuzugreifen.

    Danke und Gruss
    Nino
    0
     

  2. 25.04.2013, 09:50
    #2
    Was für eine Datenbank verwendest du denn? SQLite oder den SQL Server Compact via LINQ?
    0
     

  3. Den SQL Server Compact via LINQ.

    Bisher hatte ich folgendes an Code um auf die Einstellungen bequem zugreifen zu können:

    Code:
    // Our isolated storage settings
            IsolatedStorageSettings isolatedStore;
    
            // The isolated storage key names of our settings
            const string VersionKeyName = "VersionKeyName";
    
            // The default value of our settings
            const string VersionKeyDefault = "1.0";
    
            public AppSettings()
            {
                try
                {
                    // Get the settings for this application.
                    isolatedStore = IsolatedStorageSettings.ApplicationSettings;
    
                }
                catch
                {
                    MessageBox.Show(AppResources.FehlerAllgemeinMeldung);
                }
            }
    
            public bool AddOrUpdateValue(string Key, Object value)
            {
                bool valueChanged = false;
    
                // If the key exists
                if (isolatedStore.Contains(Key))
                {
                    // If the value has changed
                    if (isolatedStore[Key] != value)
                    {
                        // Store the new value
                        isolatedStore[Key] = value;
                        valueChanged = true;
                    }
                }
                // Otherwise create the key.
                else
                {
                    isolatedStore.Add(Key, value);
                    valueChanged = true;
                }
    
                return valueChanged;
            }
    
            public valueType GetValueOrDefault<valueType>(string Key, valueType defaultValue)
            {
                valueType value;
    
                // If the key exists, retrieve the value.
                if (isolatedStore.Contains(Key))
                {
                    value = (valueType)isolatedStore[Key];
                }
                // Otherwise, use the default value.
                else
                {
                    value = defaultValue;
                }
    
                return value;
            }
    
            public void Save()
            {
                isolatedStore.Save();
            }
    
            public string InstalledVersion
            {
                get
                {
                    return GetValueOrDefault<string>(VersionKeyName, VersionKeyDefault);
                }
                set
                {
                    AddOrUpdateValue(VersionKeyName, value);
                    Save();
                }
            }
    Damti konnte ich bequem über die AppSettingsklasse auf die jeweiligen Properties zugreifen. Das würde ich jetzt gerne über eine entsprechende ViewModel Klasse machen die anschliessend auf die Datenbank geht.
    0
     

  4. Hi,

    hier ein detailliertes Tutorial: http://msdn.microsoft.com/en-us/libr...vs.105%29.aspx

    Viele Grüße,
    Tamay Gündüz
    0
     

  5. Danke für den Link, aber ich suche eher eine Art BestPractice für den Zugriff auf eine Tabelle mit Settings als eine generelle Einführung in Linq-To-SQL.
    0
     

  6. Nunja, was du in der Datenbank speicherst ist ja völlig egal. Du machst einen dbcontext auf und greifst auf deine Daten zu.
    Wenn es Settings sein sollen erstellst du dir entsprechend vorher die passende Tabelle. Ich sehe nicht ganz das Problem? Dir Vorgehensweise unterscheidet sich ja nur insofern vom speichern in einer anderen quelle (z.b. storagesettings) als das du einen anderen Datenprovider verwendest..

    Zitat Zitat von Nemoc Beitrag anzeigen
    Ich hätte mir vorgestellt eine Tabelle zu machen mit einem Key und einem Value. Jedoch habe ich keinen sauberen Weg gefunden anschliessend darauf zuzugreifen
    - Kannst du das Problem eventuell etwas spezifizieren?
    0
     

  7. das Problem insofern ist das du normalerweise eine Collection herausholst diese anzeigst, etwas auswählst und wieder speicherst. Bei Einstellungen willst du ja aber ganz konkrete Items aus der Collection. Und das vorzugsweise verfügbar über ein Settingsobject wie bei einem Property.

    Weiss nicht genau ob es so verständlicher ist, aber mir fällt im Moment kein besserer Weg ein es zu beschreiben.
    0
     

  8. Also angenommen ich habe eine Tabelle
    Code:
    [Table]
        public class SettingsItem : INotifyPropertyChanged, INotifyPropertyChanging
        {
            public event PropertyChangedEventHandler PropertyChanged;
            public event PropertyChangingEventHandler PropertyChanging;
    
            
            private string _settingsItemKey;
    
            [Column(IsPrimaryKey = true, DbType = "NVarChar(100) NOT NULL", CanBeNull = false,
                AutoSync = AutoSync.OnInsert)]
            public string SettingsItemKey
            {
                get { return _settingsItemKey; }
                set
                {
                    if (_settingsItemKey != value)
                    {
                        NotifyPropertyChanging("SettingsItemKey");
                        _settingsItemKey = value;
                        NotifyPropertyChanged("SettingsItemKey");
                    }
                }
            }
    
            
            private string _settingsItemVal;
    
            [Column(IsPrimaryKey = false,  DbType = "NVarChar(100)", CanBeNull = true,
                AutoSync = AutoSync.OnInsert)]
            public string SettingsItemVal
            {
                get { return _settingsItemVal; }
                set
                {
                    if (_settingsItemVal != value)
                    {
                        NotifyPropertyChanging("SettingsItemVal");
                        _settingsItemVal = value;
                        NotifyPropertyChanged("SettingsItemVal");
                    }
                }
            }
    ...
    Diese habe ich dann vom Code aus generieren lassen und möchte jetzt einen Wert abfragen bzw. falls nicht existent einfügen

    Code:
     // insert if not existing
                    if (!db.SettingsItems.Any(item => item.SettingsItemKey == "Einstellung"))
                    {
                        var t = new SettingsItem() {SettingsItemKey = "Einstellung", SettingsItemVal = "meinWert"};
                        db.SettingsItems.InsertOnSubmit(t);
                        db.SubmitChanges();
                    }
    
                    // get from db
                    var selectedItem = db.SettingsItems.Single(item => item.SettingsItemKey == "Einstellung");
    // notiz: myproperty hatte ich auf ein textblock gebindet .. ist nicht weiter relevant
                    MyProperty = selectedItem.SettingsItemKey + " -- " + selectedItem.SettingsItemVal;
    Das dürfte genau den Einsatzzweck abdecken irgendwelche Settingwerte abzuspeichern, oder?
    Ansonsten habe ich deine Frage wiederholt missverstanden und du müsstest mich aufklären

    Viele Grüße,
    Tamay Gündüz
    1
     

  9. Das sieht vielversprechend aus. Probier ich nachher gleich mal aus, danke =)
    0
     

  10. Huhu

    Mit Hilfe des obigen Beispiels und etwas suchen hab ichs hinbekommen. Der Code sieht nun so aus:

    Definition der Einstellungen der Defaultwerte.

    Code:
    const string SETTING_KEYNAME = "SettingName";
    
    const double SETTING_KEYDEFAULT = 8;

    Methoden zum setzten und auslesen der Einstellungen
    Code:
    public void AddOrUpdateValue(string key, Object value)
    {
        if (!db.Settings.Any(item => item.Key == key))
        {
              var t = new Setting() { Key = key, Value = value.ToString() };
              db.Settings.InsertOnSubmit(t);
              db.SubmitChanges();
        }
    }
    
    public valueType GetValueOrDefault<valueType>(string key, valueType defaultValue)
    {
        valueType value;
                
        if (db.Settings.Any(item => item.Key == key))
        {
               var selectedItem = db.Settings.Single(item => item.Key == key);
               value = (valueType)Convert.ChangeType(selectedItem.Value, typeof(valueType), CultureInfo.InvariantCulture);   
         }
         else
         {
              value = defaultValue;
         }
    
          return value;
    }
    
    public double SettingName
    {
         get
         {
             return GetValueOrDefault<double>(SETTING_KEYNAME, SETTING_KEYDEFAULT);
          }
          set
          {
             AddOrUpdateValue(SETTING_KEYNAME, value);
          }
    }
    (Sorry für die unschöne Formatierung )


    Danke für die Hilfe! =)

    Gruss
    Nino
    0
     

Ähnliche Themen

  1. Kleiner Fehler in der Datenbank
    Von nb4fcb im Forum Kritik, Lob und Wünsche zu PocketPC.ch
    Antworten: 1
    Letzter Beitrag: 26.11.2012, 14:13
  2. Antworten: 0
    Letzter Beitrag: 25.05.2011, 10:58
  3. wo finde ich folgende Einstellungen in der Registry
    Von xenon80 im Forum Touch HD Tweaks
    Antworten: 5
    Letzter Beitrag: 24.06.2009, 09:15
  4. Bluetothe Einstellungen in der Registry?
    Von Apfelfrosch im Forum HTC Touch Dual
    Antworten: 0
    Letzter Beitrag: 28.06.2008, 14:40

Besucher haben diese Seite mit folgenden Suchbegriffen gefunden:

datenbank

settings in db speichern