Ergebnis 1 bis 10 von 10
-
entwickelt Apps
- 25.04.2013, 09:45
- #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
-
Gehöre zum Inventar
- 25.04.2013, 09:50
- #2
Was für eine Datenbank verwendest du denn? SQLite oder den SQL Server Compact via LINQ?
-
entwickelt Apps
- 25.04.2013, 10:07
- #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(); } }
-
- 25.04.2013, 19:57
- #4
Hi,
hier ein detailliertes Tutorial: http://msdn.microsoft.com/en-us/libr...vs.105%29.aspx
Viele Grüße,
Tamay Gündüz
-
entwickelt Apps
- 25.04.2013, 20:44
- #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.
-
- 25.04.2013, 21:47
- #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..
- Kannst du das Problem eventuell etwas spezifizieren?
-
entwickelt Apps
- 25.04.2013, 21:53
- #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.
-
- 25.04.2013, 23:24
- #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"); } } } ...
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;
Ansonsten habe ich deine Frage wiederholt missverstanden und du müsstest mich aufklären
Viele Grüße,
Tamay Gündüz
-
entwickelt Apps
- 26.04.2013, 08:03
- #9
Das sieht vielversprechend aus. Probier ich nachher gleich mal aus, danke =)
-
entwickelt Apps
- 28.04.2013, 22:53
- #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); } }
)
Danke für die Hilfe! =)
Gruss
Nino
Ähnliche Themen
-
Kleiner Fehler in der Datenbank
Von nb4fcb im Forum Kritik, Lob und Wünsche zu PocketPC.chAntworten: 1Letzter Beitrag: 26.11.2012, 14:13 -
Was liegt in der Datenbank mit den persönlichen Informationen?
Von konradMD im Forum Samsung Galaxy SAntworten: 0Letzter Beitrag: 25.05.2011, 10:58 -
wo finde ich folgende Einstellungen in der Registry
Von xenon80 im Forum Touch HD TweaksAntworten: 5Letzter Beitrag: 24.06.2009, 09:15 -
Bluetothe Einstellungen in der Registry?
Von Apfelfrosch im Forum HTC Touch DualAntworten: 0Letzter Beitrag: 28.06.2008, 14:40
Pixel 10 Serie mit Problemen:...