在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1.建立一个自己的异常类。有一点是我比较困惑的,如果我通过SqlCommand来执行一个查询或者更新,由于种种原因操作没有成功,抛出一个SqlException,那么在SqlException里面应当有一个属性来打印查询或更新的sql命令文本。就我个人而言,我觉得这是对开发者最有帮助的信息。虽说异常里提供了调用栈,可以帮我定位到出错的数据层、逻辑层或显示层方法,但查看这些方法的源代码、找出里面执行数据库操作的相关语句效率还是太低了。可我找了半天也没找到,如果哪位同志清楚的话能不能跟我说一下?如果确实没有这个属性,请问又是为什么呢?我自己的异常类非常简单,除了一个SqlException类型的对象,就是一个表示sql命令的文本,代码如下:
1public class SqlTextException : Exception
2 } 2.接下来,在数据层的相关位置截获sql异常,并封装成SqlTextException类型继续抛出,以数据层的一个方法举例如下:
1public Object ExecuteScalar(string cmdText, SqlParameter[] sqlParams)
2} 3.异常被创建了,也从数据层被抛出了,接下来就是对异常的处理了。正如随笔开头所说的那样,数据层会在两种运行环境中被用到,一种我们姑且称之为同步Web环境,这种环境的特点有3:(1)程序的运行是由客户端对服务器端页面的请求直接引发的;(2)当前线程位于w3wp工作进程管理的线程池中;(3)用户正在客户端等待页面刷新。而另一种运行环境,要么代码是在服务器端的后台运行(windows服务),要么代码是另起一个工作线程在后台处理(任务队列),我们姑且统称为非Web环境。下面就对这两种环境分别叙述。
1void Application_Error(object sender, EventArgs e)
2} 非Web环境可就没那么幸运了,我还没能找到一个统一的未处理异常处理位置(哪位兄弟知道,望不吝赐教^_^)。好在这部分代码不多,我在一些主要的方法调用处进行了异常捕获,并把捕获后的异常存储数据库(在数据库里建了ErrorLog表,表包含Message,Source,TargetSite,StackTrace等列来记录异常的一些主要属性),这一部分就不赘述了。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论