2016-11-18 2 views
0

ich eigene Sammlung haben, die student_id enthält, student_name, student_mark .Und auch die Tabelle mit denselben Spalten in der Datenbank haben. Das Design-Formular enthält einige Steuerelemente zum Aktualisieren des vorhandenen Schülers.Update Collection Wert mit Datenbank in UWP (MVVM)

Vorübergehend werden alle Aktualisierungsvorgänge mit dieser benutzerdefinierten Sammlung durchgeführt. Nehmen wir an, dass wir 100 Schülerdaten in Sammlung und Datenbank haben. Jeder Aktualisierungsvorgang sollte sich in der Sammlung widerspiegeln. Aber was mein Zweifel ist, wie aktualisiere ich diese Werte mit der Datenbank, bevor ich die Anwendung schließe?

Aber wenn ich die Anwendung öffne, sollte die Sammlung alle Werte haben, die in der Datenbank gespeichert sind.

+0

Welche Art von Datenbank? Wie genau benutzt du es? –

+0

mysql .. zuerst füge ich Studentendaten zur Sammlung hinzu ... und addiere die Sammlungswerte zur Datenbank. Wenn ich die Werte in der Sammlung aktualisiere, sollten auch die Datenbankwerte aktualisiert werden. Ich verwende die gleiche Sammlung zum Hinzufügen neuer Werte und zum Abrufen der vorhandenen Werte. – Manikandan

Antwort

0

Aber was meine Zweifel ist, wie ich diese Werte mit der Datenbank

Zunächst aktualisieren Sie, müssen Sie wissen, wie man mit UWP App CRUD Operationen auf MySQL Datenbank zu tun. Bitte beziehen Sie sich dazu auf this sample.

Zweitens haben Sie gemäß Ihrer Beschreibung ein MVVM-Projekt erstellt, um Sammlungsdaten an die Ansicht zu binden. Aber Sie hatten keine Datenschicht für diese MVVM Struktur. Dazu müssen Sie eine Klasse für die Datenschicht erstellen, die die Operationen GRUD ausführt, und den Kontakt mit diesem Datendienst herstellen, und zwar von ViewModel. Weitere Details bitte Referenz this article.

Die Klasse für Datenschicht I nach Ihrer Beschreibung geschrieben, das enthält, wie Update lesen und Löschen von Daten aus mysql Datenbank wie folgt:

public class Student 
{ 
    public int Student_id { get; set; } 
    public string Student_name { get; set; } 
    public string Student_mark { get; set; } 

} 

public class DataService 
{ 
    static string connectionString; 
    public static String Name = "Data Service."; 
    private static ObservableCollection<Student> _allStudents = new ObservableCollection<Student>(); 
    public static ObservableCollection<Student> GetStudents() 
    { 
     try 
     { 
      string server = "127.0.0.1"; 
      string database = "sakila"; 
      string user = "root"; 
      string pswd = "!QAZ2wsx"; 
      connectionString = "Server = " + server + ";database = " + database + ";uid = " + user + ";password = " + pswd + ";SslMode=None;"; 
      using (MySqlConnection connection = new MySqlConnection(connectionString)) 
      { 
       connection.Open(); 
       MySqlCommand getCommand = connection.CreateCommand(); 
       getCommand.CommandText = "SELECT * FROM student"; 
       using (MySqlDataReader reader = getCommand.ExecuteReader()) 
       { 
        while (reader.Read()) 
        { 
         _allStudents.Add(new Student() { Student_id = reader.GetInt32(0), Student_name = reader.GetString(1), Student_mark = reader.GetString(2) }); 
        } 
       } 
      } 
     } 
     catch (MySqlException sqlex) 
     { 
      // Handle it :) 
     } 
     return _allStudents; 
    } 

    public static bool InsertNewStudent(Student newStudent) 
    { 
     // Insert to the collection and update DB 
     try 
     { 
      using (MySqlConnection connection = new MySqlConnection(connectionString)) 
      { 
       connection.Open(); 
       MySqlCommand insertCommand = connection.CreateCommand(); 
       insertCommand.CommandText = "INSERT INTO student(student_id, student_name, student_mark)VALUES(@student_id, @student_name,@student_mark)"; 
       insertCommand.Parameters.AddWithValue("@student_id", newStudent.Student_id); 
       insertCommand.Parameters.AddWithValue("@student_name", newStudent.Student_name); 
       insertCommand.Parameters.AddWithValue("@student_mark", newStudent.Student_mark); 
       insertCommand.ExecuteNonQuery();     
       return true; 
      } 
     } 
     catch (MySqlException sqlex) 
     { 
      return false; 
     } 

    } 
    public static bool UpdateStudent(Student Student) 
    { 
     try 
     { 
      using (MySqlConnection connection = new MySqlConnection(connectionString)) 
      { 
       connection.Open(); 
       MySqlCommand insertCommand = connection.CreateCommand(); 
       insertCommand.CommandText = "Update student Set student_name= @student_name, [email protected]_mark Where student_id [email protected]_id"; 
       insertCommand.Parameters.AddWithValue("@student_id", Student.Student_id); 
       insertCommand.Parameters.AddWithValue("@student_name", Student.Student_name); 
       insertCommand.Parameters.AddWithValue("@student_mark", Student.Student_mark); 
       insertCommand.ExecuteNonQuery(); 
       return true; 
      } 
     } 
     catch (MySqlException sqlex) 
     { 
      // Don't forget to handle it 
      return false; 
     } 

    } 

    public static bool Delete(Student Student) 
    { 
     try 
     { 
      using (MySqlConnection connection = new MySqlConnection(connectionString)) 
      { 
       connection.Open(); 
       MySqlCommand insertCommand = connection.CreateCommand(); 
       insertCommand.CommandText = "Delete from sakila.student where student_id [email protected]_id"; 
       insertCommand.Parameters.AddWithValue("@student_id", Student.Student_id); 
       insertCommand.ExecuteNonQuery(); 
       return true; 
      } 
     } 
     catch (MySqlException sqlex) 
     {     
      return false; 
     } 
    } 
} 

für die Datenbank in TwoWay verbindlich aktualisieren, können wir Umsetzung ist durch die Datenaktualisierungsverfahren in PropertyChanged Ereignis Aufruf wie folgt:

void Person_OnNotifyPropertyChanged(Object sender, PropertyChangedEventArgs e) 
    { 
     organization.Update((StudentViewModel)sender); 
    } 

Für die fertige Demo Sieherunterladen.

+0

Danke @Sunteen Wu – Manikandan

+0

@Manikandan, Wenn ich dir geholfen habe, könntest du bitte die Antwort als akzeptiert markieren? –

+0

ja ok sicher .. – Manikandan