日期:2014-05-17  浏览次数:20480 次

初级问题,请大侠们指点迷津,,,,,,重在参与
SqlDbConnection mydb = new SqlDbConnection();
  mydb.conn.Open();

  string strread = "select * from tab";
  SqlCommand cmd = new SqlCommand(strread, mydb.conn);
  SqlDataReader dr = cmd.ExecuteReader();
  if (dr.Read())
  {
  so something....
  }
  else
  {
  Response.Write("<script>alert('记录不存在,确认返回!');history.go(-1);</script>");
  return;
  }
  dr.Dispose();
  cmd.Dispose();
  mydb.conn.Close();





我想问的是,要都能关闭数据链接此处的mydb.conn.Close()放在哪里最好,,,,,??

如果没有取到记录,就执行js那一句返回上一页了,那下面的dr.Dispose();cmd.Dispose();mydb.conn.Close();有没有闭关啊?


新手学习求指点,,,,,,,,,,,,,,,,,,,,,

谢谢!!!!!!!!

------解决方案--------------------
获取到数据就可以关闭了。放 SqlDataReader dr = cmd.ExecuteReader();
这句下面都可以 
不过你放在最后也没什么 快不了多少
------解决方案--------------------
不想写关闭的话,那就用
using(SqlConnection con = new SqlConnection("XXX"))
{
using(SqlCommand cmd = new SqlCommand(xx,xx))
{

}
}

如果不使用了,GC机制会在适当的时候自动回收资源的
------解决方案--------------------
如果都是局部的,方法运行完就销毁了,当在代码结尾手动释放是对的
------解决方案--------------------
SqlDbConnection mydb = new SqlDbConnection();
SqlDataReader dr;
try{
mydb.conn.Open();

string strread = "select * from tab";
SqlCommand cmd = new SqlCommand(strread, mydb.conn);
dr = cmd.ExecuteReader();
if (dr.Read())
{
so something....
}
else
{
Response.Write("<script>alert('记录不存在,确认返回!');history.go(-1);</script>");
return;
}
catch{}
finally{
dr.Dispose();
cmd.Dispose();
mydb.conn.Close();
}

放在finally中
------解决方案--------------------
在方法的末尾关闭就行
或者
using(SqlDbConnection mydb = new SqlDbConnection())
{
}


------解决方案--------------------

先找个DBhelper类研究研究
------解决方案--------------------
没有try catch finally 写数据库的操作代码很危险,尤其你的代码中还有datareader,写在finally就可以。。