数据库存储过程简介与实例

一、存储过程与函数的区别:

  1.一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。

  2.对于存储过程来说可以返回参数(output),而函数只能返回值或者表对象。

  3.存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。

二、存储过程的优点:

  1.执行速度更快 – 在数据库中保存的存储过程语句都是编译过的

  2.允许模块化程序设计 – 类似方法的复用

  3.提高系统安全性 – 防止SQL注入

  4.减少网络流通量 – 只要传输存储过程的名称

系统存储过程一般以sp开头,用户自定义的存储过程一般以usp开头

三、定义存储过程语法,"["   里面的内容表示可选项

  create proc 存储过程名

  @参数1        数据类型 [=默认值] [output],

  @参数2        数据类型 [=默认值] [output],

  ...

  as

  SQL语句

四、简单的一个例子

  定义存储过程:

  create proc usp_StudentByGenderAge

  @gender nvarchar(10) [=‘男‘],

  @age int [=30]

  as

  select * from MyStudent where [email protected] and [email protected]

  执行存储过程:

  Situation One(调用默认的参数):

  exec usp_StudentByGenderAge

  Situation Two(调用自己指定的参数):

  exec usp_StudentByGenderAge ‘女‘,50

  或者指定变量名        exec usp_StudentByGenderAge @age=50,@gender=‘女‘

  对存储过程进行修改

  alter proc usp_StudentByGenderAge

  @gender nvarchar(10) [=‘男‘],

  @age int [=30],

  --加output表示该参数是需要在存储过程中赋值并返回的

  @recorderCount int output

  as

  select * from MyStudent where [email protected] and [email protected]

  set @recorderCount=(select count(*) from MyStudent where [email protected] and [email protected])

--output参数的目的,就是调用者需要传递一个变量进来,然后在存储过程中为该变量完成赋值工作,存储过程执行完成以后,将执行的对应结果返回给传递进来的变量。(与C#中的out原理一模一样)

调用(记住这里的语法!)因为该存储过程前面还有其他参数,所以要把 @recorderCount写上,该存储过程执行后,相当与完成了以上的查询工作,同时将查询结果得到的条数赋值给了@count变量。(@count是当做参数传给usp_StudentByGenderAge,当存储过程执行完毕以后,将得到的条数返回给@count)

  declare @count int

  exec usp_StudentByGenderAge @[email protected] output

  print @count

五、使用存储过程完成分页

1、存储过程代码

   create proc usp_page

  @page int,          ---一页显示多少条记录

   @number int,   ---用户选择了第几页数据

as

  begin

  select * from

  --小括号里面内容是专门得到排列好的序号

  (

    select  ROW_NUMBER() over(order by(Fid))  as number

    from MyStudent

  ) as t

  where t.number>= (@number-1)*@page+1 and t.number<[email protected]*@page

   end

2、实现分页效果对应的ADO.NET代码:

 1 private void button1_Click(object sender, EventArgs e)   { 2   string connStr = @"server=.\sqlexpress;database=MyDB;integrated security=true"; 3   using (SqlConnection conn = new SqlConnection(connStr)) 4   { 5     //打开数据库连接 6     conn.Open(); 7     //用存储过程名作为Command处理的对象 8     string usp = "usp_page"; 9     using (SqlCommand cmd = new SqlCommand(usp, conn))10     {11       //执行的是存储过程语句12       cmd.CommandType = CommandType.StoredProcedure;        //textBox1.Text是指显示多少条记录13       cmd.Parameters.AddWithValue("@page", textBox1.Text.Trim());14       //textBox.Text是指用户选择了第几页15       cmd.Parameters.AddWithValue("@number", textBox2.Text.Trim());16       //用list作为数据源来实现17       List<Person> p = new List<Person>();18       using (SqlDataReader reader = cmd.ExecuteReader())19       {20         if (reader.HasRows)21         {22           while (reader.Read())24           {25             Person p1 = new Person();26             p1.FName = reader.GetString(1);27             p1.FAge = reader.GetInt32(2);28             p1.FGender = reader.GetString(3);29             p1.FMath = reader.GetInt32(4);30             p1.FEnglish = reader.GetInt32(5);31             p.Add(p1);32           }33         }34       }35       dataGridView1.DataSource = p;36     }37   }38 }

下面是自定义的Person类

1 class Person 2 {3 public string FName { get; set; }4 public int FAge { get; set; }5 public string FGender { get; set; }6 public int FMath { get; set; }7 public int FEnglish { get; set; }8 }

时间: 2024-11-08 12:18:39

数据库存储过程简介与实例的相关文章

C#与sql server数据库存储过程的操作实例

通过这几天的学习和实际操作,把C#与sql server数据库存储过程的操作搞清楚了. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Windows.

数据库触发器简介与实例

触发器 其是一种特殊的存储过程.一般的存储过程是通过存储过程名直接调用,而触发器主要是 通过事件(增.删.改)进行触发而被执行的.其在表中数据发生变化时自动强制执行. 常见的触发器有两种:after(for).instead of,用于insert.update.delete事件. after(for)        表示执行代码后,执行触发器 instead of        表示执行代码前,用已经写好的触发器代替你的操作 触发器语法: create trigger 触发器的名字   on

数据库事务简介与实例

什么是数据库事务? 数据库事务是指作为单个逻辑工作单元执行的一系列操作.具体表现为:可以将几个sql语句作为一个整体来执行,这些sql语句当有一条执行出错时,那么所有的sql语句都将执行失败.也就是这些sql语句作为一个整体,要么全部执行成功,要么全部执行失败.使用事务能便于恢复数据,保证数据的一致性. 一 事务的属性 事务具有ACID属性 即 Atomic原子性, Consistent一致性, Isolated隔离性, Durable永久性 原子性 就是事务应作为一个工作单元,事务处理完成,所

一点实例明白mysql数据库存储过程

mysql存储过程: 封装sql: create procedure p1() begin select * from t_news; end $ //mysql存储过程 简单实例 显示存储过程信息:  \G (横向表格采用纵向表格输出) delimiter $  改变执行符号,直到mysql碰到$ 开始执行语句命令 set  names     解决mysql乱码问题  但mysql重启后又还原到以前字符集状态 call 存储过程名字 ()  调用存储过程 参数: create procedu

C#基于数据库存储过程的AJAX分页实例

本文实例讲述了C#基于数据库存储过程的AJAX分页实现方法.分享给大家供大家参考.具体如下: 首先我们在数据库(SQL Server)中声明定义存储过程 代码如下: use sales    –指定数据库 if(exists(select * from sys.objects where name='proc_location_Paging')) –如果这个proc_location_paging存储过程存在则删除 drop proc proc_location_Paging go create

mysql数据库存储过程

存储过程简介 存储过程可以简单理解为一条或者多条sql语句的集合,存储过程用来实现将一组关于表的操作的sql语句当作一个整体来执行,存储过程在实际应用中最主要的特点的事提高执行效率以及sql代码封装功能,特别是sql代码封装功能,如果没有存储过程,在外部程序访问数据库时(例如php),要组织很多sql语句,特别是业务逻辑比较复杂的时候,一大堆的sql和条件夹在php代码中,让人不寒而栗,有了sql存储过程,业务逻辑可以封装存储过程,这样不仅容易维护,而且执行效率也高. 例如:在电子商务站点中使用

索引、视图、SQL优化以及数据库存储过程

一.索引 索引是查询优化最有效和最常用的技术 索引是一个单独的.物理的数据库结构,它是指向表中某一列或若干列上的指针列表. mysql中,一个表的物理存储由两部分组成,一部分用于存放表的数据,另一部分存放索引,当进行数据搜索时,mysql会首先搜索索引,从中找到所需数据的起始位置的指针,再直接通过指针查找目标数据. 1.创建索引: CREATE INDEX 索引名 on 表名(要添加索引的列名) 可以给一个表中的多个列添加索引 通过在查询sql语句前加一句Explain可以分析索引效率, 有这样

mysql数据库分区功能及实例详解

分区听起来怎么感觉是硬盘呀,对没错除了硬盘可以分区数据库现在也支持分区了,分区可以解决大数据量的处理问题,下面一起来看一个mysql数据库分区功能及实例详解 一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例.mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件,一个是frm存放表结构的,一个是myd存放表数据的,一个是myi存

mysql数据库存储过程学习

1.建立存储过程方式一: mysql中存储过程属于函数一栏中,点击新建函数会有让你选择是存储过程还是函数 接下来是存储过程中设置的参数: IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值 OUT 输出参数:该值可在存储过程内部被改变,并可返回 INOUT 输入输出参数:调用时指定,并且可被改变和返回 接下来就在BEGIN和END中填写需要的sql语句,和平时使用的相同 保存后存储在函数下,执行时可以直接运行,查看结果. 注:当没有参数或者只有