一、没有异常处理代码的程序
//创建数据连接对象,连接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.可以使用记事本打开日志文件 |
|
来自: 寒木萧条 > 《aspDotNetCode》