C# - 什么是SQLException错误处理超时和连接失败

时间:2009-04-12 18:18:24

标签: c# sql exception .net-2.0 sqlexception

我将EntitySpaces用于所有与数据库相关的编码。作为唯一的开发人员,我没有时间为我编写的每个应用程序编写SQL,因此使用ES套件这样的生成器可以将我带到地面并节省数天的时间(如果不是几周)。 / p>

我通常会为我的应用程序使用的每个表编写一系列辅助类。我遇到的问题是我真的不知道处理任何SQL超时或失败连接的最佳方法,除了在每个处理返回数据的方法周围使用Try-catch。

在EntitySpaces中,只有在运行任何类型的CRUD命令时才会构建和执行SQL连接。

例如:

    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 个答案:

答案 0 :(得分:1)

定义一个基类来处理SQL错误处理并让你的所有类都是ex。 TblUserCollection实现了那个基类。因此,当您的子类抛出sql异常时,您可以让基类通过优雅退出来为您处理它们

您是否尝试过Subsonic(免费版)和LLBLGen(商业版)。两者都将为您生成DAL和一些Web组件。您对Entityspaces感到满意吗?你的答案将帮助我完成自己的项目。

答案 1 :(得分:0)

这并没有真正回答你的问题,但你可能会尝试学习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;

}

在我的脑海中更具可读性。

答案 2 :(得分:0)

传统的方法是让异常从GetCollection方法传播。您通常不希望返回可能不完整的集合。

然后可能在您的表示层的顶层,您可以捕获异常,例如为用户提供重试的机会。