Отправить исключение для метода Caller в c # - PullRequest
0 голосов
/ 29 сентября 2018

Здравствуйте, ребята, я работаю над назначением базы данных, у меня есть одна форма Windows и один класс, который я использую для подключения к базе данных и выполнения запросов и не-запросов.

Вопрос: Я использую Post-Метка сообщения, которая информирует только, когда «Продукт успешно добавлен». Но когда я отправляю неправильные данные, которые могут возникнуть исключение в executeNonQuery () в классе базы данных и после перехвата этого исключения и отображения ошибки в окне сообщения. Контроль возвращается к вызывающей стороне, и он печатаетlblPostMsg в обоих случаях: «Продукт был успешно добавлен».Я хочу, чтобы, когда исключение происходило в классе базы данных, я мог прекратить выполнение остальной части кода или, если есть способ, которым исключение в вызывающем методе может быть перехвачено методом вызывающего.

ниже - кнопка формы кода окна

 private void btnInsert_Click(object sender, EventArgs e)
    {
            con = new DbConnection();
            con.SqlQuery("INSERT INTO products VALUES(@products_ID,@products_Name)"); 
            con.cmd.Parameters.AddWithValue("@products_ID", txtProID.Text);
            con.cmd.Parameters.AddWithValue("@products_Name", txtProName.Text);
            try
            {
                con.ExecuteNonQueryF();

                this.categoriesTableAdapter1.Fill(this.purchasemasterDS.categories);
                SystemSounds.Beep.Play();
                lblPostMsg.Show();
                lblPostMsg.Text = "Product has been added successfully";

            }
            catch (Exception ex)
            {
                throw;
            }

            finally
            {
                con.CloseCon();
            }
    }

Этот код взят из dbclass

public void ExecuteNonQueryF()
    {
        try
        {
            _con.Open();
            cmd.ExecuteNonQuery();
        }
        catch (System.Exception ex)
        {

            MessageBox.Show("Exception " + ex);

        }

Ответы [ 3 ]

0 голосов
/ 29 сентября 2018

вам нужно бросить явное исключение в блоке захвата ExecuteNonQuery, например throw new Exception (ex)

, а затем в блоке вызова calle вам нужно написать «return» для возврата из функции.Это остановит дальнейшее выполнение функции.

0 голосов
/ 30 сентября 2018

Если вы хотите, чтобы Exception был повышен до вызывающей стороны и выполнение останавливается , тогда вы должны использовать throw в последней строке вашего блока перехвата.

catch (System.Exception ex)
{
    /*
      write your desire code. then throw
    */
    throw;
}
0 голосов
/ 29 сентября 2018

вы перехватываете, обрабатываете и подавляете Exception в ExecuteNonQueryF:

catch (System.Exception ex)
{    
    MessageBox.Show("Exception " + ex);    
}

Хотя это обрабатывает Exception, показывая сообщение, это заставляет код продолжать выполняться;Exception не будет повышен до вызывающей стороны.

Если вы добавите throw после выполнения MessageBox.Show, Exception будет повышена до вызывающей стороны, и выполнение остановится.

catch (System.Exception ex)
{
    MessageBox.Show("Exception " + ex);
    throw;
}

Другой вариант - полностью удалить этот try-catch в ExecuteNonQueryF, позволяя вызывающей стороне (ваш метод button onclick) обрабатывать Exception.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...