bjay tiamsic Ответов: 2

Как вернуть исключение из класса C# в aspx. cs и подсказать пользователю


Привет, у меня есть код ниже, но можно ли вернуть сообщение об исключении из файла класса C# в aspx.cs, чтобы я мог вернуть его для использования с настроенным окном сообщения? подгонянная коробка сообщение будет модальное начальной загрузки в)

Что я уже пробовал:

Вот как я вызываю метод в файле класса

parameters = new string[] { "@TrxNum", "@ShortDesc", "@PaymentOption" };
vals = new string[] { lblTrxNum.Text, txtShortDesc.Text, drpPaymentOptions.SelectedValue };
DataTable dt = reimburseClass.getDataTableParameter("[NewSP_InsertUpdateReimburseTrxHDR]", parameters, vals);


Вот мой код класса c#
public DataTable getDataTableParameter(string qry, string[] param, string[] values)
    {
        dt = new DataTable();
        try
        {
            con.Open();
            cmd = new SqlCommand(qry, con);
            cmd.CommandType = CommandType.StoredProcedure;
            for (int i = 0; i <= param.Length - 1; i++)
            {
                cmd.Parameters.AddWithValue(param[i], values[i]);
            }
            da = new SqlDataAdapter(cmd);
            da.Fill(dt);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            con.Close();
        }
        return dt;
    }



Если этот код класса C# возвращает исключение, как я могу передать сообщение в файл aspx. cs ?

2 Ответов

Рейтинг:
11

Mehedi Shams

Наряду с предложением Джона (которое является быстрым и хорошим), вы можете использовать ref переменная. Вызывающий метод будет выглядеть следующим образом (Пожалуйста, не новый string переменная, и новый параметр передается в вызове функции):

parameters = new string[] { "@TrxNum", "@ShortDesc", "@PaymentOption" };
vals = new string[] { lblTrxNum.Text, txtShortDesc.Text, drpPaymentOptions.SelectedValue };

string ExceptionMsg = "";

DataTable dt = reimburseClass.getDataTableParameter("[NewSP_InsertUpdateReimburseTrxHDR]", parameters, vals, ref ExceptionMsg);

if (!ExceptionMsg.Equals(""))   // If there is something in the 'ExceptionMsg'.
    {
    ...........
    ...........
    }


Метод getDataTableParameter теперь выглядит примерно так. Смотрите, в конце добавляется новый параметр, и происходит изменение блока CATCH.

public DataTable getDataTableParameter(string qry, string[] param, string[] values, ref string ExceptionMsg)
{
    dt = new DataTable();
    try
    {
        con.Open();
        cmd = new SqlCommand(qry, con);
        cmd.CommandType = CommandType.StoredProcedure;
        for (int i = 0; i <= param.Length - 1; i++)
        {
            cmd.Parameters.AddWithValue(param[i], values[i]);
        }
        da = new SqlDataAdapter(cmd);
        da.Fill(dt);
    }
    catch (Exception ex)
    {
        ExceptionMsg = Ex.Message;
    }
    finally
    {
        con.Close();
    }
    return dt;
}


Chris Ross 2

Мои три звезды-вообще идея прекрасная.
Что касается использования "ref" - учитывая, что сообщение об исключении является только исходящим, я бы рекомендовал "out", а не "ref".
Что касается (в вызывающем) тестирования для !ExceptionMsg. Equals (""), я бы сыграл его немного безопаснее, с !string.IsNullOrWhiteSpace (ExceptionMsg) ... который по-прежнему проверяет пустые строки, но также и пустые и строки, которые не имеют значимого содержания (т. е. все они являются пробелами).

Mehedi Shams

Привет, Крис, спасибо за ваши предложения по улучшению. Это хорошо. 'реф' и 'вне' нужно немного больше исследований. В общем случае " out "следует практиковать больше, чем "ref", поскольку " ref "несет стоимость по сети (в обе стороны), в то время как" out " имеет накладные расходы только для одного пути.

Просто при использовании, если используется 'out', то он должен быть инициализирован в вызываемом методе (как правило - должна быть инициализирована переменная 'out').

Спасибо снова. Ура :)!

bjay tiamsic

Привет. Спасибо за это, и в настоящее время я пытаюсь использовать ваше предложение. Однако, когда я заменил 'ref' на 'out', строка 'return dt;' вызывает ошибку, говоря: "параметр out 'ExceptionMsg' должен быть назначен до того, как управление покинет текущий метод"

Mehedi Shams

Привет Bjay, если вы видите последнюю строчку моего предыдущего сообщения - 'вне' переменная должна быть инициализирована перед использованием.

В начале вызываемого метода просто поставьте ' ExceptionMsg = "";'. Это будет сделано :).

bjay tiamsic

Он отлично работает! Большое вам спасибо!

Mehedi Shams

Спасибо Бьяю, рад был узнать, что это помогло и сработало нормально. Ура :)!

Рейтинг:
1

#realJSOP

Поместите блок try/catch вокруг вызова этого метода и в разделе catch отобразите свойство сообщения исключений для пользователя.