`
444878909
  • 浏览: 635808 次
文章分类
社区版块
存档分类
最新评论

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 '诺基亚'

当执行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)

分享到:
评论

相关推荐

    数据库编程教程

    介绍数据库编程。分三部分讲解:(1) 嵌入式SQL (2) 存储过程 (3) C#的数据库应用

    SQL Server 2008中文版关系数据库基础与实践教程.z01

    报表服务、分析服务和集成服务,然后讲解了如何利用索引、视图、函数、存储过程、游标及触发器来管 理和提高T-SQL的查询和操作功能,还讲解了通过ASP.NET和Visual C#2008访问SQL Server 2008数据库 的方法与技巧,...

    SQL Server 2008中文版关系数据库基础与实践教程.zip

    报表服务、分析服务和集成服务,然后讲解了如何利用索引、视图、函数、存储过程、游标及触发器来管 理和提高T-SQL的查询和操作功能,还讲解了通过ASP.NET和Visual C#2008访问SQL Server 2008数据库 的方法与技巧,...

    C#入门经典(第5版)

    该书是屡获殊荣的c#名著和超级畅销书,全面讲解c# 2010基础知识,浓墨重彩地描述web和windows编程以及数据访问(数据库和xml)等内容,详细介绍c#编程工具以及Visual Studio 2010中的visual c# 2010开发环境。...

    精通sql结构化查询语句

    讲解SQL语言的应用,提供了近500个曲型应用,读者可以随查随用,深入讲解SQL语言的各种查询语句,详细介绍数据库设计及管理,详细讲解存储过程、解发器和游标等知识,讲解了SQL语言在高级语言中的具体应用。...

    基于C#的美小学藏文习题册在线平台的设计与实现【附源码】

    对于本网上热门的小学藏文习题册在线平台的设计来说,系统开发主要是采用asp.net语言技术,在整个系统的设计中应用SQL Server数据库来完成数据存储,具体根据小学藏文习题册在线平台的现状来进行开发的,具体根据...

    C# 实战项目——快递单打印软件

    实践是检验技术的最佳标准。学编程就是用编程!本课由小科带领大家完成一个C#...4、使用C#操作SQL Server数据库5、以二进制形式在数据库中存储数据? 6、自定义控件的应用7、C#打印组件的使用? 8、控件的动态添加与删除

    2023年最新整理,qt开发最全面试集锦,含网络,文件系统,数据库,自定义控件,以及视频讲解,文档.zip

    软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...

    asp.net知识库

    SQL过程自动C#封装,支持从表到基本存储过程生成 使用SQLDMO控制 SQL Server 使用SQL-DMO实现定制SQL Scripts Create Tables and Build inserts from Tables by using Mygeneration Templates(Sql Server) C# 获取...

    商品进销存管理系统(数据库课程设计报告).doc

    表3.6 商品卡片 3) 数据流: 表3.7 操作信息 表3.9 管理信息 4) 数据存储: 表3.10 进货一览表 表3.11 销售一览表 表3.12 库存一览表 5) 处理过程: 表3.12 销售信息单 表3.13 进货信息单 表.3.14 库存信息单 系统...

    深入云计算 MongoDB管理与开发实战详解pdf.part2

    作为基于分布式文件存储的数据库,在目前的云计算实践中,MongoDB炙手可热。《深入云计算(MongoDB管理与开发实战详解)》系统全面的介绍了MongoDB开发、管理、维护和性能优化等方方面面。详细而深入,对MongoDB的开发...

    SQL注入攻击与防御(安全技术经典译丛)

     8.6.1 使用存储过程  8.6.2 使用抽象层  8.6.3 处理敏感数据  8.6.4 避免明显的对象名  8.6.5 创建数据库Honeypot  8.6.6 附加的安全开发资源  8.7 本章小结  8.8 快速解决方案  8.9 常见问题解答...

    银行ATM自动取款机源码2012813

    银行ATM自动取款机源码 功能介绍: 一个简单的仿银行ATM取款的源码,适合新手学习 进行了简单的数据库存储操作 模拟自动取款机,转账,存钱等一系列操作 开发环境为Visual Studio 2005,数据库为SQL Server 2005

    openmeeting2视频会议,仿QQ群视频,实现多人视频,多人语音、….zip

    软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发Node.js、C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...

    SQL注入攻击与防御

    8.6.1 使用存储过程 289 8.6.2 使用抽象层 290 8.6.3 处理敏感数据 290 8.6.4 避免明显的对象名 291 8.6.5 创建数据库Honeypot 292 8.6.6 附加的安全开发资源 293 8.7 本章小结 293 8.8 快速解决方案 294 8.9 常见...

Global site tag (gtag.js) - Google Analytics