首页 新闻 赞助 找找看

杨中科老师错了?sql连接不应该用using语句

0
悬赏园豆:5 [已解决问题] 解决于 2012-06-06 16:47

呵呵,基本肯定是我的理解有误,他高级讲师基本不可能在这犯错!!

我的理解是:
用using语句块 每次都会执行 con.Database(), 这么写就没有连接池的概念了吧?每次都得重新new 一个SqlConnection 连接数据库,有效率太低了吧?
我的理解是 Database()方法 是完全释放资源啊 Close()方法才是暂时关闭连接吧?
我以前都是把 SqlConnection 当做一个类的字段来处理的 用完了Close()一下而已

 1     class SqlHelper
 2     {
 3         private static readonly string connstr = ConfigurationManager.ConnectionStrings["lkfCon"].ConnectionString;
 4 
 5         public int ExecuteNonQuery(string cmdText, params SqlParameter[] parameters)
 6         {
 7             using (SqlConnection con = new SqlConnection(connstr))
 8             {
 9                 con.Open();
10                 using (SqlCommand cmd = con.CreateCommand())
11                 {
12                     cmd.CommandText = cmdText;
13                     cmd.Parameters.AddRange(parameters);
14                     return cmd.ExecuteNonQuery();
15                 }                 
16              }
17         }
18     }
钢的锅的主页 钢的锅 | 初学一级 | 园豆:10
提问于:2012-06-01 19:59
< >
分享
最佳答案
1

Dispose只是销毁对象,其中的内容主要就是关闭数据库连接对象,至于连接池。。。那是更底层的管理功能,跟我们写代码没关系。

收获园豆:5
无之无 | 大侠五级 |园豆:5095 | 2012-06-01 22:49
其他回答(5)
-1

首先你的问题就不对,实现了 IDisposable接口的类都可以用using语句块,以便自动调用该对象的Dispose()方法,来释放该对象。这样写的确是没有了连接池的概念,但也并不能因此说这样效率低,微软提供的SqlHelper都是这么写的,这样写在数据量不是特别大的情况下反而效果很好。

psforever | 园豆:461 (菜鸟二级) | 2012-06-01 21:37
0

using 引用的对象跳出后.net framework会收回的

彬彬@科比 | 园豆:43 (初学一级) | 2012-06-02 10:42

为什么你的问题在回答并解决后都要关闭而不正常结贴?是你自己找到了问题的解决方案并且别人提供的方案是有问题的吗?

SQL难题(高手进)

支持(0) 反对(0) 无之无 | 园豆:5095 (大侠五级) | 2012-06-06 10:51

@笨笨蜗牛: 因为某些没有我要的回答

支持(0) 反对(0) 彬彬@科比 | 园豆:43 (初学一级) | 2012-06-06 12:07
-1

应该用using,不用using你就会一直占着连接(也就是不放回连接池),用了using它用完就会将连接“放回连接池”,这和连接池不冲突,连接池对你来说是透明的,你不需要显式的去做什么放回连接池的操作,可以简单的认为Close()就是放回连接池了。

水言木 | 园豆:586 (小虾三级) | 2012-06-02 16:55
0

如果数据库连接池启用,则conn.close()不会关闭数据库连接,而是放回连接池.

碧落星痕 | 园豆:708 (小虾三级) | 2012-06-02 21:11
0

一般情况下,我是使用单例模式来使用SQLConnection。。。。

private static SqlConnection  _conn = null;
/// <summary>
/// 定义一个linq对象实例
/// </summary>
public static SqlConnection GetConn
{
get
{

if(_conn ==null)

{
      _conn =new Sqlconnection(connstr );

}

return _conn ;
}

土豆屋 | 园豆:354 (菜鸟二级) | 2012-06-04 11:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册