使用存储的优点

1.执行更快。直接写sql脚本会有个解析编译的过程。

2.修改方便。当业务改变时,只需要改存储过程,不需要修改C#代码

3.传递Sql脚本数据相对更小

缺点:

1.使用存储过程,数据库移植性差

2.把业务放到了存储过程里,相当于把处理业务的压力放到了数据库里面。

存储过程的脚本:

  1. --分页原理:越过多少条,取多少条
  2. --创建一个存储过程
  3. create proc P_LoadPageData
  4. --参数
  5. @pageIndex int,
  6. @pageSize int,
  7. @total int out
  8. as
  9. select top(@pageSize) * from QunList where id not in
  10. (
  11. select top((@pageIndex-1)*@pageSize) id from QunList order by id
  12. )
  13. order by id
  14. select @total=count('a') from QunList
  15. select @total
  16.  
  17. --执行存储过程
  18. declare @total int
  19. exec P_LoadPageData 2,5,@total out
  20. select @total

C#中代码

  1. //如果用了输出参数,那么就用SQLDataAdapter就可以了,用SQLDataReader会拿不到输出参数
  2. string connstr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
  3. //创建一个DateSet,用来保存查询出的数据
  4. //可以把DataSet比作数据库;把DataSet.Table比作数据库中的表
  5. DataSet ds=new DataSet();
  6. //设置输出参数
  7. SqlParameter totalParameter=new SqlParameter("@total",SqlDbType.Int);
  8. totalParameter.Direction = ParameterDirection.Output;
  9. using (SqlConnection conn = new SqlConnection(connstr))
  10. {
  11. conn.Open();
  12. using (SqlDataAdapter adapter = new SqlDataAdapter("P_LoadPageData", conn))
  13. {
  14. //设置为存储过程
  15. adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
  16. adapter.SelectCommand.Parameters.Add(new SqlParameter("@pageIndex", 5));
  17. adapter.SelectCommand.Parameters.Add(new SqlParameter("@pageSize", 7));
  18. //输出参数的用法
  19. adapter.SelectCommand.Parameters.Add(totalParameter);
  20. adapter.Fill(ds);
  21. }
  22. }
  23. //取得输出参数的值
  24. int total = (int) totalParameter.Value;
  25. var table = ds.Tables[0];

C#学习-执行存储过程的更多相关文章

  1. MyCat 学习笔记 第十三篇.数据分片 之 通过HINT执行存储过程

    1 环境说明 VM 模拟3台MYSQL 5.6 服务器 VM1 192.168.31.187:3307 VM2 192.168.31.212:3307 VM3 192.168.31.150:  330 ...

  2. Ibatis.Net 执行存储过程学习(八)

    首先在数据库创建存储过程: create proc [dbo].[usp_GetPersonById] @Id int as begin select Id,Name from Person wher ...

  3. Java中执行存储过程和函数(web基础学习笔记十四)

    一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. CallableStatement 接口继承自PreparedStatement 接口.所以CallableS ...

  4. Mysql学习---使用Python执行存储过程

    使用Python执行存储过程 使用Python执行存储过程[2部分]: 1.执行存储过程,获取存储过程的结果集  2.将返回值设置给了  @_存储过程名_序号 = #!/usr/bin/env pyt ...

  5. sqlserver学习2---java执行存储过程

    一.存储过程 1.新增操作存储过程 --------------1.新建 增加学生的存储过程---------------------------- set IDENTITY_INSERT stude ...

  6. MySQL学习——操作存储过程

    MySQL学习——操作存储过程 摘要:本文主要学习了使用DDL语句操作存储过程的方法. 了解存储过程 是什么 存储过程是一组为了完成特定功能的SQL语句集合. 使用存储过程的目的是将常用或复杂的工作预 ...

  7. Dapper完美兼容Oracle,执行存储过程,并返回结果集。

    Dapper完美兼容Oracle,执行存储过程,并返回结果集. 这个问题,困扰了我整整两天. 刚刚用到Dapper的时候,感觉非常牛掰.特别是配合.net 4.0新特性dynamic,让我生成泛型集合 ...

  8. JAVA使用JDBC技术操作SqlServer数据库执行存储过程

    Java使用JDBC技术操作SqlServer数据库执行存储过程: 1.新建SQLSERVER数据库:java_conn_test 2.新建表:tb_User 3.分别新建三个存储过程: 1>带 ...

  9. Oracle中执行存储过程call和exec区别

    Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...

随机推荐

  1. Ural 1091 Tmutarakan Exams

    Tmutarakan Exams Time Limit: 1000ms Memory Limit: 16384KB This problem will be judged on Ural. Origi ...

  2. Inversion

    Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4176   Accepted: 1857 Description The i ...

  3. fastjson将java list转为json字符串

    1.直接用fastjson的静态方法string JSON.toJSONString(list)方法就行,JSON.toJSONString(list)将java list转为json字符串. 2.t ...

  4. vim 快速搜索的快捷键

    当光标在某个单词上面的时候 按 shift + #键(或 shift + * )就可以了!!! ----------------------------------- If you are worki ...

  5. Python3基础(八) 模块

    在程序中定义函数可以实现代码重用.但当你的代码逐渐变得庞大时,你可能想要把它分割成几个文件,以便能够更简单地维护.同时,你希望在一个文件中写的代码能够被其他文件所重用,这时我们应该使用模块(modul ...

  6. sqlite 数据库 相关知识

    一基本简单介绍 SQLite 是一个自持的(self-contained).无server的.零配置的.事务型的关系型数据库引擎.由于他非常小,所以也能够作为嵌入式数据库内建在你的应用程序中. SQL ...

  7. Chrome浏览器扩展开发系列之十四:本地消息机制Native messagin

    Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 2016-11-24 09:36 114人阅读 评论(0) 收藏 举报  分类: PPAPI(27)  通过将浏览器 ...

  8. hdu 5416 CRB and Tree(2015 Multi-University Training Contest 10)

    CRB and Tree                                                             Time Limit: 8000/4000 MS (J ...

  9. MFC:Win32-Dll及MFC-Dll编写调用

    一.win32-dll 1.编写 代码例如以下: Math.h #ifdef MATH_EXPORTS #define MATH_API __declspec(dllexport) #else #de ...

  10. 5.3.3 deque对象

    class collections.deque([iterable[, maxlen]]) 返回一个新双向队列,当有输入迭代器时.会从左至右地加入到队列里.假设没有输入參数,就创建一个空队列. deq ...