好的编程习惯收益的是自己[如鹏网]
注:本文面向初学者。
前两天帮 QQ 群中的一个同学远程解决一个问题,这个同学据说自己
折腾了一天都没搞定,给他结果以后感想非常多,今天有时间把这个问
题以及背后隐藏的问题分享给大家。
下面说的吃异常的错误不仅初学者会犯,很多工作很多年的人也经常会犯这种错误,因
此虽然在很多人看起来很简单,我还是在这里罗嗦了,希望对有的人有帮助。
这位同学说他写的程序总是报错说字段 ParentId 没找到,但是数据库中是有代码的。他
是通过 SQLHelper 获得一个 DataTable,然后把 DataTable 展示到 ListView 中进行数据展示
的。示例性代码如下:
DataSet ds = SQLHelper.ExecuteDataSet("select * from T_Persons");
listview1.DataSource = ds;
listview1.FilterExpression = "ParentId=3";
其实他的这个程序是有很大缺陷的,因为他是在 UI 层中进行数据过滤的,这个问题暂且不
提。
主要问题是,T_Persons 表中是有 ParentId 这个字段的,但是总是报异常“没有
ParentId 字段”。
一直让他很费解,因此我就猜测程序中有被吃掉的异常,因此我在 VisualStudio 中打开
异常检测,打开主菜单→调试→异常,将 Common Language Runtime Exception 勾选上,
这样就表示对于捕获的异常也 Break,这样就可以发现被吃掉的异常了。
程序运行,果然在 SQLHelper.ExecuteDataSet 调用 SqlConnection 环节中看到异常抛出了,
是“数据库连接失败”,示例性代码如下:
DataSet ds = new DataSet();
try
{
SqlConnection conn = new SqlConnection(.........);
//...
adapter.Fill(ds);
}
catch
{
}
return ds;
原来是他的连接字符串写错了。由于他想“耳根子清净”,就可耻的把异常给吃掉了,这
样虽然数据库根本就没连接上,ExecuteDataSet 方法仍然好像啥事都没发生一样假模假样