C#关于try catch finally

在书上看到这样一段代码:
myConn.Open();
try
{
myCmd.ExecuteNonQuery();

}
catch (Exception ex)
{
throw (ex);
}
finally
{
myCmd.Dispose();
myConn.Close();

}
SqlDataAdapter da = new SqlDataAdapter(myCmd);
DataSet ds= new DataSet();
da.Fill(ds, P_Str_srcTable);
我觉得有问题:
SqlDataAdapter da = new SqlDataAdapter(myCmd);
DataSet ds= new DataSet();
da.Fill(ds, P_Str_srcTable);
这一段我认为放try里面
但是书上好多地方都是上面那样用的
try
{
}
执行玩了不是就
finally
{
}
了吗?那样myCmd都Dispose()掉了
还可以SqlDataAdapter da = new SqlDataAdapter(myCmd);
想不明白,哪位解释一下好吗?
主要是我的标题没拟好,导致这么多人答非所问,老是要和try、catch、fianlly过不去,我的错!既然大家都在讨论try,finally.....我也说说:我提过,并不是总是执行finally块的!知道CLR吗?要是CLR停止工作,就不会执行finally块。所以不要太依赖finally块 ,应该在临界终结程序中清理临界资源以适应加速关闭的情况!

第1个回答  2008-08-02
try
{
myCmd.ExecuteNonQuery();

}
上面这个部分的try块(大括号中的代码)是检测块中代码是否异常(或是错误),如果将以下代码(放入try中就是检测代码是否有错):
SqlDataAdapter da = new SqlDataAdapter(myCmd);
DataSet ds= new DataSet();
da.Fill(ds, P_Str_srcTable);

1.如果块内代码有错的话,就执行catch块:
catch (Exception ex)
{
throw (ex);
}
寻找匹配的异常,catch块执行完后就接着执行finally块以及其后语句:
finally
{
myCmd.Dispose();
myConn.Close();

}
SqlDataAdapter da = new SqlDataAdapter(myCmd);
DataSet ds= new DataSet();
da.Fill(ds, P_Str_srcTable);

2.如果try块中没有错误的话,catch块就不会执行,直接跳过去执行下面的代码(就好象catch块不存在一样)

总之:
try是用来检查块中代码是否有错误
catch代码是来确定出现的究竟是什么异常(暂时先这样说)
finally及其后语句无论什么情况都是要运行的
(希望能对你有些帮助)本回答被网友采纳
第2个回答  2008-08-03
DataAdapter 与 DataSet 是不需要Open()与Close()和Dispose()方法的;
当然从根本上讲DataAdapter 与 DataSet还是会执行Open()与Close()和Dispose()方法,但是这些方法已经在DataAdapter 与 DataSet 类的内部封装好了,并不需要你在此处把他们写出来。
第3个回答  2008-08-03
一楼回答迷迷糊糊!
我感觉楼主的代码至少应该还有sqlcommand对象,如果再把这个对象贴出来,可能能更好理解 ,如果有了command对象 try语句只是说sqlcommand语句执行了没有,如果执行了走 finally 关闭所有连接
然后执行SqlDataAdapter对象 如果没有执行,则抛出异常。我感觉是这样理解,不知道对不对!

一家之言
第4个回答  2008-08-05
好长!

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网