2017-07-21 3 views
0

System.InvalidOperationException: Sammlung wurde geändert;Aufzählung möglicherweise nicht ausgeführt

private void btnGetUpdatedSchema_Click(object sender, EventArgs e) 
{ 
    lviewMainDbSchema.Items.Clear(); 

    string conString = null; 

    conString = "Data source=" + txtUpdatedServerName.Text + ";Password=" + txtUpdatedPassword.Text + ";Initial Catalog=" + txtUpdatedDatabaseName.Text + ";User ID=" + txtUpdatedUserId.Text + ";"; 
    con = new SqlConnection(conString); 
    try 
    { 
     int tblTotal = 0; 
     GetTables(conString, tblMainList, tblTotal); 
     foreach (var list in tblMainList) 
     { 
      con.Open(); 
      string query = "SELECT * FROM" + " " + list; 
      cmd = new SqlCommand(query, con); 
      dr = cmd.ExecuteReader(); 
      dt = dr.GetSchemaTable(); 
      con.Close(); 

      foreach (DataRow dt_row in dt.Rows) 
      { 
       foreach (DataColumn dt_col in dt.Columns) 
       { 
        lviewMainDbSchema.Items.Add(string.Format("{0}={1}", dt_col.ColumnName, dt_row[dt_col]).ToString()); 

        //HERE WHERE I GOT THE ERROR!! :) :) :) <3 
        tblMainList.Add(string.Format("{0}={1}", dt_col.ColumnName, dt_row[dt_col]).ToString()); 
       } 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show("ERROR!!!!" + ex); 
    } 
} 
  1. Liste item

Antwort

1

Sie können nicht Gegenstand einer Liste ändern, die Sie durch foreach Schleife aufzuzählen. Verwenden Sie for Schleife intead.

for(int i = 0; i < tblMainList.Count(); i++) 
{ 
     foreach (DataRow dt_row in dt.Rows) 
     { 
      foreach (DataColumn dt_col in dt.Columns) 
      { 
       lviewMainDbSchema.Items.Add(string.Format("{0}={1}", dt_col.ColumnName, dt_row[dt_col]).ToString()); 

       //HERE WHERE I GOT THE ERROR!! :) :) :) <3 
       tblMainList.Add(string.Format("{0}={1}", dt_col.ColumnName, dt_row[dt_col]).ToString()); 
       } 
      } 
     } 
0

Sie könnten eine separates List<string> verwenden, um die neuen Elemente hinzuzufügen, und dann später, dass in der vom iterierten List:

List<string> addItems = new List<string>(); 
foreach(var list in tblMainList) 
{ 
    con.Open(); 
    string query = "SELECT * FROM"+" "+list; 
    cmd = new SqlCommand(query, con); 
    dr = cmd.ExecuteReader(); 
    dt = dr.GetSchemaTable(); 
    con.Close(); 

    foreach (DataRow dt_row in dt.Rows) 
    { 
     foreach (DataColumn dt_col in dt.Columns) 
     { 
       lviewMainDbSchema.Items.Add(string.Format("{0}={1}", dt_col.ColumnName, dt_row[dt_col]).ToString()); 

       //add new items to new list 
       addItems .Add(string.Format("{0}={1}", dt_col.ColumnName, dt_row[dt_col]).ToString()); 
     } 
    } 
} 

// add new List to tblMainList 
tblMainList.AddRange(addItems); 
+0

Danke es funktioniert :) –

Verwandte Themen