首页 新闻 赞助 找找看

VB.NET中处理连接的问题

0
悬赏园豆:40 [已解决问题] 解决于 2009-04-09 12:02

看到很多人的用法是这样的,在模块里定义一个SqlConnection,变成一个全局变量,比如这样:

[code=VB.NET]
Module sysVarible
    Public conn As New SqlClient.SqlConnection
End Module
[/code]

然后,关于整个系统的数据库都基于这个连接的open()、close()来进行操作。

但是我想将这个conn放到一个类里面,作为一个实例变量,每次都创建一个这个类的实例,然后再在类里面
conn的各种打开关闭的方法,以及数据库的增删改查,请问哪种情况比较好呢?或者说两种没区别?

说明:
第一种方法好像很不错,不过以前从没用过这种方式,用着一个全局的连接,觉得很不习惯,也不知道会不会出什么性能问题
第二种,看起来是最好的,可是对于事务好像不太好控制,比如删除用户(deleteUser),并且删除用户相关的文章(deleteBlogsByUser),
这两个方法肯定在两个不同的实例中,也意味着使用不同的conn,那么这时候好像就不好控制事务了,不知道我的疑虑对不对

问题补充: 我的应用时windows应用程序,不是web程序
碧海山城的主页 碧海山城 | 初学一级 | 园豆:90
提问于:2009-04-05 10:58
< >
分享
最佳答案
0

你可以使用微软提供的 SqlHelper 来解决你的问题,或者使用更大的 Application DataAccess Library.

第一种方法只会在一条连接上操作,杜绝了连接池的使用.如果有并发的使用该连接的调用,则会相互阻塞.

第二种方法,你对事务的判断是正确的,但是属于过渡设计范畴,SqlConnection已经实现了你打算设计的conn包装类.

正确的用法是在任何你想进行数据库操作的时候都做如下操作:

 

Code

 

Launcher | 高人七级 |园豆:45045 | 2009-04-05 11:24
看不到代码啊
zhykhld | 园豆:313 (菜鸟二级) | 2009-08-09 22:21
其他回答(1)
0

你说的全局指的应该是一个页面或Request里的一个成员变量,而不是整个程序的static变量吧。这种情况对于事务控制是比较方便一点,但是要求在页面开始前open connection,在页面结束后close connection。应该比较适合Web应用里面,因为一个Web的请求通常很短,几十的ms吧,不会造成长连接的问题。

第二种事务确实不好控制,只能把相关操作都封装到同一个BLL里面,用同一个connection来做。

Azuresong | 园豆:3565 (老鸟四级) | 2009-04-05 11:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册