打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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]asbeginTransact SQL语句块;End--执行execute 存储过程名 [参数1,….参数n]

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

-- ===========================================-- 创建存储过程(一)-- 手机库存查询 查询手机品牌-- ===========================================--创建存储过程create procedure PSelcetPhoneName@Pname varchar(20)asbeginselect phonename as 手机品牌,phoneclass as 手机型号,phoneid as 序列号,price as 出厂价格,arrtime as 进货时间,period as 保修时间from Telephone where phonename=@Pnameend--删除存储过程drop procedure PSelcetPhoneName--执行存储过程execute PSelcetPhoneName '诺基亚'

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

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

-- ===========================================-- 创建存储过程(五)-- 管理员修改员工信息存储过程-- ===========================================create procedure PUpdateUser(@pwd varchar(20),@role varchar(20),@name varchar(20))asbeginupdate Users setuserpwd = @pwd,userrole=@rolewhere username = @nameend--执行存储过程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)类型@PnameSqlCommand.ExecuteNonQuery();                                  //执行存储过程SqlConnection.Close();                                         //关闭连接SqlConnection.Dispose();                                       //释放资源

源代码如下:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;//新加命名空间using System.Data.SqlClient;using System.Reflection;namespace pricedureTest{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        private void button1_Click(object sender, EventArgs e)        {            //定义数据库连接语句:服务器=.(本地) 数据库名=TelephoneMS(手机管理系统)            string consqlserver = "Data Source=.;Initial Catalog=TelephoneMS;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中行间距间隙很大,怎样设置让它紧挨着.希望知道的人告知,谢谢!

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VS连接SQL Server数据库,增删改查详细教程(C#代码)
asp.net调用存储过程方法新解
最新分享
超级DBHelper,让三层代码冗余降低【原创博文】
.net执行存储过程 - 生活就是在不能坚持的时候继续坚持 - 博客园
ASP.NET对SQLServer的通用数据库访问类
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服