2009-04-12 87 views
2

我使用EntitySpaces处理所有与数据库相关的编码。作为唯一的开发人员,我没有时间坐下来为编写的每一个应用程序编写SQL,因此使用ES等生成器将我置于实地,并为我节省了几天时间,即使不是几周。C# - 什么是SQLException什么是超时错误处理和连接失败

我通常会为我的应用程序使用的每个表格编写一系列帮助类。我遇到的问题是,我不知道处理任何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; 

    } 

当我的助手类被告知某公司的用户列表分配给一个组合框时调用此方法。该方法然后调用它并将数据分配给列表。我有大约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) 
     { 
      // 
     } 

    } 

我还能做什么?

回答

1

定义一个基类来处理你的SQL错误处理并让所有的类都去掉。 TblUserCollection实现该基类。所以当你的子类抛出sql异常时,你可以让基类为你处理它们,并有优美的退出

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

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; 

} 

在我的脑海里更多的可读性。

+0

@Lucas:标签指定“.net2.0”。所以LINQ对此可能没有问题。 – Sung 2009-04-12 18:35:03

+0

哦,没有仔细看。好的赶上! – Kredns 2009-04-13 01:00:53

0

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

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

相关问题