关于try..catch...finally的问题.

hkxing 2006-11-06 07:22:37
先看代码吧.
//根据SQL语句返回DataSet对像;
public static DataSet pbDs(string sqlStr)
{
DataSet ds = new DataSet();
SqlDataAdapter sda = new SqlDataAdapter();
try
{
comm.CommandType = CommandType.Text;
comm.CommandText = sqlStr;
openConn();
sda.SelectCommand = comm;
sda.Fill(ds, "temptable");
}
catch (Exception e)
{
System.Web.HttpContext.Current.Response.Write("错误信息4:" + e.Message);
}
finally
{
ds.Dispose();
sda.Dispose();
closeConn();
}
return ds;
}

先说这样写行吗?
finally里的不是说最终执行吗?ds.Dispose();这样一句,return ds还有什么意义吗?
不知道哪位给解释一下行吗?我自己都糊涂了.
...全文
251 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
smartstar2005 2006-11-09
  • 打赏
  • 举报
回复
TO greatqn(一剑)

无连接数据集不代表它没有使用DB连接

这里的"连接"和"无连接"的"连接"概念不一样
hkxing 2006-11-09
  • 打赏
  • 举报
回复
ds.Dispose()只销毁了连接,没销毁数据? 那conn.close()和conn.Dispose()是吃饭的了?
是不是这样啊.
一:如果没有返回值的方法,像ExecuteNonQuery这样的.我们就用finally进行关闭所有的.不会出错.
二:如果有返回值,像DataSet这样的方法.只果只是查询用,也可以关闭.
三:如果是有返回值,并且需要返回来修改数据库的.就不要关闭???但是关闭了也没有关系啊.不是每次执行这个方法的时候又会打开吗?越学越糊涂..................糊涂中.....
greatqn 2006-11-09
  • 打赏
  • 举报
回复
dataset是无连接数据集,跟连接根本没关系么。
greatqn 2006-11-09
  • 打赏
  • 举报
回复
楼上意思是ds.Dispose()只销毁了连接,没销毁数据? 

有空验证一下,跟原来理解不一样。
smartstar2005 2006-11-09
  • 打赏
  • 举报
回复
To hkxing()

ds.Dispose()销毁了DB连接
hkxing 2006-11-07
  • 打赏
  • 举报
回复
TO:smartstar2005() 你的意思是?ds.Dispose()去掉了.
zhongwanli 2006-11-07
  • 打赏
  • 举报
回复
同意: www_123du_com(鼠·神·泪)
smartstar2005 2006-11-07
  • 打赏
  • 举报
回复
To hkxing()

不会有问题,除非你还用它的连接(Connection)

DB连接在Dispose的时候已经没有了
ser_3vlogic 2006-11-06
  • 打赏
  • 举报
回复
关注下....
如果想要把连接数据库的代码放到组件中该如何写呢?
hkxing 2006-11-06
  • 打赏
  • 举报
回复
TO:viena(维也纳nn) return rs不是返回值吗?
TO:www_123du_com(鼠·神·泪) 我去了可以执行,不去照样执行,都不出错哦.所以我苦恼呢.
TO:hhg_15(ジ忘却的记忆)明白你的意思.在try里放return ds catch里放return null;这样可以,不会提示说"不是每个子句都有返回值.".那不是我想要的结果.
TO:smartstar2005() (....我跟你想法倒一样,不知道以后这样用会不会有问题.有权威人士指点吗?

感谢各位..越讨论越有意思..顶...兄弟,接着说,都讲的很有道理.失败中可以学到更多东西.

smartstar2005 2006-11-06
  • 打赏
  • 举报
回复
代码没有问题,正确的

Dispose只是销毁一些系统资源,如:窗体句柄,DB连接和图形设备等。但它不释放系统占有的内存资源。所以你DataSet中的数据仍然存在。可以正常返回。

我人为,Dispose释放的资源不包括内存资源。


landy_shasha 2006-11-06
  • 打赏
  • 举报
回复
你销毁了,返回什么
hhg_15 2006-11-06
  • 打赏
  • 举报
回复
return ds 放到try的最后一句后面
www_123du_com 2006-11-06
  • 打赏
  • 举报
回复
hechli1979() ( ) 信誉:100 Blog 2006-11-06 19:39:00 得分: 0


return ds;放到finally
______________________________

finally不允许有return语句。

================================

ds.Dispose(); //这句去掉
不然你返回的ds有什么用?
hechli1979 2006-11-06
  • 打赏
  • 举报
回复
return ds;放到finally
viena 2006-11-06
  • 打赏
  • 举报
回复
总要有返回值吧
viena 2006-11-06
  • 打赏
  • 举报
回复
有意义

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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