事务、存储过程——数据统一的守护神

随着系统的增大,数据量的增多,很多时候要实现一个功能都会对数据库中的很多表做操作,这样的话就会面对一个问题——数据的统一和一致性操作,当我们要同时对多个表做有数据变动的操作时(即通常所说的增、删、改操作),一旦出现意外情况或者是由于系统自身的问题或者是外界条件的变化导致某些操作没有完成的话,就会出现数据不完整的情况,这样的错误在系统中是绝对不允许出现的,那么该怎样才能很好地解决这个问题呢?接下来我将为大家介绍两种很常见的解决方案事务和存储过程。

事务

如果涉及到的多个对表的操作是写在系统中的,那么可以在开发的系统代码中引入事务transaction,具体的操作自己也在之前的博客机房收费系统中“事务”的应用中详细介绍了,这里就不再赘述了,但是还是有诸多瑕疵的。在三层的机房收费系统中自己是在DAL层加入了事务的引用,这样会导致很多代码的重复书写,是一种很不好的习惯,所以,我们可以把这些方法都封装起来,在BLL层调用的时候加入的事务的引用。

存储过程

还有一种办法就是在数据库中通过存储过程将你想要实现的操作都写下来,那么存储过程就会保证在你调用这个存储过程的时候全部执行存储过程中的sql语句,便实现了数据的统一操作,这样便省去了自己诸多的顾虑,简单、方便,让辛辛苦苦的码农们看到了希望!从中我们不难看出存储过程其实就是多条语句的集合体,但是正因为这一机制保证了各个语句的同时执行!

以下便是自己系统中用到的存储过程的实例,此存储过程中只是涉及到了对两个表的删除,拿来和大家分享!

在DAL层中对存储过程的调用,注意在引用时须保持和声明部分的一致:

<span style="font-family:KaiTi_GB2312;font-size:18px;">        /// <summary>
        /// 删除新闻(连通其下新闻评论一起删除)
        /// </summary>
        /// <param name="id">新闻属性</param>
        /// <returns></returns>
        public bool Delete(string id)
        {
            //TODO:删除新闻(连通其下新闻评论一起删除)
            bool flag = false;
            DataTable dt = new DataTable();                                          //定义datatable表
            SqlParameter[] paras = new SqlParameter[]                                //定义参数
           {
                new SqlParameter ("@id",id )
            };

            int res = sqlhelper.ExecuteNonAddDelUpd("news_Delete", CommandType.StoredProcedure);         <span style="white-space:pre">									</span>//引用存储过程  news_Delete

            if (res > 0)
            {
                flag = true;
            }

            return flag;
        }</span>

以上便是自己对数据统一性的一些认识,慢慢感受到了技术的掌握就是对新技术的了解,只有了解了新技术才可以保证自己做的系统的性能和功能,所以多多了解、多多实践,努力消化,做一名优秀的工程师,做出好的系统!

时间: 2024-10-12 16:10:27

事务、存储过程——数据统一的守护神的相关文章

Python-视图 触发器 事务 存储过程

1.视图2.触发器*** 在某个时间发生了某个事件时 会自动触发一段sql语句3.事务***** 是逻辑上的一组sql语句 他们要么都成功 要么都失败 今后只要执行sql就会有事务 使用事务 start transaction; --开启事物,在这条语句之后的sql将处在同一事务,并不会立即修改数据库 commit;--提交事务,让这个事物中的sql立即执行数据的操作, rollback;--回滚事务,取消这个事物,这个事物不会对数据库中的数据产生任何影响 四个特性 原子性:事务是一组不可分割的

数据库连接池(为数据统一连接建立一个缓冲池,现在企业开发使用)

数据库连接池:(里面放了许多连接数据的链接,负责分配,管理,释放数据库连接,可重复使用连接,而不新建  )为数据统一连接建立一个缓冲池,放好了一定数据库连接,使用时在缓冲池里面拿,用完之后再还给缓冲池,再使用时,不需要新建: --------------------------------------------------------------------------------------- 基本方法: /* * DBCP数据源:需要使用架包dbcp.jar *1.加入jar包,依赖于Co

服务器端二次开发标准事务保存数据

二次开发中,常常会调用平台事务保存数据,今天整理了标准格式的度量平台数据保存或SQL执行语句,格式如下:             //获取要保存数据表的表结构             Table table1 = service.GetTableStruct("default", "DELIT_TASK_LIST");             Table table2 = service.GetTableStruct("default", &qu

数据库连接池(为数据统一建立一个缓冲池,现在企业开发使用)

数据库连接池:(里面放了许多连接数据的链接,负责分配,管理,释放数据库连接,可重复使用连接,而不新建  )为数据统一连接建立一个缓冲池,放好了一定数据库连接,使用时在缓冲池里面拿,用完之后再还给缓冲池,再使用时,不需要新建: --------------------------------------------------------------------------------------- 基本方法: /** DBCP数据源:需要使用架包dbcp.jar*1.加入jar包,依赖于Comm

物联网渴盼大数据统一标准

作者: ■本报记者刘可 当下有个词很火,叫做"大智移云".如今的大数据和云计算已作为经济社会发展动力中新的创新平台.在大数据时代,如何提高数据质量,通过物品编码与标准化数据降低供应链成本,实现供应链全过程畅通,已成为全球标准化机构和编码组织共同努力的方向 由中国物品编码中心.中国ECR委员会联合举办的2014年第十二届中国ECR大会在广州召开.本届大会以"数据供应链--消费品行业转型新引擎"为主题,邀请传统消费品企业和新兴电子商务企业分享各自的发展规划,并就供应链协

数据统一管理--企业决策分析之刚需

一个企业往往具有多个信息系统,系统间相互独立,这就容易造成“信息孤岛”的问题:难以将多个系统的数据汇集,通过数据分析来全面了解公司的运营状况.尤其是对经营跨度大.环节多的公司更是深有体会. 针对这个问题,这里我们分享茜子公司的解决案例,原文是深圳茜子饰品有限公司信息总监徐涛在帆软大数据巡展上的演讲. 数据统一管理成紧迫需求 茜子(SHE’S)公司是一家以发饰为主,涵盖围巾.帽子.太阳镜.精品等时尚饰品的公司,采用设计-生产-销售一条龙的销售模式.销售除了自营门店还包括网络上的网销部分和加盟商,在

ASP.NET事务存储过程

--修改存储过程 alter proc proc_get_student as select * from student; asp.net 的事务就是针对数据层来处理的呀! 没有数据处理不能使用事务 ------------------------------------- string sql = "update table set ***** where *****"; // sql 语句或者 存储过程名称 SqlConnection con = new SqlConnectio

SQL 数据库事务 存储过程练习

数据库事务: 数据库事务(Database Transaction) 是指作为单个逻辑工作单元执行的一系列操作. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源. 设想网上购物的一次交易,其付款过程至少包括以下几步数据库操作: 更新客户所购商品的库存信息 保存客户付款信息--可能包括与银行系统的交互 生成订单并且保存到数据库中 · 更新用户相关信息,例如购物数量等等 正常的情况下,这些操作将顺利进行,最终交易成功,与交易相关的所有数据库信息也成功地更新.

Mysql之视图 触发器 事务 存储过程 函数

视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用 #两张有关系的表 mysql> se