Что такое хорошая обработка ошибок SQLException для тайм-аутов и неудачных соединений - PullRequest
2 голосов
/ 12 апреля 2009

Я использую EntitySpaces для всего, что связано с моей базой данных. Как единственный разработчик, у меня нет времени сидеть и писать SQL для каждого приложения, которое я пишу, поэтому использование генератора, такого как ES Suites, позволяет мне работать на земле и экономит мне дни, если не недели, *. 1001 *

Обычно я пишу серию вспомогательных классов для каждой из таблиц, которые использует мое приложение. Проблема, с которой я столкнулся, заключается в том, что я не знаю, как лучше всего справляться с какими-либо таймаутами SQL или неудачными соединениями, за исключением того, чтобы придерживаться метода Try-catch вокруг каждого метода, который имеет дело с возвратом данных.

В EntitySpaces соединение SQL создается и выполняется только при выполнении любого типа команды CRUD.

Например:

    public TblUserCollection GetCollection()
    {

        TblUserCollection collection = new TblUserCollection();
        collection.Query.Where(collection.Query.CompanyId == CompanyId);
        collection.Query.OrderBy(collection.Query.FullName, esOrderByDirection.Ascending);
        collection.Query.Load();

        return collection;

    }

Этот метод вызывается, когда моему вспомогательному классу говорят назначить ComboBox список пользователей определенной компании. Затем метод вызывает это, и я присваиваю данные списку. У меня есть около 30 таких точек, все они называются GetCollection () в специальных классах для таблиц.

Помимо простого написания метода как:

    public TblUserCollection GetCollection()
    {

        try
        {

            TblUserCollection collection = new TblUserCollection();
            collection.Query.Where(collection.Query.CompanyId == CompanyId);
            collection.Query.OrderBy(collection.Query.FullName, esOrderByDirection.Ascending);
            collection.Query.Load();

            return collection;
        }
        catch (System.Data.SqlClient.SqlException ex)
        {
            //
        }

    }

Что еще я могу сделать?

Ответы [ 3 ]

1 голос
/ 12 апреля 2009

Определите базовый класс для обработки ошибок SQL, и пусть все ваши классы ex. TblUserCollection реализует этот базовый класс. Поэтому, когда ваши дочерние классы генерируют исключения sql, вы можете сделать так, чтобы базовый класс обрабатывал их для вас изящными выходами

Вы пробовали Subsonic (бесплатная версия) и LLBLGen (коммерческая версия). Оба сгенерируют DAL и некоторые веб-компоненты для вас. Также вы довольны Entityspaces? Ваш ответ поможет мне с моими собственными проектами.

0 голосов
/ 12 апреля 2009

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

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

0 голосов
/ 12 апреля 2009

Это на самом деле не отвечает на ваш вопрос, но вы можете попробовать изучить LINQ. Это может сделать этот код:

public TblUserCollection GetCollection()
{

    TblUserCollection collection = new TblUserCollection();
    collection.Query.Where(collection.Query.CompanyId == CompanyId);
    collection.Query.OrderBy(collection.Query.FullName, esOrderByDirection.Ascending);
    collection.Query.Load();

    return collection;

}

гораздо более читабельным в моей голове.

...