继续以delete_dept为例。
作为存储过程,当“如果dept内有对应的person,那么提示用户不能删除”这个需求提出的时候,delete_dept是无法在运行时提醒用户的,因此它必须和UI代码达成协议:当delete_dept返回-1的时候,就是不能删除的意思,然后由UI代码提示用户“不能删除”。
就是说,检查部分在存储过程,而检查后的结果有UI来执行。两者通过return的负数来决定给用户怎样的提示。
确实如此:我们有不少代码都是通过存储过程返回负值来说明错误的类型,然后有UI解释这个错误,决定如何告诉用户。
既然如此,为什么不直接由存储过程来决定提示内容呢?尽管return不能返回文本内容,但是raiserror可以(要求 sql2005):
CREATE PROCEDURE [dbo].[delete_dept]
@id int
AS
if exists (select * from person where dept_id = @id)begin
raiserror(16,1,"不能删除")
return
end
delete from dept where id=@id
RETURN 0
客户端代码:
void delete_dept(int id)
{
try{
RunProc("delete_dept",id);
}catch(Excetion ex ){
MessageBox.Show(ex.message);
}
}
这样的做法,好处在于判断和消息反馈都在一起。而不是如同以往的做法那样分离开来。本来就是两个相关的功能工作,应该放到一个代码块内,从而让代码的职责更加清晰。现在sql2005和以后的版本都已经支持了这个做法。
分享到:
相关推荐
SAP best practise part 3
SAP Best Practise part1
- **定义索引**:了解如何创建有效的XML索引,以加速查询过程。 - **在XML查询中使用索引**:掌握如何在XQuery和SQL/XML查询中利用索引,提高查询效率。 ### 更新XML数据的策略 - **简单XML更新**:提供基本的更新...
sap best practise 50097738_SAP_BP_Baseline_Package_v1-V2.603
2. **持久层管理**:JPA(Java Persistence API)和Hibernate是管理数据库持久化的常用工具。它们提供了ORM(对象关系映射)功能,使得开发者可以用面向对象的方式处理数据,简化了数据库操作。 3. **事务管理**:...
本篇文章基于《Oracle 10g HA Best Practise》一书的关键信息,旨在深入探讨Oracle 10g数据库在高可用性(High Availability, HA)方面的最佳实践。书中介绍了如何通过Oracle 10g的高级功能来减少计划维护操作期间的...
HBase在不同版本(1.x, 2.x, 3.0)中针对不同类型的硬件(以IO为例,HDD/SATA-SSD/PCIe-SSD/Cloud)和场景(single/batch, get/scan)做了(即将做)各种不同的优化,这些优化都有哪些?如何针对自己的生产业务和...
#### 2. 富士通ETERNUS存储系统 - **高可用性**:ETERNUS系列提供了一系列高级特性,确保数据的高度可用性和可靠性。 - **冗余组件**:如控制器、电源和风扇等,防止单点故障。 - **多路径支持**:确保数据传输的...
《dojo toturial with design best practise》是一本深入探讨Dojo框架并结合设计模式实践的书籍。这本书旨在帮助开发者不仅掌握Dojo库的基本用法,还能理解如何在实际项目中运用设计模式,以提高代码质量和可维护性...
在本实践项目“practise:proteas的编程实践”中,我们将深入探讨Proteas的编程技术,尤其侧重于使用C语言进行开发。Proteas是一个可能涉及生物信息学、模拟或数据分析的系统,因为通常在这些领域中会用到特定的编程...
在IT行业中,"poc_practise:样品回购"这个标题和描述可能指的是一个安全漏洞验证项目,其中“POC”通常代表Proof of Concept(概念验证),是安全研究人员用来证明某个漏洞确实存在的一个小演示或代码片段。...
2.rpc框架 grpc google.golang.org/grpc 普通模式 双向流模式 3.配置读取 toml github.com/BurntSushi/toml 4.数据存储 mysql github.com/go-sql-driver/mysql github.com/go-xorm/xorm redis github....
HTTPS是HTTP协议的安全版本,通过SSL/TLS协议加密通信,确保数据在传输过程中不被窃取或篡改。在使用jQuery进行HTTPS通信时,我们需要关注跨域安全、证书验证和HTTPOnly cookies等问题。跨域请求需遵循同源策略,但...
这个"JS-Practise:JavaScript范例"项目,显然是一份用于学习和实践JavaScript编程技巧的资源集合。下面我们将深入探讨JavaScript的关键知识点,并结合实际例子来帮助理解。 1. **基础语法** JavaScript的基础语法...
在本项目"Api_Practise:C#_Api_Practise"中,主要涉及的是使用C#编程语言进行API(应用程序接口)的实践操作。API是软件系统之间交互的桥梁,它允许不同的应用共享数据和服务,从而提升开发效率和系统的互操作性。...
##### 2. **问题管理** - **根因分析**: 使用先进的工具和技术进行根本原因分析,以防止未来的问题发生。 - **知识库**: 建立一个全面的知识库,记录已知问题及其解决方案,以便快速查找和解决问题。 - **趋势分析*...
1. **模块化(Modules)**:C++20引入了模块化,它允许程序员将代码组织成独立的单元,提高了编译速度和代码的封装性。模块接口文件(.cppm)定义了对外暴露的实体,而模块实现文件(.cpp)则包含实际的实现。 2. *...
2. **建筑信息模型(BIM)**:BIM超越了传统的CAD,提供了一个包含建筑项目所有方面信息的数字化模型,包括结构、电气、机械和管道系统。Revit和SketchUp是常见的BIM工具,它们不仅用于设计,还支持成本估算、施工...
2. **选择合适的控件**:根据表单的需求选择最合适的控件类型,例如对于简单的文本输入可以使用文本框,对于复杂的选项可以选择下拉列表或复选框。 3. **利用数据验证规则**:为了提高数据质量,可以设置数据验证...
在这个"IBM TAM TIM step by step lab4(从安装到配置 应用尽有) best practise"中,我们将深入探讨如何进行这两个组件的安装、配置以及应用。 首先,我们来看TAM TAM(Tivoli Access Manager)的安装和配置。TAM 是...