我必须编写一个连接到我们遗留的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类将打开连接,读取记录,然后一步退出。
我想我正走在正确的道路上,但如果没有,请告诉我。以下是我的问题:
如何在INVOICE课程中返回错误?例如,如果我们无法连接到数据库,无法打开文件,无法读取记录,则可能会发生错误。
如果我需要从INVOICE中获取一些数据,然后阅读TERMS表,该怎么办?我不想在刚打开数据库时打开与数据库的新连接。
我是否应该在所有具有此功能的类上调用Dispose方法?例如,mvAccount具有Dispose方法。没有文件说要调用它,但是我应该在Logout()之后吗?
我可以在执行myAccount.Logout()的TechDB类上创建Dispose方法吗?这样连接将保持打开状态,当我完成它时,我可以从我的INVOICE课程中关闭它?
给我一些关于处理此问题的最佳方法的意见?我的目标是一个强大的应用程序,易于修改,并尽可能少的代码重复。
答案 0 :(得分:1)
我会使用闭包,我认为对于C#你有代表。如下所示:
MyAccount.loginAndDo(servername, login, delegate(account){ invoice = account.read("INVOICE"); . . . });
在loginAndDo中,您将登录,致电该代表,然后关闭该帐户。
答案 1 :(得分:0)
按照3/4。在我的例子中,我的所有数据访问对象都从一个包含对连接的静态引用的类继承。我对在Dispose中实现断开逻辑犹豫不决,因为有可能出现断电或系统崩溃等事情,并且没有释放连接。