呵呵,基本肯定是我的理解有误,他高级讲师基本不可能在这犯错!!
我的理解是:
用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 }
Dispose只是销毁对象,其中的内容主要就是关闭数据库连接对象,至于连接池。。。那是更底层的管理功能,跟我们写代码没关系。
首先你的问题就不对,实现了 IDisposable接口的类都可以用using语句块,以便自动调用该对象的Dispose()方法,来释放该对象。这样写的确是没有了连接池的概念,但也并不能因此说这样效率低,微软提供的SqlHelper都是这么写的,这样写在数据量不是特别大的情况下反而效果很好。
using 引用的对象跳出后.net framework会收回的
为什么你的问题在回答并解决后都要关闭而不正常结贴?是你自己找到了问题的解决方案并且别人提供的方案是有问题的吗?
@笨笨蜗牛: 因为某些没有我要的回答
应该用using,不用using你就会一直占着连接(也就是不放回连接池),用了using它用完就会将连接“放回连接池”,这和连接池不冲突,连接池对你来说是透明的,你不需要显式的去做什么放回连接池的操作,可以简单的认为Close()就是放回连接池了。
如果数据库连接池启用,则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 ;
}