关于数据关闭

nbgzc 2009-03-07 02:15:50
SqlHelper里的ExecuteReader好像没有关闭conn会不会有影响,我看到SQL里好像访问过后还存在很多进程。


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

try
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return rdr;
}
catch
{
conn.Close();
throw;
}
}
...全文
89 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dotnetsong 2009-03-07
  • 打赏
  • 举报
回复
会自动关闭的,当你用using的时候,如果出了using块就会自动关闭了,
不过不是很可靠,因为关闭后只是把这个任务交给.net CLR来处理了,他的关闭是
不可控制的.
longyangyxm 2009-03-07
  • 打赏
  • 举报
回复
我一直都放在finally 里
niitnanfeng 2009-03-07
  • 打赏
  • 举报
回复

建议这样:
SqlHelper里的ExecuteReader好像没有关闭conn会不会有影响,我看到SQL里好像访问过后还存在很多进程。


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

try
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
using(SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
cmd.Parameters.Clear();
return rdr;}
}
catch
{
conn.Close();
throw;
}
}
}
angellan 2009-03-07
  • 打赏
  • 举报
回复
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(connectionString);
try
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return rdr;
}
catch (Exception e)
{
cmd.Dispose();
System.Web.HttpContext.Current.Response.Write("数据库执行失败!" + e.ToString());
return null;
}
这样就行了,我这样写的都没有问题
walkghost 2009-03-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 saucer 的回复:]
你需要在你的客户端代码中关闭reader,注意里面的设置

SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

使用CommandBehavior.CloseConnection就是说,如果你关闭reader,reader就会关闭相应的connection
[/Quote]
顶,如果你在方法里关闭了数据库连接的话,你返回的DataReader就毫无作用了。你再去引用的时候就会报错:不能读取已关闭的连接。DataReader是一行行的读的,类似游标。你返回的是一个DataReader实体但是它不包含sql语句执行的结果的数据集。
奔跑的蜗牛007 2009-03-07
  • 打赏
  • 举报
回复
必须关闭,此对象是独占数据库连接的
saucer 2009-03-07
  • 打赏
  • 举报
回复
你需要在你的客户端代码中关闭reader,注意里面的设置

SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

使用CommandBehavior.CloseConnection就是说,如果你关闭reader,reader就会关闭相应的connection

62,266

社区成员

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

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

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

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