怎么通过子函数停止主函数的运行

.Net技术 码拜 8年前 (2016-03-08) 1446次浏览
        
private static DataSet OperateGetDataset(string sTable, string sFiled)
        {
            try
            {
                string sCommand;
                OleDbDataAdapter oddaAdapter;
                DataSet dsData;
                sCommand = "SELECT " + sFiled + " FROM " + sTable;
                oddaAdapter = new OleDbDataAdapter(sCommand, odcConnection);
                dsData = new DataSet();
                oddaAdapter.Fill(dsData);
                return dsData;
            }
            catch (Exception ex)
            {
                MessageBox.Show("数据加载失败 " + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return null;
            }
        }

在主函数调用这个方法之后,假如这个方法执行的是catch语句,则主函数不继续运行。
这样的效果怎么在这个方法中实现?

解决方案

10

子函数没有权利决定父函数的运行过程。
基于你现在想要的效果,个人建议直接删除OperateGetDataset方法的异常处理,让异常直接抛出给主函数即可。
假如主函数想要继续运行,就必须捕获异常。
假如主函数没有捕获异常,那么异常自动往更上层的函数抛,OperateGetDataset自然就不继续运行了。

10

在一般的任务处理函数中用 try…catch 方式来隐藏异常,是比较低级的做法。
实际上 try….catch 主要是这样用的:
try
{
string sCommand;
OleDbDataAdapter oddaAdapter;
DataSet dsData;

sCommand = “SELECT ” + sFiled + ” FROM ” + sTable;
oddaAdapter = new OleDbDataAdapter(sCommand, odcConnection);
dsData = new DataSet();
oddaAdapter.Fill(dsData);
return dsData;
}
catch (Exception ex)
{
throw new Exception(“数据加载失败,而且本人也不想让你准确调试具体代码。”, ex);
}
注意 Exception 实例化时有第二个参数 InnerException。
这样的 try…catch 的目的只是为了封装一下异常信息,然后继续抛出。而它并不是为了什么“隐藏异常、转而正常返回 null”。那种目的。
一些学过一点 c++ 简单编程知识的业余编程人员,可能学到的入门函数是通过“返回0、返回null、返回错误码等方式来返回异常”的做法。这些在 .net 中都是极其不规范的做法。规范的做法就是 throw 异常,而且不要胡乱写 catch。异常就是要抛给整个系统的底层表现层最外层(专门处理界面的最外层代码),而不走 return 代码。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明怎么通过子函数停止主函数的运行
喜欢 (0)
[1034331897@qq.com]
分享 (0)