创建有输出参数的存储过程并在c#中实现DataGridView分页功能
不足之处,欢迎指正!
创建有输出参数的存储过程
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分页功能的更多相关文章
- C# 调用带输入输出参数的存储过程
//调用存储过程执行类似于2//select count(*) from userinfo where username=username and pwd=pwd and grade=grade3// ...
- 用exec调用带有output输出参数的存储过程
用exec调用带有output输出参数的存储过程,想要得到输出参数的值,必须在调用参数后面加output关键字,如: declare @value int exec up_test 2,3,@v ...
- sqlserver 带输出参数的存储过程的创建与执行
创建 use StudentManager go if exists(select * from sysobjects where name='usp_ScoreQuery4') drop proce ...
- Oracle带输入输出参数的存储过程
(一)使用输入参数 需求:在emp_copy中添加一条记录,empno为已有empno的最大值+1,ename不能为空且长度必须大于0,deptno为60. 创建存储过程: create or rep ...
- c#调用带输出参数的存储过程
sql server中编写一个存储过程: CREATE PROCEDURE ProGetPWD @username varchar(20), @password varchar(20) OUTPUT ...
- ExecuteReader在执行有输出参数的存储过程时拿不到输出参数
异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html 后期会在博客首发更新:http://dnt.dkill.net/Article/D ...
- sqlserver 带输出参数的存储过程
--创建存储过程create procedure proc_stu@sname varchar(20),@pwd varchar(50),@flag bit outputasif exists(sel ...
- C#调用存储过程带输出参数或返回值
CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(8), @studentname nvarchar(50) OUTPUT AS BEGI ...
- [转] ADO.NET调用存储过程带输出参数或返回值
CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(), @studentname nvarchar() OUTPUT AS BEGIN S ...
随机推荐
- Eclipse中插件的使用:maven /ant /tomcat
一:使用Eclipse构建Maven项目 http://blog.csdn.net/jackgaolei/article/details/11332249 二:Maven介绍,包括作用.核心概念.用法 ...
- [cf839d]Winter is here容斥原理
题意:给定一个数列${a_i}$,若子序列长度为$k$,最大公约数为$gcd$,定义子序列的权值为$k*\gcd (\gcd > 1)$.求所有子序列的权值和. 答案对10^9+7取模. 解题 ...
- CSS学习系列1 - CSS中的盒子模型 box model
css中有一个盒子模型的概念. 主要是用来告诉浏览器如何来计算页面元素的宽度和高度, 比如该元素的宽度/高度 是否包括内边距,边框,外边距. 盒子模型有一个属性box-sizing属性来说明是否包括 ...
- “MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第五篇(用户管理之“用户权限分配”)
一.在做权限分配之前,首先先了解“ZTree”这个插件,我的这个系统没有用Jquery-EasyUI的Tree.用的是”ZTree“朋友们可以试试,也很强大.点击下载ZTree插件. 1. ...
- CSS类名命名规则
CSS样式命名 说明 网页公共命名 #wrapper 页面外围控制整体布局宽度 #container或#content 容器,用于最外层 #layout 布局 #head, #header 页头部分 ...
- javascript不用正则验证输入的字符串是否为空(包含空格)
在项目中需要验证输入的字符串是否为空,包括空格,不太喜欢使用正则,所以就想到了js的indexOf函数,indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置,如果要检索的字符串值没 ...
- PPT2010学习笔记(共20讲)
第1讲 商务PPT中的必备元素 # 设计需打破规范 第2讲 封面页设计(一) 大图型封面页 # 基础知识点: 插入矩形和圆形 设置半透明色 设置字体变形效果 图片增强工具 利用过渡色虚化图片边缘 ...
- 飘逸的python - 单例模式乱弹
方法一:装饰器 利用“装饰器只会执行一次”这个特点 def singleton(cls): instances = []# 为什么这里不直接为None,因为内部函数没法访问外部函数的非容器变量 def ...
- 《OD大数据实战》Mahout入门实例
一.环境搭建 1. 下载 mahout-0.9-cdh5.3.6.tar.gz 2. 解压 3. mahout org.apache.mahout.clustering.syntheticcontro ...
- 数组API(2)
ES5中数组新增API: 1. indexOf 作用:检测当前数据是否在数组中存在: 特点:如果存在返回相对应的下标,如果不存在则返回-1: 如果数组中存在多个需要判断的这个数据,则返回最近的这个数据 ...