热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#学习教程:从C#中的存储过程中捕获错误分享

从C#中的存储过程中捕获错误我有一个存储过程,用于在登录期间validation用户。如果成功则返回用户实体,这样做效果很好!我的问题是,如果它不起作用,我会在SP中引发错误,如何

从C#中的存储过程中捕获错误

我有一个存储过程,用于在登录期间validation用户。 如果成功则返回用户实体,这样做效果很好! 我的问题是,如果它不起作用,我会在SP中引发错误,如何捕获此错误并以最佳方式使用它? 现在我得到nullrefference,这是代码:存储过程:

ALTER PROCEDURE getEmployee ( @username nvarchar(50), @password nvarchar(50) ) AS DECLARE @Error_MSG nvarchar(50) BEGIN IF EXISTS (select * from Employee where eUsername = @username AND pword = @password) begin select * from Employee where eUsername = @username AND pword = @password END ELSE BEGIN SET @Error_MSG = 'Wrong password, or user doesnt exist' RAISERROR (@Error_MSG, 11,1) END END 

在代码中看起来像这样,SP就是getEmployee

 ActivityDatabaseDataContext dc = new ActivityDatabaseDataContext(); Employee emp; public bool logIn(string piUsername, string piPassword) { try { emp = dc.getEmployee(piUsername, piPassword).Single(); } catch (Exception ex) { errorMsg = ex.Message + ex.InnerException.Message; } if (emp != null) { AppHelper.AppHelper.setUser(emp); return true; } else { return false; } 

我的问题是我应该如何处理exception?

我通常不会从SP引发错误,除非它实际上是操作的系统问题。 输入错误的用户名和密码是一个用户问题,你只需要在接口级别处理一个问题,所以我将大部分SP丢弃并处理两个用例(返回1行或0行)业务层或接口代码。 如果为0行,则向客户端抛出“错误的用户名或密码”消息,如果为1,则登录。

 ALTER PROCEDURE getEmployee ( @username nvarchar(50), @password nvarchar(50) ) AS BEGIN select * from Employee where eUsername = @username AND pword = @password END 

您的InnerException可能为null。

您应该尝试捕获并处理特定的exception,在本例中为SqlExceptions 。

  ALTER PROCEDURE getEmployee ( @username nvarchar(50), @password nvarchar(50) ) AS BEGIN select * from Employee where eUsername = @username AND pword = @password END 

…

 SqlCommand cmd = new SqlCommand("getEmployee", conn); cmd.AddWithValue('@username', name); cmd.AddWithValue('@password', pass); SqlAdapter da = new SqlAdapter(cmd); DataSet ds= new DataSet(); da.Fill(ds); if (ds.Table.Count > 0 && ds.Table.Rows.Count == 1) { // success } else { // fail } 

  IF(@Count>0) BEGIN SELECT @RetVal = 6 , @ErrMsg = 'A description with the same name exists. Please provide a unique name.' GOTO ERROR END 

在catch中使用内置的StoredProcException,这意味着:

  catch (StoredProcException spEx) { switch (spEx.ReturnValue) { case 6: UserMessageException umEx= new UserMessageException(spEx.Message); throw umEx; } } 

您可以将消息作为字符串而不是spEx.Message传递

上述就是C#学习教程:从C#中的存储过程中捕获错误分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—编程笔记


推荐阅读
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • 本文由编程笔记小编整理,主要介绍了使用Junit和黄瓜进行自动化测试中步骤缺失的问题。文章首先介绍了使用cucumber和Junit创建Runner类的代码,然后详细说明了黄瓜功能中的步骤和Steps类的实现。本文对于需要使用Junit和黄瓜进行自动化测试的开发者具有一定的参考价值。摘要长度:187字。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
author-avatar
hadley朱_469
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有