首页 新闻 会员 周边 捐助

问一个数据库连接方面的问题

0
悬赏园豆:20 [已解决问题] 解决于 2009-11-10 14:35

http://www.cnblogs.com/flora_asp_net/archive/2009/08/07/1541530.html

这个帖子里,数据库访问层(DAL)中的代码:

        private static SqlConnection connection;
public static SqlConnection Connection //连接数据库,并打开连接
{
get
{
string connectionString = "server=.\\sql2005;database=TeachSys;uid=sa;pwd=sa2005";
if (connection == null)
{
connection
= new SqlConnection(connectionString);
Connection.Open();
}
return connection;
}
}


见红色部分,它判断connection变量(小写)如果为null则实例化数据库连接,并由Connection(大写)变量来打开连接,我的疑问是,connection变量和Connection变量是如何发生联系的?应该由connection变量(小写)来实现Open这个方法啊,而且我改成connection.Open()也能够编译通过,这我就搞不懂了,请大家解惑。
rqrq的主页 rqrq | 初学一级 | 园豆:95
提问于:2009-11-06 15:48
< >
分享
最佳答案
0

我 不太赞成一楼和二楼的说法,这个小写的connection 是一个静态的变量,即使反复实例化,也只有一个SqlConnection在开着吧。看看.NET的回收机制就应该知道了吧。

收获园豆:17
天堂口 | 小虾三级 |园豆:514 | 2009-11-07 12:52
个人认为CSDN的这个回答是正确的: ------------------------------------------- private static SqlConnection connection; public static SqlConnection Connection //连接数据库,并打开连接 { get//Connection属性获取方法 { string connectionString= "server=.\\sql2005;database=TeachSys;uid=sa;pwd=sa2005"; if (connection == null) { //第一次运行,即connection字段为null connection = new SqlConnection(connectionString);//connection字段赋值 //此时调用Connection属性,则同样会调用Connection属性的get方法,不同的是,和第一次不同,connection字段已经赋值,所以不会进入if语句范围,直接返回connection字段,所以,这里和直接调用字段是一样的 Connection.Open(); } return connection; } }
rqrq | 园豆:95 (初学一级) | 2009-11-10 14:35
其他回答(3)
0

double check 变种.

如果使用 connection(小写) 来 Open 的话,就有可能同时打开多条数据库连接,

而调用 Close 的代码肯定无法准确的知道到底 Open 了几条.

当然,换成 Connection.Open() (大写)后,虽然解决了前面的问题,但是,也不是

线程安全的.

收获园豆:1
Launcher | 园豆:45050 (高人七级) | 2009-11-06 16:07
0

引用Galactica的说法:

如果使用 connection(小写) 来 Open 的话,就有可能同时打开多条数据库连接,

而调用 Close 的代码肯定无法准确的知道到底 Open 了几条.

当然,换成 Connection.Open() (大写)后,虽然解决了前面的问题,但是,也不是

线程安全的.

收获园豆:1
zhangpeng1008 | 园豆:283 (菜鸟二级) | 2009-11-06 16:22
0

写错了吧,应该是小写的,但是 声明称static 全局变量似乎有些问题 ,因为它始终存在

收获园豆:1
十四 | 园豆:46 (初学一级) | 2009-11-06 17:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册