При нажатии кнопки я сохраняю информацию в базе данных Sqlite.У меня есть команда .ExecuteNonQuery () в блоке try.Я обработал все, просто нашел, перехвачен ли блок catch, но если все проходит нормально, я хочу, чтобы выполнялся другой код, который очистил бы значения моих EditTexts и установил фокус.Я пытаюсь поместить этот код после ExecuteNonQuery () в моем блоке try, но он все еще выполняется перед блоком catch, даже если исключение перехвачено, поэтому значения моих edittexts очищаются до того, как блок catch сможет что-либо сделать.Та же история, если я полностью добавлю код после блока try / catch.Блок catch, похоже, выполняется последним, и к тому времени значения были очищены, и блок catch даже не может выполняться должным образом.Как установить значения, чтобы очистить только после того, как блок перехвата очищен и никакие исключения не генерируются?
РЕДАКТИРОВАТЬ: Попытка поместить его в блок 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();
}
}