SqlDataReader 放在using里面 和自己手动关闭,哪个好?

luyesql 2008-08-29 09:43:17
using (SqlDataReader rdr = SQLHelper.ExecuteReader(.....))
{
while(rdr.Read())
{
}
}


SqlDataReader rdr = SQLHelper.ExecuteReader(.....)
whhile(rdr.Read())
{
}
rdr.close();

这两种方法哪种比较好?原因呢?
...全文
465 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
张国富 2010-08-28
  • 打赏
  • 举报
回复
支持4楼的。using是Dispose(); 而close()不等于Dispose()。那么顺序应该是先执行Close()关闭连接,然后执行Dispose()释放资源。
uxspy 2009-06-23
  • 打赏
  • 举报
回复
如果出现异常呢?????try该放using 里面还是外面???using 本身等同于try ...finally,那try放外面吗?如果这样的话,岂不是要先把reader弄个null放到try外面,这样catch的时候可以引用到
zhaizhanpo 2008-09-06
  • 打赏
  • 举报
回复
能放Using里面,尽量放吧。 省的自己忘记了关闭。

效果是一样的,自动和手动。
datahandler2 2008-08-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 caicai_45 的回复:]
能放Using里面,尽量放吧。 省的自己忘记了关闭。

效果是一样的,自动和手动。
[/Quote]
haomas 2008-08-29
  • 打赏
  • 举报
回复
习惯用Using了,,
lifengxiaorong 2008-08-29
  • 打赏
  • 举报
回复
放在using中的 必须事件Idisposable接口 using块执行完就会自动调dispose方法不需要 手动调了 免的忘记释放
但是也不会马上释放内存 内存的释放是垃圾回收干的活
编程有钱人了 2008-08-29
  • 打赏
  • 举报
回复
k
西安风影 2008-08-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ojekleen 的回复:]
using 不是等下close(),而是Dispose();
必须实现了IDisposable接口的类才能用using,当然,dispose的时候会把conn 关闭掉
[/Quote]
jack20080808 2008-08-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ojekleen 的回复:]
using 不是等下close(),而是Dispose();
必须实现了IDisposable接口的类才能用using,当然,dispose的时候会把conn 关闭掉
[/Quote]
你习惯哪种就用哪种,差别不太大
brooklyng60 2008-08-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 caicai_45 的回复:]
能放Using里面,尽量放吧。 省的自己忘记了关闭。

效果是一样的,自动和手动。
[/Quote]
stning 2008-08-29
  • 打赏
  • 举报
回复
支持4楼的。using是Dispose(); 而close()不等于Dispose()。
caofan520 2008-08-29
  • 打赏
  • 举报
回复
差不多
lc870306 2008-08-29
  • 打赏
  • 举报
回复
其实SqlDataReader 不用你手动关闭在执行他过后他都是自动关闭的
ojekleen 2008-08-29
  • 打赏
  • 举报
回复
等下改成等于,
ojekleen 2008-08-29
  • 打赏
  • 举报
回复
using 不是等下close(),而是Dispose();
必须实现了IDisposable接口的类才能用using,当然,dispose的时候会把conn 关闭掉
46539492 2008-08-29
  • 打赏
  • 举报
回复
主要看你的DataReader关闭的时机,下面的代码就没用using

public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(connectionString);

// we use a try/catch here because if the method throws an exception we want to
// close the connection throw code, because no datareader will exist, hence the
// commandBehaviour.CloseConnection will not work
try {
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return rdr;
}
catch {
conn.Close();
throw;
}
}
我姓区不姓区 2008-08-29
  • 打赏
  • 举报
回复
都一样的,用using可以避免忘了Close
caicai_45 2008-08-29
  • 打赏
  • 举报
回复
能放Using里面,尽量放吧。 省的自己忘记了关闭。

效果是一样的,自动和手动。

62,025

社区成员

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

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

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

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