为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

临摹微笑 2018-12-06 14:51:06
呵呵,基本肯定是我的理解有误,他高级讲师基本不可能在这犯错!! 我的理解是: 用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 }
查看完整描述

8 回答

?
慕仙森

TA贡献1827条经验 获得超8个赞

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

查看完整回答
反对 回复 2019-01-07
?
DIEA

TA贡献1820条经验 获得超2个赞

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

查看完整回答
反对 回复 2019-01-07
?
慕少森

TA贡献2019条经验 获得超9个赞

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

查看完整回答
反对 回复 2019-01-07
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

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

SQL难题(高手进)

查看完整回答
反对 回复 2019-01-07
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

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

查看完整回答
反对 回复 2019-01-07
?
杨魅力

TA贡献1811条经验 获得超6个赞

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

查看完整回答
反对 回复 2019-01-07
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

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

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

if(_conn ==null)

{
      _conn =new Sqlconnection(connstr );

}

return _conn ;
}

查看完整回答
反对 回复 2019-01-07
  • 8 回答
  • 0 关注
  • 657 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信