4-2 ADO.NET-查询和检索数据11

简介:

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 列表信息内容
n C# 开发系统分层思想
n 存储过程参数的输入与返回值的获取
n 复杂存储过程的开发设计
用户界面如图464所示:
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 控件添加列“编号”、“任课班级”、“合作院校”、“课程名称”、“课时”、“授课学期“、“人数”、“已阅”、“未阅”、“成绩单操作”,参加表432所示:
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):
数据库的设计参见图465
4-65 数据库设计图
数据库为Grade_Sys,用了13个表,具体字段设计情况请参见图492。另外编写了24个存储过程。数据库环境是 SQL   Server  2005
u 实验步骤(4):
鼠标右击项目,在弹出的菜单中选择“添加”、“新建项”,在弹出的“添加新项”窗体中选择“代码文件”,名称改为“ BuessinessLayer . cs ,点击“添加”按钮,完成添加。
BuessinessLayer . cs 文件中,编写如下代码:
(代码待续)



本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/216110,如需转载请自行联系原作者

目录
相关文章
|
28天前
|
开发框架 JavaScript .NET
asp.net中条件查询+分页
asp.net中条件查询+分页
15 1
|
29天前
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
8 0
|
1月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
61 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
4月前
|
SQL 开发框架 .NET
|
4月前
|
XML SQL 开发框架
|
28天前
|
SQL 数据库
使用ADO.NET查询和操作数据
使用ADO.NET查询和操作数据
9 0
|
2月前
|
SQL 开发框架 .NET
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
67 0
|
4月前
|
开发框架 .NET
|
4月前
|
开发框架 .NET C#
|
4月前
|
Oracle 关系型数据库 数据管理
.NET医院检验系统LIS源码,使用了oracle数据库,保证数据的隔离和安全性
LIS系统实现了实验室人力资源管理、标本管理、日常事务管理、网络管理、检验数据管理(采集、传输、处理、输出、发布)、报表管理过程的自动化,使实验室的操作人员和管理者从繁杂的手工劳作中解放出来,提高了检验人员的工作效率和效益,降低了劳动成本和差错发生率。