存储过程(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. (九)串行口方式0 拓展并行输出端口 02 74LS164芯片

    1.先讲解74LS164 移位芯片: 74HC164.74HCT164 是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出. 数据通过两个输入端(DSA 或 DSB)之一串行输入:任一输入端可 ...

  2. Web应用程序项目以配置使用IIS。未找到Web服务器

    解决办法 右键编辑该Web项目的csproj文件 把UserIIS改为False.或者在IIS服务器里面配置一个IISUrl里面的地址 如图

  3. cxf(3.1.1) 异常Caused by: java.io.FileNotFoundException: class path resource [META-INF/cxf/cxf-extension-soap.xml]

    Caused by: java.io.FileNotFoundException: class path resource [META-INF/cxf/cxf-extension-soap.xml] ...

  4. Dynamics AX 2012 R2 安装 AIF IIS上的Web服务

    1.为什么使用IIS上的WEB服务 组件? 如果你要在Dynamics AX Service中使用HTTP Adapter,那么你就要安装IIS上的WEB服务 组件.HTTP Adapter会在IIS ...

  5. 02-FPGA设计流程介绍——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线——普利斯队长精心奉献 课程目标: 1.了解并学会FPGA开发设计的整体流程 2.设计一个二选一选择器并进行功能仿真.时序仿真以及板级验证 实验平台:芯航线FPGA开发板.杜邦线 实验内容: 良 ...

  6. [已解决]Eclipse 插件Maven在使用 add dependency,找不到包,解决办法

    以Eclipse版本[Version: Luna Release (4.4.0),]为例, 依次打开:Window >show view > other > Maven Reposi ...

  7. php实现回复图文,图片,文字

      [代码]php代码: <?php /** 微信公众平台 开发者模式 默认用户输入任何文字,均返回同一个图文信息,链接地址为手机站; 可以根据变量$keyword,即用户输入的信息,进行判断, ...

  8. [充电]C++ string字符串替换

    //C++ 第一种替换字符串的方法用replace()|C++ 第二种替换字符串的方法用erase()和insert()[ C++string|C++ replace()|C++ erase()|C+ ...

  9. IntelliJ IDEA使用(1)——IDEA配置JDK

    提前安装jdk,配置环境变量 一.配置jdk 1.依次点开File -->Project Structure,点击左侧标签页,点击SDKs 2.点击+号,选SDK 3.在弹出框选择jdk路径(我 ...

  10. sql基本操作

    SQL功能 数据查询 SELECT 数据定义 CREATE,  DROP,   ALTER 数据操纵 INSERT,   UPDATE,   DELETE 数据控制 GRANT,  REVOKE 创建 ...