2016-05-22 3 views
0

Wie kopiert man die Elemente von ListView in eine Datenbank? Zum Beispiel: Ich habe eine Liste der installierten Anwendung vom PC in einer ListView, wie Sie diese Elemente in eine String-Spalte in einer Datenbank einfügen Programs?So speichern Sie ListView in C# (installierte Anwendungen) in die Datenbank

private void button1_Click(object sender, EventArgs e) 
{ 
    String uninstallKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; 

    RegistryKey r = Registry.LocalMachine.OpenSubKey(uninstallKey); 

    foreach (String skName in r.GetSubKeyNames()) 
    { 
     RegistryKey rk = r.OpenSubKey(skName); 

     try { 
      var displayName = rk.GetValue("DisplayName"); 
      ListViewItem item; 

      if (displayName != null) { 
       item = new ListViewItem(new string [] { displayName.ToString() }); 
       listView1.Items.Add(item); 
      } 
     } 
     catch (Exception ex) 
     { } 
    } 
} 

Hilfe! Ich brauche Artikel zu einer MySQL-Datenbank hinzufügen

Antwort

0

Grundsätzlich, was Sie tun müssen, ist speichern eine Zeile pro Anwendung, die Sie gefunden haben. Sie können dies am effizientesten tun, indem Sie eine Schleife verwenden und die SQL-Abfrage ordnungsgemäß parametrisieren, um die Daten einzufügen.

So etwas (ich bin nicht allzu vertraut mit MySQL, ein SQL Server Kerl - vielleicht meine Syntax ein wenig Anpassung arbeiten muss - aber Sie sollten die allgemeine Vorstellung davon, wie es weitergehen erhalten):

// set up connection and define INSERT command 
string connectionString = .....(this typically is read from a config file)..... ; 

// not sure if you can use @ProgramName as parameter, or ?ProgramName... - seen both 
string insertQry = "INSERT INTO Programs(ProgramName) VALUES(@ProgramName);"; 

// define the connect and command objects 
using (MySqlConnection conn = new MySqlConnection(connectionString)) 
using (MySqlCommand cmd = new MySqlCommand(insertQry, conn)) 
{ 
    // define the parameter(s) *ONCE*, outside of the loop - including their type and max length 
    cmd.Parameters.Add("@ProgramName", MySqlDbType.VarChar, 250); 

    // open connection 
    conn.Open(); 

    // now, loop over your applications found in the registry; I'd suggest you put those 
    // applications found into a separate List<string> for easier use..... 
    foreach(ListViewItem item in listView1.Items) 
    { 
     // set parameter 
     cmd.Parameters["@ProgramName"].Value = item.DataItem.ToString(); // would be much simpler with a List<string> .... 

     // execute insert query for that parameter value 
     int rowsInserted = cmd.ExecuteNonQuery(); 
    } 

    // close connection 
    conn.Close(); 
} 

Ich muss item.DataItem verwenden, um an die tatsächlichen Daten innerhalb des ListViewItem Objekts zu erhalten, in dem Sie Ihre Namen für erkannte Anwendungen gespeichert haben. Wie ich schon sagte - wenn Sie die in der Registrierung gefundenen Anwendungsnamen in einem List<string> discoveredApplications speichern würden, der Code wäre definitiv einfacher zu schreiben und zu verstehen ....

Verwandte Themen