以前只是听说过存储过程但是从来没有亲自用过,机房重构的时候用户注册涉及到多张表,大家都调用了存储过程,自然我也想用。
首先来介绍一下存储过程吧,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
第一次使用,认识的比较浅,存在许多问题,记录一下,如果哪里不对请大家指出,共同进步!