存储过程
在做机房重构的时候,看好多同学都用到了存储过程,可是自己还没有用到,当时也很纳闷存储过程是什么,也不知道有什么好处和作用,只记得在学习SQL视频的时候,老师好像给讲过,但是一向有点懒的我就是不愿意找我以前的笔记,于是果断的看别人的博客,这个时候深感博客的好处。看完大神们的博客,明白了什么是存储过程,用存储过程有什么用。
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。 ---百度百科(自我感觉解释的还是很清楚的)
private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) { if ( MessageBox.Show("确定要退出系统吗?", "确认", MessageBoxButtons.OKCancel, MessageBoxIcon.Question)==DialogResult .OK ) { //删除上机表中的信息,将工作日志表中的信息补充完整。 Login.Modle.WorkLog offwork = new Login.Modle.WorkLog (); offwork.UserID = frmLogin.username; DateTime n=DateTime.Now; offwork.LogoutDate = n.ToShortDateString(); offwork.LogoutTime = DateTime.Now.ToShortTimeString(); offwork.Status = "false"; LoginFacade.loginFacade facade = new LoginFacade.loginFacade(); int table = facade.OffWorkFacade(offwork); //传递到外观层 Application.Exit();// 退出 } }外观、B层、还有工厂和接口的写法,跟其他访问数据库的写法一样。
public int OffWork(Login.Modle.WorkLog offwork) { SqlParameter[] para ={new SqlParameter ("@userid",offwork .UserID), new SqlParameter ("@logoutdate",offwork .LogoutDate), new SqlParameter ("@logouttime",offwork .LogoutTime), new SqlParameter ("@status",offwork .Status)}; string store = "pro_OffWork"; //此处不用写sql语句,写存储过程的名字就行 int back = SqlHelper.DeleteSQLHelper.DelecteTable(store, para, CommandType.StoredProcedure); return back; }写sql语句的地方写成存储过程名字就行,另外SQLHelper中的参数类型也要写成:
CommandType.StoredProcedure存储过程中的代码:
ALTER PROCEDURE [dbo].[pro_OffWork] --存储过程名字 -- Add the parameters for the stored procedure here --定义下边要用到的字段。 @userid char(10), @logoutdate datetime, @logouttime time(0), @status char(10) AS declare @logintime time(0) BEGIN declare @error int ---声明事物变量 set @error=0 --给事物变量赋值 BEGIN TRANSACTION --事物开始语句 select @logintime =logintime from OnWork_Info where UserID =@userid --删除onwork表中相应的数据 delete from OnWork_Info where userid=@userid set @error =@error+@@ERROR --事物 --更新worklog表中相应的数据。 update worklog_Info set LogoutDate =@logoutdate ,LogoutTime =@logouttime,status =@status where UserID =@userid and LoginTime =@logintime set @error =@error+@@ERROR --事物 if @error <>0 ROLLBACK --发生错误时回滚 else COMMIT --不发生错误时执行语句 END到这里关闭程序所需要的功能就完成了。