zoukankan      html  css  js  c++  java
  • ASP.NET 如何catch存储过程中抛出的异常信息

    修改资料库的时候,我们要做一些判定,比如输入的资料不能为空、资料已存在或与其它表的资料关联不能删除等等。

    输入的资料不能为空,这些都直接交由逻辑层去处理,而资料已存在呀、关联呀等等,这部分推荐让数据层去执行,但怎么返回提示信息并提示用户呢?catch是个不错的选择!

    当你要新增一笔资料的时候,不要做类似于“Sql  = Insert into [tableName] values(....);"这样的处理,直接调用存储过程就好了,假定存储过程的名称为[test_prc]

    那它的代码类似于下面这样子:

     1  CREATE PROCEDURE [dbo].[test_prc](
     2    @formNo nvarchar(20),  --单号
     3    @formName nvarchar(10) --名称
     4  )
     5  AS 
     6  BEGIN
     7    declare
     8    
     9      @Error_Msg nvarchar(200)
    10    
    11    --检查是否为空值
    12    IF ISNULL(@formNo,'')='' or ISNULL(@formName,'')='' 
    13    BEGIN
    14      set @Error_Msg = '单号、名称等不能为空值'
    15      RAISERROR(@Error_Msg,16,1) WITH NOWAIT
    16      return 1
    17    END
    18    
    19    --检查程序文件是否存在
    20    IF exists (select 1 from [tableName] where formNo=@formNo and formName=@formName)
    21    BEGIN
    22      set @Error_Msg = '单号'+@formNo+',名称'+@formName+'已存在,不允许增加'
    23      RAISERROR(@Error_Msg,16,1) WITH NOWAIT
    24      return 1
    25    END
    26      
    27    
    28    --新增
    29    INSERT INTO [tableName]
    30             ([formNo]
    31             ,[formName]
    32             )
    33       VALUES
    34             (@formNo
    35             ,@formName
    36             )
    37  END      

    有了以上代码之后,那我们就在程序中使用try...catch对这些异常信息做捕捉处理,如下:

     1         #region 成员方法
     2         /// <summary>
     3         /// 添加资料
     4         /// </summary>
     5         /// <param name="formNo">单号</param>
     6         /// <param name="formName">名称</param>
     7         /// <returns></returns>
     8         public bool Do_Process_Add_Info(string formNo, string formName)
     9         {
    10             bool result = true;
    11             SqlParameter[] oSqlParameter =
    12                   {                                       
    13                      new SqlParameter("@formNo",SqlDbType.NVarChar,20) ,
    14                      new SqlParameter("@formName",SqlDbType.NVarChar,10) 
    15                     };
    16             try
    17             {
    18                 //赋值
    19                 oSqlParameter[0].Value = formNo;
    20                 oSqlParameter[1].Value = formName;
    21 
    22                 sqlHelper.SP_ExecuteNonQuery("test_prc", oSqlParameter); //sqlHelper是实例化的用于操作数据库的实例!
    23             }
    24             catch (Exception err)
    25             {
    26                 result = false;
    27                 System.Windows.Forms.MessageBox.Show(err.Message);
    28                 //或者在网页中弹框
    29                 //Response.Write(err.Message);
    30             }
    31             return result;
    32         }

     好了,通过这样子,只要调用这个 Do_Process_Add_Info(string formNo, string formName) 方法就可以了,什么代码逻辑都不用修改,应该有的提示它全有了,呵呵。不知道触发器上面能不能这样子搞呢,呵呵。


     

  • 相关阅读:
    List for game to play latter
    C语言基础问题总结
    Java基础学习总结(70)——开发Java项目常用的工具汇总
    谈谈普通码农如何不靠工资也能月入过万
    Java基础学习总结(69)——匿名内部类与Lambda表达式
    Html学习总结(2)——Html页面head标签元素的意义和应用场景
    Android学习总结(5)——9个非常有用的Andorid 程序片段
    Mysql学习总结(39)——30条MySql语句优化技巧
    Java基础学习总结(68)——有关Java线程方面的面试题
    Mysql学习总结(38)——21条MySql性能优化经验
  • 原文地址:https://www.cnblogs.com/seasons1987/p/2806689.html
Copyright © 2011-2022 走看看