存储过程(Stored Procedure)即用来存储数据表操作的一个过程,是把对数据表操作的方法存储到一起的一个对象,是存储在数据库中。

优点:1.降低网络传输数据量:通过存储过程的名称和参数传递即可调用执行,不用传输sql。

2.执行效率高:sqlserver会事先将存储过程编译成可执行的二进制代码,运行存储过程时,无需再次编译。

3.封装性:也可叫模块式编程,将实现某种功能的多条sql封装到一个对象中,可多次重复调用,可移植性强。

4.安全:可针对不同的权限的用户使用不同的存储过程。

下面讲C#如何调用写好的存储过程,下面是对数据操作封装几个函数

 1  //执行对表的增删改操作的sql语句
2 public static int ExecuteCommand(string text)
3 {
4 using (SqlConnection conn = new SqlConnection(connectionString))
5 {
6 conn.Open();
7 using (SqlCommand cmd = new SqlCommand(text, conn))
8 {
9 int i = cmd.ExecuteNonQuery();
10 return i;
11 }
12 }
13 }
14
15 public static int ExecStoredProcedure(string procName, params SqlParameter[] parameters)
16 {
17 int rtn = 0;
18 using (SqlConnection conn = new SqlConnection(connectionString))
19 {
20 conn.Open();
21 using (SqlCommand cmd = conn.CreateCommand())
22 {
23 SqlTransaction st = conn.BeginTransaction();
24 cmd.Transaction = st;
25 try
26 {
27 cmd.CommandText = procName;
28 cmd.CommandType = CommandType.StoredProcedure;
29 cmd.Parameters.AddRange(parameters);
30 rtn= cmd.ExecuteNonQuery();
31 st.Commit();
32 return rtn;
33 }
34 catch(SqlException sqlex)
35 {
36 st.Rollback();
37 throw sqlex;
38 }
39 }
40 }
41 }
42 public static int ExecuteStoredProcedure(string procName,
43 params SqlParameter[] parameters)
44 {
45 using (SqlConnection conn = new SqlConnection(connectionString))
46 {
47 conn.Open();
48 using (SqlCommand cmd = conn.CreateCommand())
49 {
50 cmd.CommandText = procName;
51 cmd.CommandType = CommandType.StoredProcedure;
52 cmd.Parameters.AddRange(parameters);
53 return cmd.ExecuteNonQuery();
54 }
55 }
56
57 }

推荐用第三种方式,用到了事务处理,若只要有一条不通过全部回滚,避免脏数据的产生。也可以在存储过程中使用事务,后续会继续更新...

 1 protected void Button1_Click(object sender, EventArgs e)
2 {
3 string mainName = "圆梦组";
4 string detailName="刘能|赵本山|沈燕|欧阳锋";
5 string detailAge="23|32|18|19";
6 int rtn=DBHelper.ExecuteCommand(string.Format("exec dbo.Proc_TestBatchMainDetailIns '{0}','{1}','{2}'", mainName, detailName,detailAge));
7 }
8 protected void Button2_Click(object sender, EventArgs e)
9 {
10 string mainName = "起航组2";
11 string detailName="段毅2|乔峰2|杨过2|李莫愁2";
12 string detailAge="18|28|jj|35";
13 SqlParameter[] sps = new SqlParameter[] {
14 new SqlParameter("@mainName",mainName),
15 new SqlParameter("@detailNameStr",detailName),
16 new SqlParameter("@detailAgeStr",detailAge)
17 };
18 try
19 {
20 int rtn = DBHelper.ExecuteStoredProcedure("dbo.Proc_TestBatchMainDetailIns", sps);
21 }
22 catch (Exception ex)
23 {
24 Response.Write(ex.Message);
25 }
26
27 }
28 protected void Button3_Click(object sender, EventArgs e)
29 {
30 string mainName = "起航组2";
31 string detailName = "段毅2|乔峰2|杨过2|李莫愁2";
32 string detailAge = "18|28|jj|35";
33 SqlParameter[] sps = new SqlParameter[] {
34 new SqlParameter("@mainName",mainName),
35 new SqlParameter("@detailNameStr",detailName),
36 new SqlParameter("@detailAgeStr",detailAge)
37 };
38 try
39 {
40 int rtn = DBHelper.ExecStoredProcedure("dbo.Proc_TestBatchMainDetailIns", sps);
41 }
42 catch (Exception ex)
43 {
44 Response.Write(ex.Message);
45 }
46 }
protected void Button1_Click(object sender, EventArgs e)
2 {
3 string mainName = "圆梦组";
4 string detailName="刘能|赵本山|沈燕|欧阳锋";
5 string detailAge="23|32|18|19";
6 int rtn=DBHelper.ExecuteCommand(string.Format("exec dbo.Proc_TestBatchMainDetailIns '{0}','{1}','{2}'", mainName, detailName,detailAge));
7 }
8 protected void Button2_Click(object sender, EventArgs e)
9 {
10 string mainName = "起航组2";
11 string detailName="段毅2|乔峰2|杨过2|李莫愁2";
12 string detailAge="18|28|jj|35";
13 SqlParameter[] sps = new SqlParameter[] {
14 new SqlParameter("@mainName",mainName),
15 new SqlParameter("@detailNameStr",detailName),
16 new SqlParameter("@detailAgeStr",detailAge)
17 };
18 try
19 {
20 int rtn = DBHelper.ExecuteStoredProcedure("dbo.Proc_TestBatchMainDetailIns", sps);
21 }
22 catch (Exception ex)
23 {
24 Response.Write(ex.Message);
25 }
26
27 }
28 protected void Button3_Click(object sender, EventArgs e)
29 {
30 string mainName = "起航组2";
31 string detailName = "段毅2|乔峰2|杨过2|李莫愁2";
32 string detailAge = "18|28|jj|35";
33 SqlParameter[] sps = new SqlParameter[] {
34 new SqlParameter("@mainName",mainName),
35 new SqlParameter("@detailNameStr",detailName),
36 new SqlParameter("@detailAgeStr",detailAge)
37 };
38 try
39 {
40 int rtn = DBHelper.ExecStoredProcedure("dbo.Proc_TestBatchMainDetailIns", sps);
41 }
42 catch (Exception ex)
43 {
44 Response.Write(ex.Message);
45 }
46 }

c#调用存储过程的更多相关文章

  1. spring data jpa 调用存储过程

    网上这方面的例子不是很多,研究了一下,列出几个调用的方法. 假如我们有一个mysql的存储过程 CREATE DEFINER=`root`@`localhost` PROCEDURE `plus1in ...

  2. myabatis oracle 调用存储过程返回list结果集

    Mapper.xml 配置 <resultMap type="emp" id="empMap"> <id property="emp ...

  3. IBatis.Net使用总结(四)-- IBatis 调用存储过程

    IBatis 调用存储过程 http://www.cnblogs.com/jeffwongishandsome/archive/2010/01/10/1543219.html http://www.c ...

  4. SQL SERVER使用ODBC 驱动建立的链接服务器调用存储过程时参数不能为NULL值

    我们知道SQL SERVER建立链接服务器(Linked Server)可以选择的驱动程序非常多,最近发现使用ODBC 的 Microsoft OLE DB 驱动程序建立的链接服务器(Linked S ...

  5. 【Java EE 学习 29 下】【JDBC编程中操作Oracle数据库】【调用存储过程的方法】

    疑问:怎样判断存储过程执行之后返回值是否为空. 一.连接oracle数据库 1.需要的jar包:在安装的oracle中就有,所以不需要到官网下载,我的oracle11g下:D:\app\kdyzm\p ...

  6. MyBatis学习总结(六)——调用存储过程(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013518.html 一.提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二.准备数据库表和存 ...

  7. C# 调用存储过程操作 OUTPUT参数和Return返回值

    本文转载:http://www.cnblogs.com/libingql/archive/2010/05/02/1726104.html 存储过程是存放在数据库服务器上的预先编译好的sql语句.使用存 ...

  8. jdbc调用存储过程和函数

    1.调用存储过程 public class CallOracleProc { public static void main(String[] args) throws Exception{ Stri ...

  9. jdbc执行预处理,批处理,LOB字段处理,调用存储过程

    (1)jdbc执行预处理 PreparedStatment预备语句 eg:String sql="insert into user(id,name,birthday,money) value ...

  10. MyBatis入门学习教程-调用存储过程

    一.提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二.准备数据库表和存储过程 create table p_user( id int primary key auto_incr ...

随机推荐

  1. appserv 设置虚拟路径httpd.conf的配置

    总结 1 打开appserv的安装目录,找到httpd.conf文件,分别去掉下面两行文字前面的#号. #LoadModule vhost_alias_module modules/mod_vhost ...

  2. 各大Oj平台介绍 刷题平台

    https://leetcode.com/ http://www.cnblogs.com/lzmfywz/archive/2012/02/07/2342010.html 1.题库与网站资源题库-在线提 ...

  3. I7-5775C之所以被Intel跳过,是因为本身有太多BUG

    说起I7-5775C,第五代酷睿处理器,可能大多数人都没有使用过,也并不清楚他有什么样的特性. 在2015年6月份,我在日本亚马逊买了一个I7-5775C,从此噩梦就开始了(现在已经换了I7-5820 ...

  4. JavaBean-DAO模式

    一.信息系统的开发架构   客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层就是客户端,简单的来说就是浏览器. 2.显示层:JSP/S ...

  5. 一个Json结构对比的Python小工具兼谈编程求解问题

    先上代码. jsondiff.py #!/usr/bin/python #_*_encoding:utf-8_*_ import argparse import json import sys rel ...

  6. [转] GitHub上README.md教程

    点击阅读原文 最近对它的README.md文件颇为感兴趣.便写下这贴,帮助更多的还不会编写README文件的同学们. README文件后缀名为md.md是markdown的缩写,markdown是一种 ...

  7. 本地yum库制作及本地安装Docker

    生产环境中,我们总是会遇到服务器无法连接外网的情况,这样,如果想安装某个应用,而这个应用依赖的其他类库又特别多,就很痛苦了.这个时候,就需要自己制作个本地的yum库,进行本地安装.本文将以Docker ...

  8. transient关键字

    transient关键字的英文意思是:瞬态,由此可见是瞬间的,不可固定的. 会不会与对象的状态等等有关系呢? 网上找了一下资料是跟对象的序列化有关. transient的作用 一个对象只要实现了Ser ...

  9. inotify+rsync目录实时同步

    两台linux服务器系统CentOS7 一台Apache IP:192.168.155.130(发布文件服务器,也可以叫rsync客户端) 一台nginx IP:192.168.155.131(同步镜 ...

  10. html5+css3 微信开发-学习实例

    例子1.控制数据只显示两行并且最后使用省略号 样式如下: .ControlDataRows{ overflow : hidden; text-overflow: ellipsis; display: ...