4-3-3 DataGridView控件与存储过程
1.存储过程在软件项目开发中的价值
(1)定义
前面章节中提到过,在应用Command对象时,其命令可以是存储过程名称。那么,什么是存储过程?为什么要使用存储过程?
首先,看看存储过程的定义。将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,被存储起来的就是存储过程。那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。
(2)存储过程的优缺点:
u存储过程的主要优点体现在:
n减少网络传输,节约时间
n速度快
n出错的概率小
n可利用服务器的一些特殊的资源
u存储过程的主要缺点体现在:
n交互性差
n不够灵活
n商业逻辑层与数据库在一起,不易移植
存储过程主要致命的缺点就是:可能如果要更换数据库(比如:从sql server到oracle)的话,你的存储过程就都要重写了。所以它过分依赖数据库端,假如你要做一个工程,是可以的,但是如果你要做一个产品,或者以后可能还会用到这个工程的代码的话,建议少使用。所以任何一种开发方法总有优缺点,不要过分依赖它。
在应用程序中,通常会大量使用存储过程,这是因为:
第一,维护方便:
如果你把所需要执行的操作代码写在程序当中,那么要做一些小修改,也要对程序做修改并重新编译,对于用户来讲,这个时候就需要对程序加以深度测试(你说只修改了一点点,但是用户不会为你的一句话而冒风险的),存储过程相对来讲就简单得多,毕竟逻辑上分离出来了,即使要进行审核,成本也远比程序要低得多;
第二,重用性:
一个设计好的存储过程,任何符合其输入和输出的程序都可以共用,同样也改善了维护工作,如果有10个程序要用到这个存储过程,那要做些修改,自然修改一个存储过程所花费的成本比程序要低得多;
第三,分工的明确化:
存储过程如果设计得当,就可以通过一个中间的适配器(Adapter)来调用,如此在将来进行数据库的迁移等,就可以把相应的工作交给具体的熟悉相关数据库等业务的人员,而不是所有的开发人员都要进行了解。就好比MSSQL/Oracle/DB2类似的,如果数据库操作脚本写在程序当中,那么迁移的工作量将会是所有可能的程序。如果是通过存储过程,那就可以交给相应的DBA等来完成;
第四,预编译提高效率:
存储过程的预编译,可能性使得语句的执行更优化,特别是对于类似Oracle等具备某些高级优化能力的,那么包括其既定的执行计划等可以带来相当的性能提升;
第五,对于需要多次访问数据的复杂操作:
如果写在程序当中,那么就需要不断的或者大量的提取数据库中的数据到程序中进行运算,而如果是使用存储过程,那么就减少了应用程序与数据库的交互次数,如此的消耗明显要低得多。
2.案例学习:DataGridView与存储过程
本实验操作较为复杂,需要提前准备的内容包括:
n数据库 —— Grade_Sys数据库
n建立类 —— BuessinessLayer.cs(业务逻辑文件)
n建立类 —— DataBaseLayer.cs(数据库操作文件)
通过本案例,您将学习到:
n动态生成DataGridView列表信息内容
nC#开发系统分层思想
n存储过程参数的输入与返回值的获取
n复杂存储过程的开发设计
用户界面如图4-64所示:
图4-64 DataGridView与存储过程应用程序界面图
u实验步骤(1):
在VS.NET 2005中新建一个名为示例7的基于Windows的项目。将默认窗体重命名为form14.cs。
u实验步骤(2):
从工具箱之中拖拽三个GroupBox控件到From窗体,Text属性分别设置为“教师个人信息”、“已阅试卷检索”、“数据显示区”;向第一个GroupBox控件拖拽五个Lable控件,Text属性分别设置为“编号:”、“姓名:”、“学位:”、“单位:”、“职称:”;再向这个GroupBox控件拖拽五个Lable控件;向第二个GroupBox控件拖拽二个ComboBox控件;还要向第二个GroupBox控件拖拽上Button控件,Text属性分别设置为“按授课学期查询”、“按授课班级查询”、“查询全部”;向第三个GroupBox控件拖拽一个DataGridView控件,olumnHeadersHeightSizeMode属性设置为“AutoSize”,Dock属性设置为“Fill”;为DataGridView控件添加列“编号”、“任课班级”、“合作院校”、“课程名称”、“课时”、“授课学期“、“人数”、“已阅”、“未阅”、“成绩单操作”,参加表4-32所示:
表4-32 DataGridView控件编辑列项表
列名称
|
列类型
|
页眉文本
|
可见性
|
编号
|
DataGridViewTextBoxColumn
|
编号
|
True
|
任课班级
|
DataGridViewTextBoxColumn
|
任课班级
|
True
|
合作院校
|
DataGridViewTextBoxColumn
|
合作院校
|
True
|
课程名称
|
DataGridViewTextBoxColumn
|
课程名称
|
True
|
课时
|
DataGridViewTextBoxColumn
|
课时
|
True
|
授课学期
|
DataGridViewTextBoxColumn
|
授课学期
|
True
|
人数
|
DataGridViewTextBoxColumn
|
人数
|
True
|
已阅
|
DataGridViewTextBoxColumn
|
已阅
|
True
|
未阅
|
DataGridViewTextBoxColumn
|
未阅
|
True
|
成绩单操作
|
DataGridViewButtonColumn
|
成绩单操作
|
True
|
u实验步骤(3):
数据库的设计参见图4-65:
图4-65 数据库设计图
数据库为Grade_Sys,用了13个表,具体字段设计情况请参见图4-92。另外编写了24个存储过程。数据库环境是SQL Server 2005。
u实验步骤(4):
鼠标右击项目,在弹出的菜单中选择“添加”、“新建项”,在弹出的“添加新项”窗体中选择“代码文件”,名称改为“BuessinessLayer.cs”,点击“添加”按钮,完成添加。
在BuessinessLayer.cs文件中,编写如下代码:
(代码待续)
本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/216110,如需转载请自行联系原作者