为了防止Connection忘记关闭,我包装了Connection,大家来帮我看看是否可行

blacklevin 2005-09-23 02:42:55
实现原理如下:
获得SqlConnection,如果不存在就new一个出来,然后将它存到Items中,以后直接从Items中取
public static SqlConnection GetConnection()
{
SqlConnection conn = (SqlConnection)HttpContext.Current.Items["SqlConnection"];
if(conn==null)
{
conn = new SqlConnection( "........." );
HttpContext.Current.Items["SqlConnection"] = conn;
}
return conn;
}

然后在Global中的Application_EndRequest执行关闭连接函数,防止忘记关闭的连接
public static void CloseConnection()
{
SqlConnection conn = GetConnection();
if(conn.State == ConnectionState.Open)
conn.Close();
}

大家帮我看看这样实现是否可性?有无不安全的隐患?是否会影响数据库效率?还有没有我没想到的可能发生的问题?
...全文
556 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
自然框架 2005-09-24
  • 打赏
  • 举报
回复
在asp.net里面可以多次open 和 close 的。

比如

conn.open()
conn.open()
conn.open()
conn.open()

这样是不会出错的,当然也是不会多次open的,他只open一次。

close也是同样
chaobeyond 2005-09-23
  • 打赏
  • 举报
回复
用:
using()
{

}
因为using块执行完后会自动调用IDisponse()......
cw888 2005-09-23
  • 打赏
  • 举报
回复
还是可以的!
cancerser 2005-09-23
  • 打赏
  • 举报
回复
没啥问题,但是没有意义 只要有 conn.Close();怎么会出现不关闭的情况呢?而且据我所知,你这样的写法和每次用都开一个在底层的实现没啥区别,很难想像你在不关闭上个连接,而在下次继续使用这个连接会出现什么错误(没准就给你出个,必须关闭再在的提示)
jinzhouk 2005-09-23
  • 打赏
  • 举报
回复
在duwamish中,所有的DataAccess都继承自IDisposable接口。当Connection对象Dispose的时候,就回自动关闭连接。

另外,打开的连接一定要关闭,否则它会一直占用资源的。
sunnystar365 2005-09-23
  • 打赏
  • 举报
回复
楼主做个例子,测试一下,应该可以看出结果
cjzlxy 2005-09-23
  • 打赏
  • 举报
回复
using(SqlConnection con = new SqlConnection)
{
....

}
zhoumins 2005-09-23
  • 打赏
  • 举报
回复
这样做只是调用方便,没有实现封装。
MEETIN2006 2005-09-23
  • 打赏
  • 举报
回复
据说连接池自己会把这些管的很好,而即使不关Connection也是要从连接池来读取的,所以一般都是上面某人讲的晚OPEN早CLOSE
jimu8130 2005-09-23
  • 打赏
  • 举报
回复
试验下用这个using()!!--具体使用方法看msdn
我看你有戏 2005-09-23
  • 打赏
  • 举报
回复
不是系统会自动关闭的吗
lee_wei 2005-09-23
  • 打赏
  • 举报
回复
要进行操作的时候打开,执行完操作后关闭.
这是资源的节省也是一个良好的习惯!
wtiancai 2005-09-23
  • 打赏
  • 举报
回复
ado.net不是有自带连接池管理的!
codeangel 2005-09-23
  • 打赏
  • 举报
回复
每次连接时检查一下是不是被打开,打开了就关闭然后再打开。
blacklevin 2005-09-23
  • 打赏
  • 举报
回复
每一次请求都要执行多次数据库操作,经常连接关闭不影响效率吗?
powerllr 2005-09-23
  • 打赏
  • 举报
回复
水平有限。看不出有什么毛病!
zykj_2000 2005-09-23
  • 打赏
  • 举报
回复
不建议这么做, conn对像也应该做到,尽量晚Open,尽量早close
JzeroBiao 2005-09-23
  • 打赏
  • 举报
回复
封一个数据执行类...
如..
public void 执行没返回(string sCommand)
{
打开
执行
关闭
}

每天执行调用.这样不好吗?
blacklevin 2005-09-23
  • 打赏
  • 举报
回复
或者有什么更优化的方法也可以告诉我,谢谢。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧