不足之处,欢迎指正!

创建有输出参数的存储过程

if exists(select * from sysobjects where name='usp_getPage1')
drop procedure usp_getPage1
go
create procedure usp_getPage1--存储过程名称
@count int output,--输出参数
@countIndex int=1,--参数带默认值
@countPage int=5--参数带默认值
as
--一个sql语句。ROW_NUMBER ( ) OVER ()返回结果集分区内行的序列号,每个分区的第一行从 1 开始,这里给别名id。temp也是一个别名,是前面括号的数据
select * from(select row_number()over(order by studentno)id,* from student)temp where id >(@countIndex-1)*@countPage and id<=@countIndex*@countPage
--给输出参数赋值
set @count=ceiling((select count(*) from student)*1.0/@countPage)
--ceiling四舍五入的节奏,乘以1.0呢,是因为int除以int还是得到int。浮点型除以整型得到浮点型
go
--执行存储过程,有默认值的可以不给值,但是输出参数需要声明一个变量接收
declare @num int
execute usp_getPage1 @count=@num output
print @num

  创建一个类,里面有一个静态方法,等下会调用,引用命名空间

using System.Data;
using System.Data.SqlClient;

 class SqlHelper
{
public static readonly string connStr = "Data Source=.;Initial Catalog=MySchoolMoreData;Integrated Security=True";
/// <summary>
/// 三个参数得到数据结果集
/// </summary>
/// <param name="commandText">sql命令,存储过程名称</param>
/// <param name="ctype">命令字符串类型</param>
/// <param name="ps">参数数据 params关键词表示可为空</param>
/// <returns>返回DataTable的结果集</returns>
public static DataTable LoadData(string commandText,CommandType ctype,params SqlParameter[]ps)
{
SqlDataAdapter da = new SqlDataAdapter(commandText, connStr);
da.SelectCommand.Parameters.AddRange(ps);
da.SelectCommand.CommandType = ctype;
DataTable dt = new DataTable();
da.Fill(dt);
return dt; }
}

  界面--一个DataGridView空间,两个Button

声明三个全局变量

       int pageIndex = 1;//页码
int pageCount = 5; //每一页显示多少个数据
int count = 0;//接收输出参数的

  

private void Form1_Load(object sender, EventArgs e)界面初始之后的事件

SqlParameter p=new SqlParameter("@count",SqlDbType.Int);//@count 输出参数,和存储过程必须同名。声明类型
p.Direction = ParameterDirection.Output; //告诉服务器的参数输出方向
//调用方法静态
DataTable dt = SqlHelper.LoadData("usp_getPage1", CommandType.StoredProcedure, p);
dgvData.DataSource = dt;//绑定数据
this.count = (int)p.Value;//记录第几页

  在上一页按钮写的事件

private void btnPer_Click(object sender, EventArgs e)
{ //当页码为1的时候将return
if (pageIndex==1)
{
MessageBox.Show("已经是第一页了");
return;
}
pageIndex--;//点击上一次页码减去1
//声明参数数组,参数必须和存储过程声明的变量名称一致
SqlParameter []ps={new SqlParameter("@countIndex",pageIndex),
new SqlParameter("@countPage",pageCount),
new SqlParameter("@count",SqlDbType.Int)
};
//设置输出参数的方向
ps[2].Direction = ParameterDirection.Output;
DataTable dt = SqlHelper.LoadData("usp_getPage1", CommandType.StoredProcedure, ps);//CommandType.StoredProcedure 告诉服务器这是执行一个存储过程不是sql语句
            dgvData.DataSource = dt;//绑定数据
this.count = (int)ps[2].Value;//记录第几页 }

  然后在下一页按钮的事件代码和上一页是差不多的只是变量pageIndex是pageIndex++代码如下:

   private void btnNext_Click(object sender, EventArgs e)
{
if (pageIndex==this.count)//不同处
{
MessageBox.Show("已经是最后一页了");
return;
}
pageIndex++;//点击下一次页码加1--不同处
//声明参数数组
SqlParameter[] ps ={new SqlParameter("@countIndex",pageIndex),
new SqlParameter("@countPage",pageCount),
new SqlParameter("@count",SqlDbType.Int)
};
//设置输出参数的方向
ps[2].Direction = ParameterDirection.Output;
DataTable dt = SqlHelper.LoadData("usp_getPage1", CommandType.StoredProcedure, ps);
dgvData.DataSource = dt;//绑定数据
this.count = (int)ps[2].Value;//每一次都要记录输出的值
}

  

总结:1.存储过程的正确创建很重要

2.参数的名称一定要和存储过程的变量名称要一致

3.输出参数一定要声明,同时设置他的方向。

4.CommandType.StoredProcedure 的设置

创建有输出参数的存储过程并在c#中实现DataGridView分页功能的更多相关文章

  1. C# 调用带输入输出参数的存储过程

    //调用存储过程执行类似于2//select count(*) from userinfo where username=username and pwd=pwd and grade=grade3// ...

  2. 用exec调用带有output输出参数的存储过程

    用exec调用带有output输出参数的存储过程,想要得到输出参数的值,必须在调用参数后面加output关键字,如: declare @value int exec up_test    2,3,@v ...

  3. sqlserver 带输出参数的存储过程的创建与执行

    创建 use StudentManager go if exists(select * from sysobjects where name='usp_ScoreQuery4') drop proce ...

  4. Oracle带输入输出参数的存储过程

    (一)使用输入参数 需求:在emp_copy中添加一条记录,empno为已有empno的最大值+1,ename不能为空且长度必须大于0,deptno为60. 创建存储过程: create or rep ...

  5. c#调用带输出参数的存储过程

    sql server中编写一个存储过程: CREATE PROCEDURE ProGetPWD @username varchar(20), @password varchar(20) OUTPUT ...

  6. ExecuteReader在执行有输出参数的存储过程时拿不到输出参数

    异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html 后期会在博客首发更新:http://dnt.dkill.net/Article/D ...

  7. sqlserver 带输出参数的存储过程

    --创建存储过程create procedure proc_stu@sname varchar(20),@pwd varchar(50),@flag bit outputasif exists(sel ...

  8. C#调用存储过程带输出参数或返回值

    CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(8), @studentname nvarchar(50) OUTPUT AS BEGI ...

  9. [转] ADO.NET调用存储过程带输出参数或返回值

    CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(), @studentname nvarchar() OUTPUT AS BEGIN S ...

随机推荐

  1. 常见的CSS和HTML面试题

    1. 常用那几种浏览器测试?有哪些内核(Layout Engine)? 浏览器:IE,Chrome,FireFox,Safari,Opera. 内核:Trident,Gecko,Presto,Webk ...

  2. HBase 官方文档

    HBase 官方文档 Copyright © 2010 Apache Software Foundation, 盛大游戏-数据仓库团队-颜开(译) Revision History Revision ...

  3. 利用Ssocks访问国外网站(yutube/google等)

    ***开源项目:https://github.com/***/ 本例使用的是针对windows系统的c-sharp版本:https://github.com/***/***-windows 运行*** ...

  4. socket消息发送

    expressClient.html <html><head><meta http-equiv="Content-Type" content=&quo ...

  5. Flask07 Jinja2模板测试器、控制语句IF/FOR、变量/块 赋值、作用域、块级作用域

    1 测试器及其使用 在模板中的 {{}} 可以书写测试器,格式如下 {{ 变量 is 测试器名称  }} 1.1 在python中导入 Jinja2 的模板 from jinja2 import te ...

  6. hdu1099

    #include<iostream> using namespace std; __int64 gcd(__int64 a,__int64 b) { return b?gcd(b,a%b) ...

  7. nginx优化配置大全

    由于面试被问到nginx优化做过哪些 后来发现,其实做过的也不少,忘了的更不少,因此写个博客记录一下(里面有一些内容来源于其他作者). 配置文件样例为生产环境样例. 1.nginx基本优化 安装方式有 ...

  8. Leetcode 第136场周赛解题报告

    周日的比赛的时候正在外面办事,没有参加.赛后看了下题目,几道题除了表面要考的内容,还是有些能发散扩展的地方. 做题目不是最终目的,通过做题发现知识盲区,去研究学习,才能不断提高. 理论和实际是有关系的 ...

  9. svg动画 animate

    最近使用到svg的动画animate,简单总结下animate的主要属性: 1.定义:SVG 的animate 动画元素放在形状元素的内部,用来定义一个元素的某个属性如何踩着时点改变.在指定持续时间里 ...

  10. 创建、配置Servlet

    1.创建Servlet 2.选择继承的类及需要覆盖的方法 3.Servlet结构 package com.sysker.servlet; import java.io.IOException; imp ...