2009-04-16 38 views
1

我现在在我的编程开发中,我试图利用面向对象的设计,而不是我一直在做的按钮过程的基本背后。如何使用VB.net或C#以面向对象的方式管理数据库连接和插入事务?

在当前项目中,我采取重复,复制和粘贴的SQL服务器插入代码,并将其与属性,方法等迁移到班...

一个问题我就要被困在是如何保持与数据库的连接不变,同时在多个对象之间进行插入,并因此插入多个表。

以程序的方式,我一直使用ADO.net事务写入一个表,然后根据插入的记录的ID,将附加信息写入另一个表 - 在不完成第二项工作前关闭连接。我使用该事务,因此如果稍后插入失败,则可以撤消第一次插入,并使用try,catch,最终关闭连接,无论它是成功还是失败。

如何在面向对象的世界中处理这个问题?

编辑:感谢大家的回答。我知道了。这是另一个问题,也有助于澄清它:ASP.NET/ADO.NET: Handling many database connections inside a .NET Object?

回答

1

嗯,没有太大的不同。你的'对象'(我认为你的意思是你正在使用类;这些类的实例表示你的业务领域中的'项目'),不应该关心那些事务。 也就是说,他们不应该知道交易,他们不应该负责处理交易。

事务应该由另一个对象启动和处理。某种'经理'。这个类开始,提交和回滚事务。
您将在您的应用程序中使用此管理器,例如,在您的表单中。
对我来说,这是处理事务的唯一正确方法,因为你的应用程序知道'上下文'。您的应用程序知道您必须对数据库执行多少往返操作,应用程序知道事务应持续多久。你的物体不知道这一点。

+0

你的推定是正确的......代表商业领域项目的类和类的实例)......“经理”类是什么样的? – codethrift 2009-04-16 14:19:07

0

至于管理连接,不要。 .Net会为你保留一大堆,并有效地回收它们。试图自己回收它们实际上会损害性能。

除此之外,它听起来像你正在做的,插入,获取ID,再次使用该范围内的相同连接插入。

+0

这是一个近视的观点。如果关闭连接池,则可以以更高效和更可靠的方式管理连接,它只会在代码中引入开销(在某个级别)来处理它。 – 2009-04-16 14:13:19