zoukankan      html  css  js  c++  java
  • 再看数据库——(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)触发器


  • 相关阅读:
    toj 2819 Travel
    toj 2807 Number Sort
    zoj 2818 Prairie dogs IV
    zoj 1276 Optimal Array Multiplication Sequence
    toj 2802 Tom's Game
    toj 2798 Farey Sequence
    toj 2815 Searching Problem
    toj 2806 Replace Words
    toj 2794 Bus
    css截取字符
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7089209.html
Copyright © 2011-2022 走看看