【小白提问】最简单的问题


SqlConnection conn = getConnection.getConn();
using (conn)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "Insert Into XX values(xxxxx)";
cmd.Parameters.AddWithValue("@xxxx", xxx);
cmd.Parameters.AddWithValue("@xxxxx", xxxx);
conn.Open();
cmd.ExecuteNonQuery();
}


这是一贯写法。后来偶尔看到有人在cmd.ExecuteNonQuery();后面写了conn.close();
请问有必要吗?
我一直都没close过,也没见出过异常啊。
请高手解答。
...全文
121 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
5Br 2008-11-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 oec2003 的回复:]
没有必要 使用了using 在using 包含的内容执行完 会自动释放资源
[/Quote]
这就是用USING的好处
其实不必手动关闭
结束USING的时候会自动关闭的
zhu660 2008-11-16
  • 打赏
  • 举报
回复
有必要,除了保险,释放资源外,
还有一个就是【规范】,很重要的啊!
gengwanshanreally 2008-11-16
  • 打赏
  • 举报
回复
从节省资源考虑,还是有必要关一下。
没有梦想 2008-11-16
  • 打赏
  • 举报
回复
双保险撒 - -!手动写的比较让人安心。其实实际也可以不用写。
shadowjl 2008-11-16
  • 打赏
  • 举报
回复
就是说

using (SqlConnection conn = getConnection.getConn())
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "Insert Into XX values(xxxxx)";
cmd.Parameters.AddWithValue("@xxxx", xxx);
cmd.Parameters.AddWithValue("@xxxxx", xxxx);
conn.Open();
cmd.ExecuteNonQuery();
}
最好这样
否则在别的地方引用conn可能会有异常,而如上写conn范围只作用于using 块
shadowjl 2008-11-16
  • 打赏
  • 举报
回复
不用,using会被编译成
try
{}

finaly
{Dispose();}
语句

MSDN:
可以实例化资源对象,然后将变量传递给 using 语句,但这不是最佳做法。在这种情况下,该对象将在控制权离开 using 块之后保持在范围内,即使它可能将不再具有对其非托管资源的访问权也是如此。换句话说,再也不能完全初始化该对象。如果试图在 using 块外部使用该对象,则可能导致引发异常。由于这个原因,通常最好是在 using 语句中实例化该对象并将其范围限制在 using 块中。

Font font2 = new Font("Arial", 10.0f);
using (font2) // not recommended
{
// use font2
}
// font2 is still in scope
// but the method call throws an exception
float f = font2.GetHeight();




walkghost 2008-11-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 oec2003 的回复:]
没有必要 使用了using 在using 包含的内容执行完 会自动释放资源
[/Quote]
正解。
jiang_jiajia10 2008-11-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 oec2003 的回复:]
没有必要 使用了using 在using 包含的内容执行完 会自动释放资源
[/Quote]
up
cteddy 2008-11-16
  • 打赏
  • 举报
回复
我一般这样写

using (SqlConnection conn = ×××××){
……
}
这样更省事

相信微软的垃圾回收

自己手写我认为纯属多余,有专家认为还会引起内存从构,效率变低
(这是WROX红皮书上讲的,可不是我的评论啊)

楼主放心吧
我亲自做过测试,回收很及时的.
自己写的话估计反而不好

彬智vs酷 2008-11-16
  • 打赏
  • 举报
回复
我接一个项目改版,以前是其他人做的,在数据库连接这一个是尝的不错苦头.上面的写法在做正规的项目时是不会用到了,因为一般把Sqlcommand的连接集成在dll里面了, 但规范的写法是在写conn.close() 有这个必要,为后期维护考虑.
跟大家共享一个问题.
用Dreader dr,dr2读取数据
While(dr.reader())
{
dr2=Sqlcommand....
}
这样数据库的连接,能否及时关闭
zswanghaiyan 2008-11-16
  • 打赏
  • 举报
回复
欢迎大家来到这个交流大家庭,
本群技术交流,疑难解答。大家 一起努力...
.NET开发群号: 38850938
oec2003 2008-11-15
  • 打赏
  • 举报
回复
没有必要 使用了using 在using 包含的内容执行完 会自动释放资源

62,046

社区成员

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

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

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

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