C# 数据库存储过程的讲解应用
在使用VS 2012+SQL Server做简单的销售系统中,通常会遇到一些使用存储过程的情况,那究竟什么是存储过程,它的好处是什么呢?如果在SQL Server中创建一个存储过程,C#中怎样联系存储过程呢?
一.存储过程
存储过程(Stored Procedure)是大型数据库系统中,一组为完成特定功能的SQL程序代码.它已经过编译后存储在数据库中,用户可以通过制定的存储过程名和参数来执行它.至于存储过程的好处:
1.执行速度更快
存储过程是在创建时被编译和优化过,调用一次后相关信息就保存在数据库中,同时内存会保留一份存储过程,下次调用就可以直接从内存中调用执行,不占用CUP资源.
2.存储过程可以减少网络通信流量
一个百行T-SQL代码的操作可以通过执行一条过程代码替换,且不需要在网络中发送数百行代码.
3.存储过程允许模块化设计
当创建后即可在程序中调用多次,这可以改进应用程序的可维护性,并允许与应用程序统一访问数据库.
4.存储过程安全性更高
可以使用数据库的安全机制限制对数据库的访问,如授权某用户只能执行不能修改存储过程,同时它存储过程可以加强应用程序的安全性使其不受SQL注入工具.
5.存储过程允许延迟绑定
可以穿件引用尚不存在的表,在创建存储过程中只检查语法,知道第一次执行该存储过程时才对其编译,如果引用的表不存在能创建存储过程,但运行会失败.
上面就是一些我对存储过程的认识,推荐大家在做系统时尽量使用存储过程.上面有些知识引致周志奎的《数据库系统原理》,如果想更详细的了解存储过程,可以访问该博客(推荐):http://www.cnblogs.com/tjsquall/archive/2008/02/04/1064402.html
二.SQLServer如何使用存储过程
如果在SQL Server中使用存储过程呢?存储过程的创建语句主要如下,当创建完成可以通过execute执行存储过程:
create procedure 存储过程名 [参数1,….参数n]
as
begin
Transact SQL语句块;
End
--执行
execute 存储过程名 [参数1,….参数n]
举个实例:我在数据库中使用create创建了一张Telephone表,并使用Insert向该表中已经插入了数据,现在想使用存储过程查询具体手机品牌为”诺基亚”的手机信息,代码如下:
-- ===========================================
-- 创建存储过程(一)
-- 手机库存查询 查询手机品牌
-- ===========================================
--创建存储过程
create procedure PSelcetPhoneName
@Pname varchar(20)
as
begin
select phonename as 手机品牌,phoneclass as 手机型号,phoneid as 序列号,
price as 出厂价格,arrtime as 进货时间,period as 保修时间
from Telephone where phonename=@Pname
end
--删除存储过程
drop procedure PSelcetPhoneName
--执行存储过程
execute PSelcetPhoneName '诺基亚'
phonename=@Pname
end
--删除存储过程
drop procedure PSelcetPhoneName
--执行存储过程
execute PSelcetPhoneName '诺基亚'
当执行execut时,会显示如下信息:
同时,下面在介绍一个更新的存储过程的代码,方便大家举一反三.它的功能是把用户名为”bbbbb”的用户密码更新为”123456”,用户身份更新为”销售员”.执行代码,再select查询Users表可以发现信息更新.
-- ===========================================
-- 创建存储过程(五)
-- 管理员修改员工信息存储过程
-- ===========================================
create procedure PUpdateUser
(@pwd varchar(20),@role varchar(20),@name varchar(20))
as
begin
update Users
set
userpwd = @pwd,userrole=@role
where username = @name
end
--执行存储过程
execute PUpdateUser '123456','销售员','bbbbb'
三.C# winform如何结合存储过程
1.界面设计
设计界面如下图所示,主要有dataGridView(显示数据表格),button(按钮),textBox组成.
2.源代码讲解
其核心代码及步骤如下:
SqlConnection con = new SqlConnection("数据库服务"); //定义SQL Server连接对象
SqlConnection.Open(); //打开数据库连接
SqlCommand com = new SqlCommand("存储过程名", 数据库连接对象); //使用Command创建存储过程
SqlCommand.CommandType = CommandType.StoredProcedure; //设置Command对象类型为存储过程
SqlCommand.Parameters.Add(); //添加参数并赋值
SqlCommand.Parameters.Add("@Pname", SqlDbType.NVarChar, 20); //添加narchar(20)类型@Pname
SqlCommand.ExecuteNonQuery(); //执行存储过程
SqlConnection.Close(); //关闭连接
SqlConnection.Dispose(); //释放资源
源代码如下,先添加命名空间
//新加命名空间
using System.Data.SqlClient;
using System.Reflection;
点击按钮修改其函数如下
private void button1_Click(object sender, EventArgs e)
{//定义数据库连接语句:服务器=.(本地) 数据库名=PhoneMS(手机管理系统)string consqlserver = "Data Source=.;Initial Catalog=PhoneMS;Integrated Security=True;";//定义SQL Server连接对象SqlConnection con = new SqlConnection(consqlserver);//打开连接con.Open();//定义数据库执行一个SQL语句或存储过程 SqlCommand com = new SqlCommand("PSelcetPhoneName", con);//指定类型为存储过程 com.CommandType = CommandType.StoredProcedure; //存储过程添加变量并赋值给textBox1 com.Parameters.Add("@Pname", SqlDbType.NVarChar, 20).Value = textBox1.Text.ToString();//定义获取数据SqlDataAdapter da = new SqlDataAdapter(com);DataSet ds = new DataSet();try{da.Fill(ds); //填充数据dataGridView1.DataSource = ds.Tables[0]; //显示在dataGridView中}catch (Exception msg){MessageBox.Show(msg.Message); //异常处理}finally{con.Close(); //关闭连接con.Dispose(); //释放连接da.Dispose(); //释放资源}
}
3.运行结果
总结:希望文章对大家有所帮助,作者已尽力,如果有不足和不喜欢的地方,见谅!
PS:作者遇到一个问题,在CSDN写博客时,命名1.2.3.4.5中行间距间隙很大,怎样设置让它紧挨着.希望知道的人告知,谢谢!
最后我自己解决了,采用的方法是在CSDN写博客时,点击"源代码"编辑文章,把<p></p>从其段落换成了<br />换行实现的,希望大家想缩小间距,也可这样操作.
(By:Eastmount 2013-9-11 19点http://blog.csdn.net/eastmount)
C# 数据库存储过程的讲解应用相关推荐
- Mysql数据库存储过程基本语法讲解
Mysql数据库存储过程基本语法讲解 一般情况下MYSQL以:结尾表示确认输入并执行语句,但在存储过程中:不是表示结束,因此可以用该命令将:号改为//表示确认输入并执行.存储过程如同一门程序设计语言, ...
- SQL 存储过程 procedure 讲解+代码实例
文章目录 1. 存储过程概述 2. 创建存储过程 create procedure 2.1. 参数 in.out.inout 3. 调用存储过程 call 4. 查看存储过程 4.1. 查看存储过程的 ...
- mysql过程异常处理_mysql数据库存储过程异常处理
14.1.4 定义条件和处理程序 定义条件和处理程序是事先定义程序执行过程中可能遇到的问题.并且可以在处理程序中定义解决这些问题的办法.这种方式可以提前预测可能出现的问题, 并提出解决办法.这样可以 ...
- oracle数据库存储过程中NO_DATA_FOUND不起作用解决
oracle数据库存储过程中NO_DATA_FOUND不起作用 1.首先创建一个表lengzijiantest,表中只有一个字段f_id ? 1 2 3 4 5 [cpp] CREATE TABLE ...
- JDBC对MySQL数据库存储过程的调用
一.MySQL数据库存储过程: 1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完毕特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中.用 ...
- 使用shell脚本调用mysql数据库存储过程,并设置定时任务
本来是要mysql数据库中创建事件任务来,定时执行存储过程,做数据传输的...后来由于种种原因,就使用crontab来定时执行,调用存储过程. 实现这个数据传输分为两步: 第一步:编写shell脚本调 ...
- mysql数据库存储过程及调用方法
mysql数据库存储过程及调用方法 mysql5.0以后就支持存储过程了,目前mysql的6.0Alpha版也已经推出.6.0不仅支持大型数据库如oracle等的绝大部分功 能,如存储过程.视图.触发 ...
- 数据库:存储过程_数据科学过程:摘要
数据库:存储过程 Once you begin studying data science, you will hear something called 'data science process' ...
- jdbc存储过程mysql_JDBC对MySQL数据库存储过程的调用
1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完成特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中,用户通过指定存储过程的名字并给出参 ...
最新文章
- Winform程序只允许应用单开
- Tortoise SVN 版本控制常用操作汇总(show log)
- 《SqlServer性能分析一》
- 翻译神器拓宽语言沟通边界传神TransnBox、T1惊艳中国企业互联网CEO 峰会
- Safari 14.0 的功臣 Webp?
- React功能界面的组件化编码流程
- Matlab xlim ylim zlim函数
- 【转】ABP源码分析三十六:ABP.Web.Api
- JSR 303 - Bean Validation与Hibernate Validation 介绍
- mybatis延迟加载(lazy)配置生效的陷阱
- ITK+VTK+VS环境搭建.Q:vs编译出问题参见VTK(一)哈。
- 两组数据的偏差怎么算_数据随机性,如何利用游程检验来检测?
- 关于路由器,摄像头,防火墙的搜索方法(IOT设备)
- Axure 9软件功能区域、界面介绍
- itools电脑显示服务器维护,win10系统iTools无法打开且服务无法启动的具体技巧
- 人工智能终究会抢了我们程序员的饭碗
- 服务器winsxs文件夹怎么清理工具,winsxs,详细教您winsxs文件夹清理方法
- Kettle连接Mysql报错:Driver class org.gjt.mm.mysql.Driver could not be found
- 计算机科学刘培姣,高中物理课堂融入物理学史体现核心素养的必要性
- MacOS 安装跨平台加密工具 VeraCrypt
热门文章
- ORACLE 临时表空间使用率过高的原因及临时解决方案
- springboot dubbo 问题记录
- R语言中的特殊值 NA NULL NaN Inf
- python学习笔记 day20 序列化模块(二)
- 一个简单的案例带你入门Dubbo分布式框架
- IpIImage - CvMat 转换方法
- [ZJOI2010]数字计数
- WebService大讲堂之Axis2(9):编写Axis2模块(Module)
- XHTML和HTMl区别
- 简评《疯狂的石头》《超人归来 / Superman Returns》《谍中谍 3 / Mission Impossible 3》...