猿问

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

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

我的理解是:
用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     }
临摹微笑
浏览 658回答 8
8回答

慕仙森

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

DIEA

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

慕少森

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

胡说叔叔

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

元芳怎么了

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

杨魅力

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

小唯快跑啊

一般情况下,我是使用单例模式来使用SQLConnection。。。。 private static SqlConnection  _conn = null; /// <summary> /// 定义一个linq对象实例 /// </summary> public static SqlConnection GetConn { get { if(_conn ==null) {      _conn =new Sqlconnection(connstr ); } return _conn ; }
随时随地看视频慕课网APP

相关分类

SQL Server
我要回答