c#调用存储过程

存储过程(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     }

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

时间: 2024-12-27 00:04:36

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

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

一.提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二.准备数据库表和存储过程 1 create table p_user( 2 id int primary key auto_increment, 3 name varchar(10), 4 sex char(2) 5 ); 6 7 insert into p_user(name,sex) values('A',"男"); 8 insert into p_user(name,sex) values('B',&qu

导入Excel用户表,调用存储过程

花了一天半的时间学习了一下导入Excel用户表,调用存储过程,主要是学习存储过程.因为之前没有具体在项目中应用过. 这里我们采用导入Excel到临时表,然后存储过程中读取临时表判断数据类型和数据格式,然后保存到正式表. 导入Excel采用spring 的POI技术. 本文内容较多,请选择性阅读. controller里面的代码: /**  * Excel导入用户表,调用存储过程,先导入临时表,再在存储过程中判断,判断通过后导入正式表,错误的则记录错误日志表中. lijianbo  *   * @

FAQ系列 | Spring框架中调用存储过程失败

Spring框架中,调用存储过程同时还需要show create procedure权限,对于普通用户而言,还要授予 select on mysql.proc 权限才能正常 --------------------------------------分割线-------------------------------------- 知数堂 (http://zhishuedu.com)培训是由资深MySQL专家叶金荣.吴炳锡联合推出的专业优质培训品牌,主要有MySQL DBA实战优化和Python

jdbc中的Statement对象和Preparedstatement对象的区别,以及通过jdbc操作调用存储过程

一. java.sql.*   和  javax.sql.*的包的类结构 |- Driver接口: 表示java驱动程序接口.所有的具体的数据库厂商要来实现此接口. |- connect(url, properties):  连接数据库的方法. url: 连接数据库的URL URL语法: jdbc协议:数据库子协议://主机:端口/数据库 user: 数据库的用户名 password: 数据库用户密码 |- DriverManager类: 驱动管理器类,用于管理所有注册的驱动程序 |-regis

mybatis调用存储过程

最近在研究mybatis调用存储过程,发表一下自己的学习心得 其中最好用的就是通过map传值,结果还用这个map接收,因为map是一个非常强大的东西,有时候存储过程要操作多张表. 比如说:往多张表插入数据,用JavaBean的方式就很难做到,参数对应多个实体类不好解决,用map就能完美的解决这个问题. Map<String, Object> map=new HashMap<String, Object>把需要的参数往里面一放,就能很容易解决问题 dao层(dao接口),在dao接口

Java操作Oracle数据库以及调用存储过程

操作Oracle数据库 publicclass DBConnection {     //jdbc:oracle:thin:@localhost:1521:orcl     publicstaticfinal String url = "jdbc:oracle:thin:@localhost:1521:ORCL";     publicstatic Connection conn ;         static{         //获取数据库驱动         try {    

水晶报表 Crystal Report 调用存储过程时出错 找不到表 ,解决方法。

用 CrystalReportViewer1 控件在asp.net的网页上显示报表,如果做报表时调用数据表数据的方式调用是可以成功的,但报表是用存储过程获取数据方式会出现以下错误: 找不到表'RptOpenCheck;1' . 文件 G:\TEMP\FO-OpenCheck {6D191F06-DECF-4A25-88FC-8553E3D435AA}.rpt 内出错: 找不到表. Error: 未将对象引用设置到对象的实例. The table 'RptOpenCheck;1' could no

【转】java调用存储过程和函数

一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. CallableStatement 接口继承自PreparedStatement 接口.所以CallableStatement 接口包含有Statement 接口和PreparedStatement 接口定义的全部方法,但是并不是所有的方法我们都要使用,主要使用的方法有这样几个: CallableStatement 常用方法: 返回类型 方法签名 说明 boolean execute() 执行 SQL 语句

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

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(六)--调用存储过程 一.提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二.准备数据库表和存储过程 1 create table p_user( 2 id int primary key auto_increment, 3 name varchar(10), 4 sex char(2) 5 ); 6 7 insert into p_user(name,sex) values('A',"男");

[原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------