If循环不能中断

本文关键字:中断 不能 循环 If | 更新日期: 2023-09-27 18:14:29

我正在使用dao,我的用户正在添加一个表和它的字段。我的程序检查表是否存在,如果存在,它只添加字段,如果表不存在,它添加表,然后附加字段。

当我试图添加第二个字段时,我的问题发生了。它告诉我这个表已经存在了。它没有以正确的方式进行循环。你能帮忙吗?

    string tablename = txtNameTable.Text.Trim();
        string fieldname = txtFieldName.Text.Trim();
        string size = txtSize.Text.Trim();
        //create a table
        myTable = clsDataSource.mydb.CreateTableDef(tablename);
        //create fields 
        if (cboFieldType.SelectedItem.ToString() == "Text")
        {
            myField = myTable.CreateField(fieldname, DAO.DataTypeEnum.dbText, size);
        }

        if (cboFieldType.SelectedItem.ToString() == "AutoNumber")
        {
            myField = myTable.CreateField(fieldname, DAO.DataTypeEnum.dbLong);
            myField.Attributes = (int)DAO.FieldAttributeEnum.dbAutoIncrField;
        }

        if (cboFieldType.SelectedItem.ToString() == "Number")
        {
            myField = myTable.CreateField(fieldname, DAO.DataTypeEnum.dbLong, size);
        }

        if (cboFieldType.SelectedItem.ToString() == "Date")
        {
            myField = myTable.CreateField(fieldname, DAO.DataTypeEnum.dbDate);
        }           

        //check if table exists
        bool tableExist = false;
        foreach (TableDef tb in clsDataSource.mydb.TableDefs)
        {
            if (tb.Name == myTable.Name)
            {
                myTable.Fields.Append(myField);
                tableExist = true;
                break;
            }
        }
            if (tableExist == false)
            {
                myTable.Fields.Append(myField);
                clsDataSource.mydb.TableDefs.Append(myTable);
            }

            //add primary key
            if (ckPK.Checked == true)
            {
                Index myIndex = myTable.CreateIndex("PrimaryKey");
                myField = myIndex.CreateField(fieldname);
                ((IndexFields)myIndex.Fields).Append(myField);
                myIndex.Primary = true;
                try
                {
                    clsDataSource.mydb.TableDefs[myTable.Name].Indexes.Append(myIndex);
                }
                catch (Exception)
                {
                    MessageBox.Show("This table already has a primary key", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            Activate(true, true, true);
        }

If循环不能中断

事情是这样的。如果您的foreach语句中有多个表,那么检查Findtable是否为false的If语句只有在所有表迭代之后才会到达。因此,您必须将if语句移动到循环中,以便在它不存在的情况下添加一个新表。实际上,它应该是这样的:

    List<String> existingTables = new List<String>();
    foreach (TableDef tb in clsDataSource.mydb.TableDefs)
        {
               if (tb.Attributes == 0 && tb.Name == myTable.Name)
                {
                    clsDataSource.mydb.TableDefs[myTable.Name].Fields.Append(myField);
                    myTable.Fields.Append(myField);
                    clsDataSource.mydb.TableDefs.Append(myTable);
                }         
                else {       
                    existingTables.Add(MyTable.Name.ToString());
                }      
        }//end foreach
    foreach (var el in existingTables){
           MessageBox.Show("This table already exists: {0}", el)
    }//end foreach

因此,如果表匹配所有参数,则去掉另一个条件并立即添加表。而且,你还去掉了那个布尔值,这在本例中是不必要的。一旦所有的表都被迭代,您将退出循环。