• ASP.NET常见错误的区域


    一、没有异常处理代码的程序
            //创建数据连接对象,连接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.可以使用记事本打开日志文件
     
     
  • 相关阅读:
    Nginx的反向代理和负载均衡
    大数据开发——Hive笔记
    Mysql-索引分析查询性能
    数据库原理-事务隔离与多版本并发控制(MVCC)
    并发编程实战--知识图谱
    并发编程实战-线程池
    并发编程实战-保证线程安全方式
    Synchronized和ReentTrantLock二者区别
    并发编程实战-J.U.C核心包
    并发编程实战-ConcurrentHashMap源码解析
  • 原文地址:https://www.cnblogs.com/ruishuang208/p/3158381.html
Copyright © 2020-2023  润新知