存储过程的使用
2016-03-05 21:30
351 查看
以前只是听说过存储过程但是从来没有亲自用过,机房重构的时候用户注册涉及到多张表,大家都调用了存储过程,自然我也想用。
什么是存储过程?
首先来介绍一下存储过程吧,Stored Procedure是大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名称并给出参数来执行它。存储过程是数据库中的重要对象,任何一个设计良好的数据库应用程序都应该用的存储过程。
2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权。
举注册例子
在注册用户的时候涉及到了三张表,分别是Student,Card,Recharge,所以如果一个一个写,一张表一张表进行更新插入的话,那么代码将会是非常复杂的,所以这里就体现了存储过程的优点了。
首先建立Student Card Recharge
然后建立存储过程(在可编辑性下有)然后就是创建的过程啦!
——没有提供参数,感觉这篇博客很好http://blog.csdn.net/yytt123622/article/details/7398322
2、必须是查询批次中的第一个语句
——加go就好了
3、value附近有语法错误
——value写错了,应该是values
第一次使用,认识的比较浅,存在许多问题,记录一下,如果哪里不对请大家指出,共同进步!
什么是存储过程?
首先来介绍一下存储过程吧,Stored Procedure是大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名称并给出参数来执行它。存储过程是数据库中的重要对象,任何一个设计良好的数据库应用程序都应该用的存储过程。为什么使用存储过程?
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权。
举注册例子
在注册用户的时候涉及到了三张表,分别是Student,Card,Recharge,所以如果一个一个写,一张表一张表进行更新插入的话,那么代码将会是非常复杂的,所以这里就体现了存储过程的优点了。首先建立Student Card Recharge
然后建立存储过程(在可编辑性下有)然后就是创建的过程啦!
use JFChargeSystem go create procedure Register//省略…… @CardNo int, @Department char(10), @Grade char(10), @Class char(10), @Explain char(10) AS begin; insert into JFStudent (StudentName ,StudentNo ,Sex ,Department ,Grade ,Class ,Explain ,CardNo)values(@StudentName,@StudentNo,@Sex ,@Department ,@Grade ,@Class ,@Explain,@CardNo) insert into JFCard (CardNo ,CardType ,Cash ,State ,Ischeck ,Date ,Time ,UserName )values(@CardNo ,@CardType ,@Cash ,@State ,@Ischeck ,@Date ,@Time,@UserName) insert into JFRecharge (CardNo ,Addmoney ,Date ,Time ,UserName ,serial )values(@CardNo,@Addmoney,@Date ,@Time ,@UserName ,@serial ) end
string sql = "Register"; SqlParameter[] paras = new SqlParameter[] {new SqlParameter("@CardNo", registerCS.CardNo),//卡表 new SqlParameter("@StudentNo", registerCS.StudentNo ),//学生表 new SqlParameter("@Grade", registerCS.Grade ), new SqlParameter ("@UserName",Entity .Common .username ), }; int scar = sqlhelper.ExecuteNonQuery (sql, paras, CommandType.StoredProcedure);
调用过程遇见的问题
1、使用存储过程过程需要参数 '@CardType',但未提供该参数。——没有提供参数,感觉这篇博客很好http://blog.csdn.net/yytt123622/article/details/7398322
2、必须是查询批次中的第一个语句
——加go就好了
3、value附近有语法错误
——value写错了,应该是values
第一次使用,认识的比较浅,存在许多问题,记录一下,如果哪里不对请大家指出,共同进步!
相关文章推荐
- UESTC 1251 谕神的密码【暴力枚举】
- USACO 3.2 fact4 (unc)
- AsyncTask 的注意事项
- Android 弱引用二级缓存实现
- (3) IOS笔记本——UIScrollView的其他应用
- QT环境搭建
- C++中引用与指针的区别(详细介绍)
- 阅读计划与读《构建之法》提出的问题
- POJ2299 Ultra-QuickSort 归并排序求逆序对
- static 和 const
- 【周练2016.3.5】序列的区间操作(对区间的操作,好题)
- 使用maven创建web项目
- 危险系数 割点
- AndoridGridView 自定义适配器 监听事件的使用,实现更换头像功能
- leetcode:Remove Duplicates from Sorted Array 【Java】
- 这些凝视太可爱啦!我也要加到我的项目中去!
- js中如何获取纯正的undefined?
- 常用网站--前端开发类+网页设计类+平面素材类+flash类
- 排序
- 数字及模拟小时钟设计(AnalogClock与DigitalClock的原理)