5.3 存储过程 在该公交车管理系统的在数据的查询、添加和删除等操作上主要采用了存储过程。存储过程是编译好了的SQL语句。它类似于函数的使用,可以直接通过参数调用存储过程,所以效率比较高。 paper51.com 1.存储过程的介绍 内容来自论文无忧网 www.paper51.com 存储过程是由一组为了完成特定功能的SQL语句集,经过编译和优化后存储在数据库服务器中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它[2]。存储过程的能力大大增强了SQL语言的功能和灵活性。 http://www.paper51.com 2.存储过程的优势 copyright paper51.com (1)允许标准组件式编程。在存储过程被创建以后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。 http://www.paper51.com (2)实现较快的执行速度。因为存储过程是预编译的,在首次运行前,查询优化器对其进行分析、优化,并给出了最终被存在系统中的执行计划[2]。 http://www.paper51.com
(3)减少网络流量。在调用存储过程时,网络中传送的只是该调用语句,而不是多条SQL语句,从而大大减少了网络流量。 http://www.paper51.com
(4)作为一种安全机制来充分利用。系统管理员通过对执行某一存储过程的权限进行限制,从而能够实现对相应的数据访问权限制,避免非授权用户对数据的访问,保证数据安全[2]。 copyright paper51.com 3.存储过程的代码实现 内容来自www.paper51.com 在创建存储过程时,需要确定存储过程的三个组成部分: copyright paper51.com 1.所有的输入参数以及传递给调用者的输出参数。 内容来自www.paper51.com
2.被执行的针对数据库的操作语句,包括调用其他存储过程的语句。 copyright paper51.com 3.返回给调用者的状态值,以指明调用是成功还是失败。 内容来自论文无忧网 www.paper51.com
下面给出在该系统中使用到的部分存储过程: paper51.com 实现对满足ID号是CarLineID的汽车线路数据的删除操作。 http://www.paper51.com createproc prc_deleteCarLine 内容来自论文无忧网 www.paper51.com @CarLineIDint 内容来自www.paper51.com as 内容来自www.paper51.com deleteT_Car_Line where ID=@CarLineID http://www.paper51.com if@@rowcount>0 paper51.com return0 http://www.paper51.com else 内容来自论文无忧网 www.paper51.com
return1 内容来自论文无忧网 www.paper51.com GO 内容来自www.paper51.com 实现查询所有汽车信息的存储过程。 内容来自www.paper51.com createproc spr_carall copyright paper51.com as http://www.paper51.com selectID ,CarNum as "车牌号",CarColor as "颜色",SitNum as "座位数",CarTypeas "类型",AirCondi as "是否空调车",Company as "车品牌",Remarkas "备注" from t_car 内容来自www.paper51.com
GO paper51.com 6 详细设计 http://www.paper51.com 根据已有的需求分析和总体设计,在此基础上进行系统的详细设计和实现。为此,建立了一个C#.NET项目。 paper51.com 6.1 登录模块 内容来自论文无忧网 www.paper51.com
1.用户身份验证 http://www.paper51.com
输入:用户名和密码。 内容来自www.paper51.com 处理: 内容来自www.paper51.com (1)用户登录窗体启动。 paper51.com (2)输入用户名和密码。 内容来自www.paper51.com (3)检索数据库中数据,是否有相应的用户名和密码。 内容来自www.paper51.com (4)如果用户名和密码为空,或者错误,进行提示。 paper51.com (5)如果输入的用户名和密码正确,则允许该用户进入系统。 http://www.paper51.com (6)进入主控制台。 内容来自论文无忧网 www.paper51.com
输出:主控制台。 paper51.com
2.用户登录模块的窗体设计 http://www.paper51.com 用户登录模块的窗体设计,如图4所示。 内容来自www.paper51.com
paper51.com
3.用户登录模块的主要代码 http://www.paper51.com privatevoid button1_Click(object sender, System.EventArgs e) 内容来自论文无忧网 www.paper51.com
{ copyright paper51.com DataAccessmyAcc=new DataAccess(); http://www.paper51.com if(myAcc.userlogin(this.textBox1.Text.Trim(), http://www.paper51.com this.textBox2.Text.Trim())==1){ paper51.com this.Visible=false; http://www.paper51.com Main newMain=new Main(this.textBox1.Text.Trim()); copyright paper51.com newMain.Show(); 内容来自www.paper51.com } copyright paper51.com
elseif(myAcc.userlogin(this.textBox1.Text.Trim(),"") == 0) 内容来自论文无忧网 www.paper51.com MessageBox.Show("没有该用户!"); 内容来自论文无忧网 www.paper51.com else 内容来自论文无忧网 www.paper51.com { 内容来自www.paper51.com
MessageBox.Show("登录失败"); copyright paper51.com
} 内容来自论文无忧网 www.paper51.com } paper51.com
private void button1_Click()鼠标事件用于实现在输入用户名和密码后,进入系统主控制界面的方法。DataAccess类是自定义的用于实现数据库访问的类。该方法中判断语句里调用了该类所声明的对象myAcc的方法userlogin(),该方法的具体实现代码如下所示: copyright paper51.com publicint userlogin(string username,string userpass) 内容来自www.paper51.com
{ http://www.paper51.com
DatabasemyDB=new Database(); 内容来自论文无忧网 www.paper51.com SqlParameter[]para={ copyright paper51.com myDB.MakeInParam("@username",SqlDbType.NVarChar,50,username), 内容来自论文无忧网 www.paper51.com myDB.MakeInParam("@userPass",SqlDbType.NVarChar,50,userpass) 内容来自论文无忧网 www.paper51.com }; 内容来自论文无忧网 www.paper51.com returnmyDB.RunProc("spr_uerlogin",para); 内容来自论文无忧网 www.paper51.com } 内容来自www.paper51.com 该段代码展示了上文中所提到的存储过程的具体使用。 copyright paper51.com 6.2 主操作界面模块 paper51.com 1.主控制平台的窗体设计 paper51.com 主控制平台的窗体设计,如图5所示。 copyright paper51.com 内容来自www.paper51.com |