ADO调用分页查询存储过程的实例讲解

2025-05-29 0 58

一、分页存储过程

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35
----------使用存储过程编写一个分页查询-----------------------

set nocount off --关闭SqlServer消息

--set nocount on --开启SqlServer消息

go

create proc usp_getMyStudentsDataByPage

--输入参数

@pagesize int=7,--每页记录条数

@pageindex int=1,--当前要查看第几页的记录

--输出参数

@recordcount int output,--总的记录的条数

@pagecount int output --总的页数

as

begin

--1.编写查询语句,把用户要的数据查询出来

select

t.fid,

t.fname,

t.fage,

t.fgender,

t.fmath,

t.fclassid,

t.fbirthday

from (select *,rn=row_number() over(order by fid asc) from MyStudent) as t

where t.rn between (@pageindex-1)*@pagesize+1 and @pagesize*@pageindex

--2.计算总的记录条数

set @recordcount=(select count(*) from MyStudent)

--3.计算总页数

set @pagecount=ceiling(@recordcount*1.0/@pagesize)

end

--调用前定义输出参数

declare @rc int,@pc int

exec usp_getMyStudentsDataByPage @pagesize=7,@pageindex=4, @recordcount=@rc output,@pagecount=@pc output

print @rc

print @pc

二、ADO调用存储过程

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98
using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Data.SqlClient;

namespace _02通过Ado.Net调用存储过程

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private int pageIndex = 1;//当前要查看的页码

private int pageSize = 7;//每页显示的记录条数

private int pageCount;//总页数

private int recordCount;//总条数

//窗体加载的时候显示第一页的数据

private void Form1_Load(object sender, EventArgs e)

{

LoadData();

}

private void LoadData()

{

//根据pageIndex来加载数据

string constr = "Data Source=steve-pc;Initial Catalog=itcast2014;Integrated Security=True";

#region 1

//using (SqlConnection conn = new SqlConnection(constr))

//{

// //将sql语句变成存储过程名称

// string sql = "usp_getMyStudentsDataByPage";

// using (SqlCommand cmd = new SqlCommand(sql, conn))

// {

// //告诉SqlCommand对象,现在执行的存储过程不是SQL语句

// cmd.CommandType = CommandType.StoredProcedure;

// //增加参数(存储过程中有几个参数,这里就需要增加几个参数)

// //@pagesize int=7,--每页记录条数

// //@pageindex int=1,--当前要查看第几页的记录

// //@recordcount int output,--总的记录的条数

// //@pagecount int output --总的页数

// SqlParameter[] pms = new SqlParameter[] {

// new SqlParameter("@pagesize",SqlDbType.Int){Value =pageSize},

// new SqlParameter("@pageindex",SqlDbType.Int){Value =pageIndex},

// new SqlParameter("@recordcount",SqlDbType.Int){ Direction=ParameterDirection.Output},

// new SqlParameter("@pagecount",SqlDbType.Int){Direction=ParameterDirection.Output}

// };

// cmd.Parameters.AddRange(pms);

// //打开连接

// conn.Open();

// //执行

//using(SqlDataReader reader=cmd.ExecuteReader())

//{

//reader.Read()

//}

//pms[2].Value

// }

//}

#endregion

//DataAdapter方式

DataTable dt = new DataTable();

using (SqlDataAdapter adapter = new SqlDataAdapter("usp_getMyStudentsDataByPage", constr))

{

adapter.SelectCommand.CommandType = CommandType.StoredProcedure;

SqlParameter[] pms = new SqlParameter[] {

new SqlParameter("@pagesize",SqlDbType.Int){Value =pageSize},

new SqlParameter("@pageindex",SqlDbType.Int){Value =pageIndex},

new SqlParameter("@recordcount",SqlDbType.Int){ Direction=ParameterDirection.Output},

new SqlParameter("@pagecount",SqlDbType.Int){Direction=ParameterDirection.Output}

};

adapter.SelectCommand.Parameters.AddRange(pms);

adapter.Fill(dt);

//获取输出参数并且赋值给label

label1.Text = "总条数:" + pms[2].Value.ToString();

label2.Text = "总页数:" + pms[3].Value.ToString();

label3.Text = "当前页:" + pageIndex;

//数据绑定

this.dataGridView1.DataSource = dt;

}

}

//下一页

private void button2_Click(object sender, EventArgs e)

{

pageIndex++;

LoadData();

}

//上一页

private void button1_Click(object sender, EventArgs e)

{

pageIndex--;

LoadData();

}

}

}

效果图:

ADO调用分页查询存储过程的实例讲解

三、通过ado.net调用存储过程与调用带参数的SQL语句的区别。

1>把SQL语句变成了存储过程名称

2>设置SqlCommand对象的CommandType为CommandType.StoredProcedure

这步本质 就是在 存储过程名称前面加了个“ exec ”

3>根据存储过程的参数来设置SqlCommand对象的参数。

4>如果有输出参数需要设置输出参数的Direction属性为:Direction=ParameterDirection.Output

四、如果是通过调用Command对象的ExecuteReader()方法来执行的该存储过程,那么要想获取输出参数,必须得等到关闭reader对象后,才能获取输出参数。

以上这篇ADO调用分页查询存储过程的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持快网idc。

原文链接:http://www.cnblogs.com/hao-1234-1234/archive/2017/12/11/8025559.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 ADO调用分页查询存储过程的实例讲解 https://www.kuaiidc.com/99339.html

相关文章

猜你喜欢
发表评论
暂无评论