分享

asp.net程序异常处理代码

 寒木萧条 2010-10-07
一、没有异常处理代码的程序
        //创建数据连接对象,连接Northwind数据库
        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = "Server=PC-2010;user id=sy2010;password=123456;Database=Northwind;";
        //创建命令对象
        SqlCommand cmd = new SqlCommand();
        //设置命令对象的文本,表Customer本来是Customers,故意将s去掉的,以产生异常
        cmd.CommandText = "Select * from Customer";
        //设置命令对象的连接对象属性
        cmd.Connection = conn;
        //创建数据适配器对象
        SqlDataAdapter sda = new SqlDataAdapter();
        //设置数据适配器对象的SelectCommand属性
        sda.SelectCommand = cmd;
        //创建DataSet对象
        DataSet ds = new DataSet();
        //使用数据适配器对象填充数据集对象
        sda.Fill(ds);
        GridView1.DataSource = ds.Tables[0];
        GridView1.DataBind();
        其执行结果如下图:
          
  
二、有异常处理代码的程序
        //创建数据连接对象,连接Northwind数据库
        SqlConnection conn = new SqlConnection();
        try
        {
            conn.ConnectionString = "Server=PC-2010;user id=sy2010;password=123456;Database=Northwind;";
            //创建命令对象
            SqlCommand cmd = new SqlCommand();
            //设置命令对象的文本,表Customer本来是Customers,故意将s去掉的,以产生异常
            cmd.CommandText = "Select * from Customer";
            //设置命令对象的连接对象属性
            cmd.Connection = conn;
            //创建数据适配器对象
            SqlDataAdapter sda = new SqlDataAdapter();
            //设置数据适配器对象的SelectCommand属性
            sda.SelectCommand = cmd;
            //创建DataSet对象
            DataSet ds = new DataSet();
            //使用数据适配器对象填充数据集对象
            sda.Fill(ds);
            GridView1.DataSource = ds.Tables[0];
            GridView1.DataBind();
        }
        catch (SqlException ex)
        {
            //使用异常捕获的好处:第一、向管理员报告异常,第二、为用户提供一个友好的提示:系统正在维护中
            Response.Write("SqlException" + ex.Message);
        }
        catch (Exception ex)
        {
            Response.Write("Exception" + ex.Message);
        }
        //释放资源
        finally
        {
            if (conn != null)
                conn.Dispose();
            Response.Write("finally代码执行部分:完成");
        }
       其执行结果如下图:
       

三、获得“Sql错误信息”的程序代码
        //创建数据连接对象,连接Northwind数据库
        SqlConnection conn = new SqlConnection();
        try
        {
            //user id本来为sy2010,现故意将其改为sy20101,以出现异常
            conn.ConnectionString = "Server=PC-2010;user id=sy20101;password=123456;Database=Northwind;";
            //创建命令对象
            SqlCommand cmd = new SqlCommand();
            //设置命令对象的文本
            cmd.CommandText = "Select * from Customers";
            //设置命令对象的连接对象属性
            cmd.Connection = conn;
            //创建数据适配器对象
            SqlDataAdapter sda = new SqlDataAdapter();
            //设置数据适配器对象的SelectCommand属性
            sda.SelectCommand = cmd;
            //创建DataSet对象
            DataSet ds = new DataSet();
            //使用数据适配器对象填充数据集对象
            sda.Fill(ds);
            GridView1.DataSource = ds.Tables[0];
            GridView1.DataBind();
        }
        catch (SqlException ex)
        {
            Response.Write("异常信息:" + ex.Message + "<br>");
            foreach (SqlError error in ex.Errors)
            {
                Response.Write(
                     "Source: " + error.Source + "<br>" +
                     "Number: " + error.Number.ToString() + "<br>" +
                     "State: " + error.State.ToString() + "<br>" +
                     "Class: " + error.Class.ToString() + "<br>" +
                     "Server: " + error.Server + "<br>" +
                     "Message: " + error.Message + "<br>" +
                     "Procedure: " + error.Procedure + "<br>" +
                     "LineNumber: " + error.LineNumber.ToString());

                /* 
                  error对象各属性的含义:
                  (1)Source,获取生成错误的提供程序的名称
                  (2)Number,获取一个标识错误类型的数字
                  (3)State,状态编号其取值范围为1至127,状态编号指示发现错误的源位置
                  (4)Class,获取从SQL Server返回的错误的严重程度(级别)
                  (5)Server,获取生成错误的SQL Server实例的名称
                  (6)Message,获取对错误进行描述的文本
                  (7)Procedure,获取生成错误的存储过程或远程调用(RPC)的名称
                  (8)LineNumber,从包含错误的Transact-SQL批命令或存储过程中获取行号
               */

            }
        }
        finally
        {
            if (conn != null)
                conn.Dispose();
            Response.Write("<br>finally代码执行部分:完成");
        }
        其执行结果如下图:
         
 

注:
一、异常概念
   1.程序中错误的类型
     (1)语法错误
     (2)逻辑错误
     (3)运行时异常,比如数据库连接不存在、被0除
   2.DOTNET异常处理机制
     程序发生异常后,将寻找异常处理代码,如果不存在异常处理代码,.NET Framework将处理该异常(演示异常发生状况),.NET Framework处理异
常的方式就是将异常信息报告给用户
二、异常处理方式
    1.try(捕捉异常/抛出异常)
    2.catch(抓住异常/处理异常)
      (1)抓异常的过程是一个匹配异常类的过程,如果匹配就执行相应的异常处理代码
      (2)Exception是所有异常处理类的基类,将匹配所有的异常类
    3.finally(执行资源清理)
      (1)不过是否发生异常都将执行异常处理
      (2)finally不是必须的,在编程时可以根据需要进行应用
三、Exception类
    1.System.Exception类表示在应用程序执行期间发生的错误
    2.System.Exception 类是所有异常的基类型
      Message 属性是 string 类型的只读属性,它包含对发生异常的原因的可读描述
四、自定义异常处理类
    1.如果在程序执行过程中所引发的异常在C#中没有定义,这是我们可以自定义异常处理类以向用户提示异常信息。
    2.所有用户自定义的异常处理类都直接或者间接从Exception类派生而来
      class MyException:Exception
      {
       public MyException(string strMessage):base(strMessage)
       {
       }
      }
五、数据访问异常处理类
    1.在ADO.NET中,每一个数据提供程序都提供三种类型的类,这三种类型的类分别为Exception, Error, 和 ErrorCollection
    2.SQL Server数据提供程序提供了SqlException, SqlError和SqlErrorCollection
六、使用SqlException类
    1.SqlException对象表示当 SQL Server 返回警告或错误时引发的异常
    2.SqlException类的基类为System.Exception
    3.每当 SQL Server .NET Framework 数据提供程序遇到服务器生成的错误时,都将创建此类
七、使用 SqlError类和SqlErrorCollection类
    1.SqlException.Errors属性返回SqlErrorCollection类的一个对象
    2.SqlErrorCollection对象是SqlError对象的集合
    3.每一个SqlError对象封装了由SQL Server服务器引发的错误或者警告
八、识别SQL Server 2000 错误
    1.如果向SQL Server发送一个错误的SQL命令,SQL Server将返回一个格式化的错误消息
      Server: Msg 208, Level 16, State 1, Line 1
      Invalid object name 'SomeTable'
    2.消息格式
      Server: Msg 208, Level 16, State 1, Line 1
      Invalid object name 'SomeTable'
      (1)第一部分为错误消息编号,在SQL Server中每一个错误消息都有一个相应的编号与之对应。消息编号唯一标识每一个错误消息。
      (2)消息的第二部分为错误的安全级别,其值在0到25之间,错误安全级别代表错误的种类
      (3)错误消息的第三部分为状态编号,其取值范围为1至127,状态编号指示发现错误的源位置
      (4)错误消息的最后一部分为错误的描述,SQL Server的错误消息都存储在系统表sysmessages中,可以通过查询语句“select * from
sysmessages”查询出这些错误消息 
    3.错误安全级别
      范围              说明
      0–10    表示该消息并不是错误消息,而仅仅是提供一些有用的信息
      11–16       11-16类别的错误是由用户导致的。例如安全级别16表示用户执行了一个错误的更新操作
      17    SQL Server已经使用了不可配置的资源,例如锁
      18    代表非重大的内部软件错误
      19    已经超过了不可配置的资源限制
      20    当前进程残生的错误
      21    影响SQL Server所有进程的错误
      22    表或者索引被破外
      23    表示一个非法的数据库
      24    表示硬件错误
      25    代表系统错误
九、SQL SERVER错误日志
    1.SQL Server维护一个错误日志(文本格式)用于存储服务器信息和错误消息
    2.错误日志文件可以帮助我们记录下来各种出现的问题和潜在的问题
    3.SQL Server日志文件存储在SQL Server根目录下的LOG文件夹下,在这个文件夹下有不止一个日志文件,并且第一个文件为ERRORLOG
    4.可以使用记事本打开日志文件
 
 
 
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多