• 再看数据库——(1)存储过程


          当我们运行一个比較简单的操作时,一般都是用SQL语句。可是当逻辑越来越复杂时,只使用顺序运行的SQL语句序列表现出非常大的局限性。这时,就能够考虑用还有一种方法了。那就是存储过程。

          如今数据库系统往往採用客户机/server计算模式,非常多工作能够在client完毕,也能够在server端完毕。

    客户机/server系统与传统的数据库系统的一个非常重要的差别是,在传统的数据库系统中仅仅存放数据,全部的应用程序都在用户端,都与用户实际执行的应用程序捆绑在一起;而客户机/server系统中,在数据库中还存放程序。因为这样的程序以数据库对象的形式存储在数据库中。因此称为存储过程。


    建立存储过程:




    存储过程的一般结构:



    应用样例:

    向NiuNan数据库的news表中添加一条记录。

    news表中的字段有:


    编写对应的存储过程:

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:		牛腩
    -- Create date: 二〇一四年四月三日 15:06:13
    -- Description:	添加新闻
    -- =============================================
    CREATE PROCEDURE [dbo].[news_Insert]
    --定义变量
    @title varchar(100),@content text,@caid int
    AS
    BEGIN
    --插入语句
    	INSERT INTO news(title, [content], categoryId)
    VALUES   (@title,@content,@caid)
    END
    

    运行存储过程之后,能够验证一下.

    exec news_Insert "娱乐新闻","《爸爸去哪儿2》杨阳洋多多贝儿 帅爸萌娃大比拼 ",4


    加入成功!



    在C#中调用存储过程:

     #region  添加新闻
       
            /// <summary>
            /// 添加新闻
            /// </summary>
            /// <param name="n">新闻实体类</param>
            /// <returns></returns>
            public bool Insert(News n)
            {
                //TODO:添加新闻
                bool flag = false;
                //存储过程名为"news_Insert"
                string cmdText = "news_Insert";
                //给变量赋值
                SqlParameter[] paras = new SqlParameter[]{
                new SqlParameter ("@content",n.content),
                new SqlParameter ("@title",n.title ),
                new SqlParameter ("@categoryId",n.categoryId )};
                
                //运行sqlHelper。CommandType为存储过程类型
                int res = sqlhelper.ExecuteNonQuery(cmdText, paras, CommandType.StoredProcedure);
                if (res > 0)
                {
                    return true;
                }
                return flag;
            }
    
            #endregion

    使用存储过程有非常多长处:

           1、提高运行速度。

    在运行之前,存储过程的语法和语义分析工作已经完毕。当调用时,其运行的SQL语句的大部分准备工作已经完毕。

    对照之下。交互运行的SQL语句时解释运行的,它的速度就比較慢了。

           2、增强了SQL的功能和灵活性。存储过程能够用流程控制语句编写。有非常强的灵活性。能完毕复杂的逻辑推断和复杂的运算。

           3、能够减少网络的通信量。在前面已经提到。存储过程存储在server端,运行所有逻辑流程仅须要向server发送一次过程请求就可以。

          4、减轻了程序编写的工作量,这个事显而易见的。

          5、间接实现安全控制功能。能够授权某些用户运行某个存储过程来完毕同意范围内的信息查询。而不直接在表和视图上进行查询。

    当然,它也会有一些缺点:

          SQL本身是一种结构化查询语言,加上了一些控制(赋值、循环和异常处理等),但不是OO的,本质上还是过程化的,面对复杂的业务逻辑。过程化的处理会非常吃力。

    还存在不便于调试。没办法应用缓存和无法适应数据库的分割(水平或垂直分割)等问题。数据库分割之后,存储过程并不清楚数据存储在哪个数据库中。


    系列博客推荐:

    再看数据库——(1)存储过程

    再看数据库——(2)视图

    再看数据库——(3)触发器


  • 相关阅读:
    Linux 常用命令
    silky微服务简介
    okhttp中的Builder模式
    Assert in C#&Java
    Abstract类中使用@Autowire
    @Scope("prototype") bean scope not creating new bean
    【转】centos系统查看cpu内存等情况
    hdu 7013 String Mod 题解
    牛客 11259 H Scholomance Academy 题解
    bzoj 2151 种树 题解
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7089209.html
Copyright © 2020-2023  润新知