C# 数据库存储过程的讲解应用

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

在使用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

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
3月前
|
中间件 关系型数据库 数据库
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
93 19
|
3月前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课16 接入PostGIS全功能及应用举例
本文介绍了如何在PolarDB数据库中接入PostGIS插件全功能,实现地理空间数据处理。此外,文章还提供了使用PostGIS生成泰森多边形(Voronoi diagram)的具体示例,帮助用户理解其应用场景及操作方法。
92 1
|
4月前
|
缓存 NoSQL JavaScript
Vue.js应用结合Redis数据库:实践与优化
将Vue.js应用与Redis结合,可以实现高效的数据管理和快速响应的用户体验。通过合理的实践步骤和优化策略,可以充分发挥两者的优势,提高应用的性能和可靠性。希望本文能为您在实际开发中提供有价值的参考。
96 11
|
5月前
|
人工智能 容灾 关系型数据库
【AI应用启航workshop】构建高可用数据库、拥抱AI智能问数
12月25日(周三)14:00-16:30参与线上闭门会,阿里云诚邀您一同开启AI应用实践之旅!
|
6月前
|
架构师 数据库
大厂面试高频:数据库乐观锁的实现原理、以及应用场景
数据库乐观锁是必知必会的技术栈,也是大厂面试高频,十分重要,本文解析数据库乐观锁。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试高频:数据库乐观锁的实现原理、以及应用场景
|
6月前
|
存储 安全 物联网
C# 在物联网 (IoT) 应用中的应用
本文介绍了C#在物联网(IoT)应用中的应用,涵盖基础概念、优势、常见问题及其解决方法。重点讨论了网络通信、数据处理和安全问题,并提供了相应的代码示例,旨在帮助开发者更好地利用C#进行IoT开发。
252 3
|
6月前
|
缓存 NoSQL 数据库
运用云数据库 Tair 构建缓存为应用提速,完成任务得苹果音响、充电套装等好礼!
本活动将带大家了解云数据库 Tair(兼容 Redis),通过体验构建缓存以提速应用,完成任务,即可领取罗马仕安卓充电套装,限量1000个,先到先得。邀请好友共同参与活动,还可赢取苹果 HomePod mini、小米蓝牙耳机等精美好礼!
|
6月前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
114 3
|
6月前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
133 2
|
6月前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)

热门文章

最新文章