只有在尝试不捕获时才执行的代码

jme*_*ase 0 c# try-catch

在按钮上单击我将信息保存到Sqlite数据库.我在try块中有command.ExecuteNonQuery().我已经处理完所有事情只是找到catch块被捕获,但如果一切都通过,我希望其他代码执行,这将清除我的EditTexts的值并设置焦点.我尝试将该代码放在我的try块中的ExecuteNonQuery()之后,但它仍然在catch块之前执行,即使捕获到异常,因此我的edittexts的值在catch块甚至可以执行任何操作之前被清除.如果我完全在try/catch块之后添加代码,那就相同了.catch块似乎是最后执行的事情,到那时值已被清除,catch块甚至无法正常执行.如何在清除catch块并且不抛出异常之后将值设置为clear?

编辑:尝试把它放在一个finally块中,但同样的事情.locals窗口显示partnumber.Text和partQty.text在到达catch块时是空白的.但是如果我取出清除那些字段的代码,那么它们仍然在catch块中有它们的值.有没有什么特别的关于Sqlite异常会产生时间问题?

        try
    {
        c.ExecuteNonQuery();
        partnumber.Text = "";
        partqty.Text = "";
        partnumber.RequestFocus();
    }
    catch (SqliteException ex)
    {
        if (ex.ErrorCode.ToString() == "Constraint")
        {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.SetTitle("Item Duplication");
            builder.SetMessage("You have already counted this item.  How would you like to proceed?");
            builder.SetPositiveButton("Add to Previous", delegate
            {
                var newQty = Convert.ToInt32(test.currQuantity(partnumber.Text)) + Convert.ToInt32(partqty.Text);
                var n = connection.CreateCommand();
                connection.Open();
                n.CommandText = "Update [Items] Set Quantity = '" + newQty.ToString() + "' Where ItemNmbr = '" + partnumber.Text + "'";
                n.ExecuteNonQuery();
                Toast.MakeText(this, "Quantity updated to: " + newQty.ToString(), ToastLength.Long)
                    .Show();
                partnumber.Text = "";
                partqty.Text = "";
                partnumber.RequestFocus();
                connection.Close();
                return;
            });
            builder.SetNegativeButton("Override Previous", delegate
            {
                var n = connection.CreateCommand();
                connection.Open();
                n.CommandText = "Update [Items] Set Quantity = '" + partqty.Text + "' Where ItemNmbr = '" + partnumber.Text + "'";
                n.ExecuteNonQuery();
                Toast.MakeText(this, "Quantity updated to: " + test.currQuantity(partnumber.Text), ToastLength.Long)
                    .Show();
                partnumber.Text = "";
                partqty.Text = "";
                partnumber.RequestFocus();
                connection.Close();
                return;
            });
            var dialog = builder.Create();
            dialog.Show();
        }
        else
        {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.SetTitle("Error");
            builder.SetMessage(ex.Message.ToString());
            var dialog = builder.Create();
            dialog.Show();
        }
    }
Run Code Online (Sandbox Code Playgroud)

Not*_*elf 7

您可以尝试将它们放入finally块中.

try {/*execute code*/}
catch(System.Exception e){/*handle exceptions*/}
finally {/*clean up regardless if an exception was thrown or not*/}
Run Code Online (Sandbox Code Playgroud)

  • 也许我误解了这里要问的内容,但我的印象是,如果没有抛出异常,他们只希望代码执行. (2认同)