从数据库中获取数据最干的方法是什么?

时间:2009-01-30 20:08:53

标签: c# coding-style class-design u2 universe

我必须编写一个连接到我们遗留的IBM Universe数据库的ASP.NET应用程序,我们正在使用一个名为mv.net的产品,它允许我们连接,读取,写入,选择,运行服务器端程序等。 / p>

我希望尽可能少的代码重复,但我也希望尽可能少的数据传输。

为了打开连接,我们必须首先使用以下代码获取对帐户的引用:

mvAccount myAccount = new mvAccount(serverName, login);

然后我们可以阅读一个项目:

mvFile myInvoiceFile = myAccount.FileOpen("INVOICE");
mvItem myInvoiceRecord = myInvoiceFile.Read(invoiceID);

然后我们就完成了:

myAccount.Logout();

我有一个每个模块的类,所以我可能有INVOICE,PURCHASE_ORDER,RMA,REQ,SHIPMENT等等。在INVOICE中,我可能需要访问多个表,例如CUSTOMER,INVOICE,TERMS,SHIPVIA等。

我打算做的是创建一个名为TechDB的类,它是我们数据库的名称,并将代码放在那里,所以在我的INVOICE类中我可以说:

TechDB connection = new TechDB();
mvItem myInvoiceRecord = connection.Read("INVOICE", invoiceID)

当我这样做时,我的TechDB类将打开连接,读取记录,然后一步退出。

我想我正走在正确的道路上,但如果没有,请告诉我。以下是我的问题:

  1. 如何在INVOICE课程中返回错误?例如,如果我们无法连接到数据库,无法打开文件,无法读取记录,则可能会发生错误。

  2. 如果我需要从INVOICE中获取一些数据,然后阅读TERMS表,该怎么办?我不想在刚打开数据库时打开与数据库的新连接。

  3. 我是否应该在所有具有此功能的类上调用Dispose方法?例如,mvAccount具有Dispose方法。没有文件说要调用它,但是我应该在Logout()之后吗?

  4. 我可以在执行myAccount.Logout()的TechDB类上创建Dispose方法吗?这样连接将保持打开状态,当我完成它时,我可以从我的INVOICE课程中关闭它?

  5. 给我一​​些关于处理此问题的最佳方法的意见?我的目标是一个强大的应用程序,易于修改,并尽可能少的代码重复。

2 个答案:

答案 0 :(得分:1)

我会使用闭包,我认为对于C#你有代表。如下所示:

MyAccount.loginAndDo(servername, login, delegate(account){
   invoice = account.read("INVOICE");
   .
   .
   .
});

在loginAndDo中,您将登录,致电该代表,然后关闭该帐户。

答案 1 :(得分:0)

  1. 自定义异常类
  2. 一个想法是构建批处理请求(代表列表)。
  3. 按照3/4。在我的例子中,我的所有数据访问对象都从一个包含对连接的静态引用的类继承。我对在Dispose中实现断开逻辑犹豫不决,因为有可能出现断电或系统崩溃等事情,并且没有释放连接。