Обработка исключений в классах и код позади C # - PullRequest
1 голос
/ 18 ноября 2008

Я немного застрял с проектом asp.net, который я делаю! У меня есть класс, который вызывается из кода, и многие его функции не имеют возвращаемого типа, т. Е. Являются пустыми. Как тогда делать обработку исключений ??? Кроме того, если функция внутри класса имеет, например, тип возвращаемого значения, например, набор данных, как можно затем вернуть исключение или указать, что исключение произошло? Я прикрепил следующий код из моего класса, на который есть ссылка из кода позади.

public void fnRecord(string []varList, string fnName)
    {
        try
        {
            String x;

            StringBuilder SQLParameters = new StringBuilder();

            SQLParameters.AppendLine("SELECT #{Function}(");
            {
                SQLParameters.Replace("#{Function}", fnName);
            }

            for (int i = 0; i < varList.Length; i++)
            {                   
                x = varList[i].ToString();
                SQLParameters.Append("'" + x + "',");
            }

            SQLParameters.Remove((SQLParameters.Length - 1), 1);
            SQLParameters.Append(")");

            string SQLCMD = SQLParameters.ToString();

            conn.Open();
            NpgsqlCommand command = new NpgsqlCommand(SQLCMD, conn);
            Object result = command.ExecuteScalar();
        }

        catch (NpgsqlException ne)
        {
            //return ne;
        }

        catch (Exception x)
        {
            //error code
        }

        finally
        {
            conn.Close();
        }
    }

Любая помощь будет оценена!

Спасибо

Ответы [ 3 ]

1 голос
/ 18 ноября 2008

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

Кстати, ваш код подвержен SQL-инъекциям атак. Лучше всего узнать что-нибудь о параметризованных запросах .

0 голосов
/ 18 ноября 2008

Круто, спасибо за ответы ... работа с библиотекой obout, так что постарайтесь также поработать над их функциями обработки исключений.

0 голосов
/ 18 ноября 2008

Вы не возвращаете исключения. Вы бросаете их. В этом суть исключений - вы не хотите, чтобы обработка исключений загромождала сигнатуры ваших методов!

В ваших предложениях catch вы фактически ничего не делаете для обработки исключений. Тогда вам вообще не нужно их ловить, просто дайте им всплыть в вашем коде позади и поймайте их там - поместите try-catch вокруг вызова метода.

Либо перехватите исключения SQL в своем методе, а затем сгенерируйте новое исключение с некоторым разумным сообщением, добавив SqlExceptions в качестве внутреннего исключения, например

catch (NpgsqlException ne)
{
    throw new Exception("Your explanatory message here", ne);
}
finally
{
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...