当前位置:   article > 正文

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执行存储过程:

  1. create procedure 存储过程名 [参数1,….参数n]
  2. as
  3. begin
  4. Transact SQL语句块;
  5. End
  6. --执行
  7. execute 存储过程名 [参数1,….参数n]

举个实例:我在数据库中使用create创建了一张Telephone表,并使用Insert向该表中已经插入了数据,现在想使用存储过程查询具体手机品牌为”诺基亚”的手机信息,代码如下:

  1. -- ===========================================
  2. -- 创建存储过程(一)
  3. -- 手机库存查询 查询手机品牌
  4. -- ===========================================
  5. --创建存储过程
  6. create procedure PSelcetPhoneName
  7. @Pname varchar(20)
  8. as
  9. begin
  10. select phonename as 手机品牌,phoneclass as 手机型号,phoneid as 序列号,
  11. price as 出厂价格,arrtime as 进货时间,period as 保修时间
  12. from Telephone where phonename=@Pname
  13. end
  14. --删除存储过程
  15. drop procedure PSelcetPhoneName
  16. --执行存储过程
  17. execute PSelcetPhoneName '诺基亚'
phonename=@Pname end --删除存储过程 drop procedure PSelcetPhoneName --执行存储过程 execute PSelcetPhoneName '诺基亚'

当执行execut时,会显示如下信息:

同时,下面在介绍一个更新的存储过程的代码,方便大家举一反三.它的功能是把用户名为”bbbbb”的用户密码更新为”123456”,用户身份更新为”销售员”.执行代码,再select查询Users表可以发现信息更新.

  1. -- ===========================================
  2. -- 创建存储过程(五)
  3. -- 管理员修改员工信息存储过程
  4. -- ===========================================
  5. create procedure PUpdateUser
  6. (@pwd varchar(20),@role varchar(20),@name varchar(20))
  7. as
  8. begin
  9. update Users
  10. set
  11. userpwd = @pwd,userrole=@role
  12. where username = @name
  13. end
  14. --执行存储过程
  15. execute PUpdateUser '123456','销售员','bbbbb'

三.C# winform如何结合存储过程

1.界面设计

设计界面如下图所示,主要有dataGridView(显示数据表格),button(按钮),textBox组成.

2.源代码讲解

其核心代码及步骤如下:

  1. SqlConnection con = new SqlConnection("数据库服务"); //定义SQL Server连接对象
  2. SqlConnection.Open(); //打开数据库连接
  3. SqlCommand com = new SqlCommand("存储过程名", 数据库连接对象); //使用Command创建存储过程
  4. SqlCommand.CommandType = CommandType.StoredProcedure; //设置Command对象类型为存储过程
  5. SqlCommand.Parameters.Add(); //添加参数并赋值
  6. SqlCommand.Parameters.Add("@Pname", SqlDbType.NVarChar, 20); //添加narchar(20)类型@Pname
  7. SqlCommand.ExecuteNonQuery(); //执行存储过程
  8. SqlConnection.Close(); //关闭连接
  9. SqlConnection.Dispose(); //释放资源

源代码如下,先添加命名空间

  1. //新加命名空间
  2. using System.Data.SqlClient;
  3. using System.Reflection;

点击按钮修改其函数如下

  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. //定义数据库连接语句:服务器=.(本地) 数据库名=PhoneMS(手机管理系统)
  4. string consqlserver = "Data Source=.;Initial Catalog=PhoneMS;Integrated Security=True;";
  5. //定义SQL Server连接对象
  6. SqlConnection con = new SqlConnection(consqlserver);
  7. //打开连接
  8. con.Open();
  9. //定义数据库执行一个SQL语句或存储过程
  10. SqlCommand com = new SqlCommand("PSelcetPhoneName", con);
  11. //指定类型为存储过程
  12. com.CommandType = CommandType.StoredProcedure;
  13. //存储过程添加变量并赋值给textBox1
  14. com.Parameters.Add("@Pname", SqlDbType.NVarChar, 20).Value = textBox1.Text.ToString();
  15. //定义获取数据
  16. SqlDataAdapter da = new SqlDataAdapter(com);
  17. DataSet ds = new DataSet();
  18. try
  19. {
  20. da.Fill(ds); //填充数据
  21. dataGridView1.DataSource = ds.Tables[0]; //显示在dataGridView中
  22. }
  23. catch (Exception msg)
  24. {
  25. MessageBox.Show(msg.Message); //异常处理
  26. }
  27. finally
  28. {
  29. con.Close(); //关闭连接
  30. con.Dispose(); //释放连接
  31. da.Dispose(); //释放资源
  32. }
  33. }

3.运行结果

总结:希望文章对大家有所帮助,作者已尽力,如果有不足和不喜欢的地方,见谅!
PS:作者遇到一个问题,在CSDN写博客时,命名1.2.3.4.5中行间距间隙很大,怎样设置让它紧挨着.希望知道的人告知,谢谢!
最后我自己解决了,采用的方法是在CSDN写博客时,点击"源代码"编辑文章,把<p></p>从其段落换成了<br />换行实现的,希望大家想缩小间距,也可这样操作.

(By:Eastmount 2013-9-11 19点http://blog.csdn.net/eastmount

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/418917
推荐阅读
相关标签
  

闽ICP备14008679号