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

2023-10-27

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 数据库存储过程的讲解应用 的相关文章

  • 如何从该 Voronoi 图数据中获取单元格字典?

    使用找到的voronoi delaunay图生成库在这个节目中 http sourceforge net projects mapmanager 这是基于 财富 最初的实施他的算法 http en wikipedia org wiki Fo
  • 将指针转换为浮点数?

    我有一个unsigned char 通常 这指向一块数据 但在某些情况下 指针就是数据 即 铸造一个int的价值unsigned char 指针 unsigned char intData unsigned char myInteger 反
  • 隐式方法组转换陷阱

    我想知道为什么给定代码的输出 在 LinqPad 中执行 void Main Compare1 Action Main Dump Compare2 Main Dump bool Compare1 Delegate x return x Ac
  • C++ 中的单例和抽象基类

    最近我遇到了关于实现 Singleton 但涉及抽象基类的问题 假设我们有这样的类层次结构 class IFoo it s ABC class Foo public IFoo 我们的单例类定义如下 template
  • 使用静态类型代替变量

    当您的项目不使用命名空间时 有什么方法可以告诉编译器使用静态类型而不是变量吗 例如 我有一个名为 User 的类 它具有各种静态和非静态方法 假设调用了其中一个静态方法GetUser 我想称之为User GetUser 方法来自一个方法 该
  • 将列表(对象)转换为列表(字符串)

    有没有办法转换List of Object to a List of String 在 c 或 vb net 中而不迭代所有项目 幕后迭代很好 我只想要简洁的代码 Update 最好的方法可能就是进行新的选择 myList Select f
  • 具有多重继承的类的 sizeof

    首先 我知道 sizeof 取决于机器和编译器的实现 我使用的是 Windows 8 1 x64 gcc 5 3 0 没有标志传递给编译器 我从大学讲座中得到了以下代码 include
  • 有没有办法使 C90 标准中的枚举无符号? (符合 MISRA-C 2004 标准)

    我正在尝试找到一种使枚举 无符号 的方法 enum x1 0 x2 x3 uint8 t x2 lt PC LINT MISRA C 2004 will complain about mixing signed and unsigned h
  • C++ 私有静态成员变量

    此 C 代码在编译时产生链接器错误 A h class A public static void f private static std vector
  • .Net Core 中的脚手架以及解决方案中的多个项目

    我创建了一个针对 net461 的 Net Core MVC6 应用程序 我使用了一个我非常熟悉的项目结构 其中我将数据 模型和服务类放置在单独的类库项目中 并且 Web 项目引用这些项目 当我尝试搭建控制器时 我收到一条错误 指出我正在搭
  • Active Directory UserPrincipal.Current.GetGroups() 返回本地组而不是 Web 服务器上的组

    以下内容在我的本地开发盒上效果很好 但是 当我将其移动到网络服务器时 它失败了 甚至不会记录错误 public static List
  • C 的“char”使用什么字符集? [复制]

    这个问题在这里已经有答案了 简单的问题 我最近开始用 C 编程 有一个简单的问题 C 编程语言在其 char 类型中使用什么字符集 例如 ASCII 还是取决于软件 操作系统 char 本质上是 1 个字节 主要在所有操作系统上 所以默认情
  • 如何解释“错误C2018:未知字符'0x40'?[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 在编译一些代码时 我收到以下信息 错误 C2018 未知字符 0x40 我想知道如何解决这样的问题 这是我要开始的地方
  • 需要使用 openssl 加密和解密文件的示例 C 代码

    我正在用 Linux C 编写代码 我需要使用以下命令来加密和解密文件 openssl 目前 我使用系统命令 des3 e nosalt k 0123456789012345 in inp file out out file 进行加密 使用
  • 如何使用简历实现一个“一网打尽”的异常处理程序?

    我想知道我怎样才能写一个抓住他们全部应用程序级别的异常处理程序将为用户提供恢复应用程序流程的选项 如果您正在运行 Windows 窗体应用程序 将处理程序添加到Application ThreadException event
  • 如何将 Metro 应用部署到桌面?

    我正在尝试将我的 C 应用程序部署到我的 Windows 8 Metro 桌面 我可以在 bin 文件夹中看到部署的文件 但是当我尝试打开它们时 出现以下错误 该应用程序只能在 AppContainer 的上下文中运行 我检查了属性上下文菜
  • 编译器可以报告未知属性的错误吗?即使有范围?

    在N3291 7 6 1 3 5 属性语法和语义 decl attr grammar 关于如何属性是用我读过的源代码写的 使用一个属性范围令牌是有条件支持的 实现定义的行为 and For an 属性标记本国际标准中未指定 该行为是实现定义
  • 如何向 ItemsControl 中的 WPF 按钮添加相同的命令

    如何将命令添加到 wpf 按钮 该按钮是ItemsControl并正在修改ItemsSource itself 这是我的 XAML
  • 什么时候使用静态库需要头文件?

    如果我在 Linux 中用 C 创建一个静态库并生成 a 文件 我 或其他人 如何使用该库 例如 我的库定义了一个类 我认为仅仅提供 a 文件是不够的 还需要提供头文件 我如何知道 a 文件必须提供哪些头文件 例如 我是否需要提供我的库代码
  • 如何将 char 转换为 unsigned int?

    我有一个字符数组 它实际上用作字节数组 而不是用于存储文本 在数组中 有两个特定字节表示我需要存储到无符号 int 值中的数值 下面的代码解释了设置 char bytes bytes 2 bytes 0 0x0C For the sake

随机推荐

  • edge浏览器受信任_Edge 浏览器如何添加信任站点

    Microsoft Edge 无法添加信任站点 组策略没有批量设置 只能逐条设置 然后从DC推到所向域内客户端 如果你是用Site to Zone Assignment List Enabled策略或来设置信任站点的话 客户端确实无法手动添
  • OpenHarmony之docker容器的基本用法

    Docker使用示例 docker移植至OpenHarmony的过程可参考 https blog 51cto com u 14601312 5692202 下面以rk3568 OpenHarmony为例 介绍一下如何进行容器制作 导入及使用
  • 一招解决报错:pyassimp.errors.AssimpError: assimp library not found

    文章目录 1 问题描述 2 原因分析 3 解决方法 1 问题描述 在使用pip install pyassimp安装pyassimp库后 调用时会出现错误 File root anaconda3 envs kgn lib python3 8
  • qt5.12.10 在linux(国产系统)的源码编译、移植问题记录

    1 概述 Qt版本 Qt5 12 10 Qt 官网下载地址 Qt官网 路径 Qt5 12 10源码目录目录下下载 qt everywhere src 5 12 10 tar xz 编译平台 方德 其余架构亦可考 2 编译源码记录 1 下载源
  • Flutter 最常出现的错误

    哔哩哔哩漫画APP实践Flutter也有大半年时间了 我针对线上收集到的错误进行分析 挑选出了一些有一般代表性的错误 列在本文 可供实践 Flutter 的初学者们作为一点参考 典型错误一 无法掌握的Future 典型错误信息 NoSuch
  • spring boot 实现注解+自定义配置多数据库

    spring boot 实现注解 自定义配置多数据库 配置多数据库 注解 AOP maven依赖 多数据源配置 代码实现 存在问题 配置多数据库 注解 AOP 你好 这是你第一次使用 Markdown编辑器 所展示的欢迎页 如果你想学习如何
  • shell编程(六) : [shell基础] 基本shell脚本

    接上一篇文章Linux shell编程 五 Linux文件权限管理 三 Linux shell 脚本编程基础 了解了Linux系统和命令行的基础知识 是时候开始编程了 3 1 基本shell脚本 shell脚本的关键在于输入多个命令并处理每
  • Google-Guava-EventBus源码解读

    Guava是Google开源的一个Java基础类库 它在Google内部被广泛使用 Guava提供了很多功能模块比如 集合 并发库 缓存等 EventBus是其中的一个module 本篇结合EventBus源码来谈谈它的设计与实现 概要 首
  • 基础算法题——奇怪的分式(避免小数运算)

    奇怪的分式 上小学的时候 小明经常自己发明新算法 一次 老师出的题目是 1 4 乘以 8 5 小明居然把分子拼接在一起 分母拼接在一起 答案是 18 45 参见图1 png 老师刚想批评他 转念一想 这个答案凑巧也对啊 真是见鬼 对于分子
  • 强大的.NET反编译工具Reflector及插件

    刚接触 net 时就听说 Reflector这个强大反编译工具呢 只是一直没有去使用他 今天update跟我说Reflector如何 如何有用 用的如何 如何爽 还得意的说反编译了不少DLL 本来本人对新鲜事就非常有兴趣 听他这么一说 决定
  • Oracle 存储过程 与 函数 区别

    定义 存储过程 Stored Procedure 是一组为了完成特定功能的SQL 语句集 经编译后存储在数据库中 用户通过指定存储过程的名字并给出参数 如果该存储过程 带有参数 来执行它 存储过程是数据库中的一个重要对象 任何一个设计良好的
  • video-05-videojs编写(全屏、非全屏)自定义控件!!!!

    兄弟们 看到这里 你马上就可以自定义控件了 想想是不是都激动啊 但是这篇文章重在思路及简单实现 仔细看 目录 一 控件分类 二 实现方案 方案二最好 2 1 方案1 只能实现非全屏控件 2 1 1 思路 2 1 2 效果 2 1 3 代码
  • Ableton Live 10 Suite v10.1.42 WiN-MAC 音乐制作宿主软件

    Ableton Live 10 是一个专业的电子音乐制作 现场表演宿主软件 使用 Ableton Live 10 的新设备创造更大胆的声音 通过大量的工作流程改进保持在流程中 使用 Push 可以在远离计算机的地方做更多事情 使用精选库构建
  • Vue中$event的用法

    因为在Vue API文档里 event的用法找不到 所以我自己总结了一下 通常的用法是用来获取当前元素的最新值 event target value div div
  • 七牛云linux命令行工具(qshell)

    qshell下载 wget http devtools qiniu com qshell linux x64 v2 4 2 zip 解压zip 安装 qshell 解压 qshell包 unzip qshell zip 剪辑到 home 文
  • TCP的拥塞控制算法

    前言 防止过多的数据注入网络中 这样可以使网络中的路由器或链路不会过载 若出现拥塞而不进行控制 整个网络的吞吐量将随输入负荷的增大而下降 当输入的负载到达一定程度 吞吐量不会增加 即一部分网络资源会丢失掉 网络的吞吐量维持在其所能控制的最大
  • expiringmap 设置key 过期时间

  • 新方案unity配表工具

    工具下载 网盘链接 工具结构 针对每张表格生成一个表格类 其中默认包含一个list和字典类型参数记录表格数据 初始化项目时将list中的数据转为按id索引的dictionary 用于访问数据 额外包含一个同名Temp后缀的类 记录表格的字段
  • Session详解,学习Session(包含底层分析和使用)

    什么是session session在网络应用中称为 会话控制 是服务器为了保存用户状态而创建的一个特殊的对象 简而言之 session就是一个对象 用于存储信息 session和cookie的比较 cookie保存在客户端 session
  • C# 数据库存储过程的讲解应用

    在使用VS 2012 SQL Server做简单的销售系统中 通常会遇到一些使用存储过程的情况 那究竟什么是存储过程 它的好处是什么呢 如果在SQL Server中创建一个存储过程 C 中怎样联系存储过程呢 一 存储过程 存储过程 Stor