科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道[SQL Server]浅谈如何处理数据层错误(2)

[SQL Server]浅谈如何处理数据层错误(2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

开发人员在努力做到妥善地处理意外,这样用户就不用担心天书般的系统错误信息。出于这个原因,异常处理是每个.NET应用程序的一个标准部分。

作者:Tony Patton 来源:zdnet 2007年9月15日

关键字: SQL Server SQL Server 各版本 数据库

  • 评论
  • 分享微博
  • 分享邮件
 

在列表A里,示例存储过程使用了这些特性来更新示例Northwind数据库里的一条记录:

CREATE PROCEDURE sp_UpdateCustomerPhone(

@id nvarchar(5),

@phone nvarchar(24),

@retvalueint output

) AS

BEGIN

BEGIN TRANSACTION

UPDATE [dbo].[Customers] SET [Phone] = @phone WHERE([CustomerID] = @id)

IF (@@ERROR <> 0) -- a non-negative value signals an error

BEGIN

ROLLBACK TRANSACTION -- changes are not permanent

RAISERROR('Update Customers Error',1,1) -- raise a custom error message

-- Custom error message appears if run from console

SET @retvalue = -1 -- return negative value to signalproblems

END

COMMIT TRANSACTION -- make the changes permanent, so record is updated

SET @retvalue = 1 -- a positive return value signalssuccess

RETURN

END

如果没有错误发生,它就把电话号码列设置为一个值,传递给过程。它使用一个返回值参数,如果有问题发生它就返回一个负值,如果用所有的东西都执行没有问题,它会返回一个正值。

用存储过程返回值

通过存储过程返回值,我们可以把它用在我们的.NET代码里。SqlCommand对象允许你很容易就添加参数传递给过程以及存储返回值。参数的Direction属性被用来接收来自存储过程调用的值。它有两个属性值:InputOutput和Output。在我们的例子里,我们将使用Output来接收状态值。

这段代码是一个简单的ASP.NET页面,用来传递一个用于Northwind数据库的客户表格里某个数据的新值。而id值事实上被保存在一个隐藏字段里,可以被轻易地传递给表单,但是这个字段是用来说明的。在文本字段输入的值被用更新数据库表格里的电话号码字段。

参数被添加给SqlCommand对象(它们必须精确地符合存储过程的参数值)。命令通过SqlCommand对象的ExecuteNonQuery方法被执行。一旦它已经被执行,返回的值可以通过参数来取回。

代码会检查返回的值(-1表示有问题),而消息会显示在一个Label控件里。此外,一个try/catch块被用来捕捉在与数据库进行交互操作过程中可能发生的任何致命错误。

利用try/catch代码块来处理.NET应用程序代码里的异常是一个简单明了的过程,但是你还可以监视数据库层的异常。SQLServer的T-SQL语言为你处理代码异常提供了所需要的一切。

Tony Patton的职业生涯开始于应用程序开发员,并已经获得了证明其专业水平的Java、VB、Lotus和XML认证。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章