C# 调用带有输出参数的分页存储过程

一、创建带有输出参数的分页存储过程

 1 use StudentMISDB
 2 go
 3 select * from Course
 4 alter table Course
 5     add IsDelete int not null default 0
 6 go
 7 select * from Course where IsDelete=1
 8
 9 --update Course  set IsDelete=0
10
11 ---循环 添加数据
12 --declare @index int
13 --set @index =0
14 --while(@index<2)
15 --begin
16 --    insert into Course select Name,ByName,IsDelete from Course
17 --    set @[email protected]+1;
18 --end
19
20 --分页 显示 第 11 到20条的数据
21
22 select * from(select ROW_NUMBER() over(order by courseId)as rowNUM, * from Course
23 where IsDelete=0)as temp
24 where rowNUM>=11 and rowNUM<=20
25
26 select count(1)as rowRount  from Course where IsDelete=0
27
28                 --pageIndex 从 0 开始
29                 --pageSize  每页显示的数据条数【10 条】
30                 --((pageIndex) *pageSize)+1      (pageIndex * pageSize)+pageSize
31                 --11                           20
32
33                 --总页数 pageCount = 总的记录/pageSize
34 ---分页的 要素:1.当前 页码   pageIndex
35             --2. 每一页的 容量 pageSize
36             --3. 总条数   count
37             --4. 总页数   pageCount=count/pageSize
38
39 --创建分页的存储过程
40 create proc Proc_GetPageData
41     @pageIndex int,
42     @pageSize int,
43     @rowCount int out,
44     @pageCount int out
45 as
46     begin
47     select * from(select ROW_NUMBER() over(order by courseId)as rowNUM, * from Course where IsDelete=0)as temp
48                 where rowNUM>(@pageIndex*@pageSize) and rowNUM<= (@pageIndex*@pageSize+@pageSize)
49
50     select  @rowCount =count(1) from Course where IsDelete=0
51     set @pageCount=@rowCount/@pageSize
52     end
53 go
54
55 declare @pageIndex int,
56     @pageSize int,
57     @rowCount int,
58     @pageCount int
59
60 --select @pageIndex=3,@pageSize=10
61 exec Proc_GetPageData @pageIndex,@pageSize,@rowCount out,@pageCount out
62 --select @rowCount,@pageCount
63
64
65
66 select * from Students
67 go

二、在C#中对存储过程进行调用,并且进行参数化和断开式连接查询,并利用DataGridView插件将结果显示在窗体中.

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Threading.Tasks;
 9 using System.Windows.Forms;
10 using System.Data.SqlClient;
11
12 namespace  Demo01
13 {
14     public partial class UseSaveProcess : Form
15     {
16         public UseSaveProcess()
17         {
18             InitializeComponent();
19         }
20
21         private void Form1_Load(object sender, EventArgs e)
22         {
23             //数据库连接字符
24             string connstring = "server=.;database=StudentMISDB;uid=sa;pwd=123456";
25             //连接数据库
26             SqlConnection conn = new SqlConnection(connstring);
27             //调用存储过程
28             string sql = "Proc_GetPageData";
29             //定义参数
30             SqlParameter[] parameter = new SqlParameter[] {
31                 new SqlParameter("@pageIndex",SqlDbType.Int),
32                 new SqlParameter("@pageSize",SqlDbType.Int),
33                 new SqlParameter("@rowCount",SqlDbType.Int),
34                 new SqlParameter("@pageCount",SqlDbType.Int)
35             };
36             //给参数赋值
37             parameter[0].Value = 1;
38             parameter[1].Value = 10;
39             //标明输出参数
40             parameter[2].Direction = ParameterDirection.Output;
41             parameter[3].Direction = ParameterDirection.Output;
42             //执行命令
43             SqlCommand cmd = new SqlCommand(sql,conn);
44             //声明SQL语句是存储过程
45             cmd.CommandType = CommandType.StoredProcedure;
46             //添加参数
47             cmd.Parameters.AddRange(parameter);
48             //断开式连接查询
49             SqlDataAdapter adapter = new SqlDataAdapter(cmd);
50             //建立数据集(缓冲区)
51             DataSet ds = new DataSet();
52             conn.Open();
53             adapter.Fill(ds);
54             conn.Close();
55             //绑定数据源
56             this.dataGridView1.DataSource = ds.Tables[0];
57             //显示在下方的lable中
58             int rowcount = Convert.ToInt32(parameter[2].Value);
59             int pagecoun = Convert.ToInt32(parameter[3].Value);
60             this.label1.Text = "总共有" +rowcount+"条数据,共有" +pagecoun+"页";
61         }
62     }
63 }

时间: 2024-10-08 16:37:20

C# 调用带有输出参数的分页存储过程的相关文章

sql server 带输入输出参数的分页存储过程(效率最高)

create procedure proc_page_withtopmax ( @pageIndex int,--页索引 @pageSize int,--每页显示数 @pageCount int output,--总页数,输出参数 @totalCount int output--总条数 ) as begin set nocount on; declare @sql nvarchar(1000) set @sql='select top 10 * from tb_testtable where (

oracle pl/sql之在java中调用带有输入输出参数的oracle存储过程

只需注意一点输出参数是用CallableStatement里面的registerOutParameter方法注册进去 存储过程: import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException;import java.sql.Types; //在java中

java Servlet+mysql 调用带有输入参数和返回值的存储过程(原创)

这个数据访问的功能,我在.NET+Mysql .NET+Sqlserver  PHP+Mysql上都实现过,并且都发布在了我博客园里面,因为我觉得这个功能实在是太重要,会让你少写很多SQL语句不说,还能提高程序的执行效率, 今天在JAVA+Mysql上也实现了这个功能下面我贴出代码,这次我会讲详细点,让看的朋友能更加清楚它的好处在哪里. 一.封装的代码存储过过程调用方法   关于返回类CallableStatement的解释: CallableStatement 对象为所有的DBMS 提供了一种

Hibernate调用带有输入参数,输出参数为cursor的存储过程

一.Oracle创建表及存储过程 1.创建表T_MONITOR_DEVICE 创建后的表结构 2.创建存储过程 create or replace procedure ProcTestNew(v_monitordeviceid in number,curdata out sys_refcursor ) As begin open curdata for select ID, IP,PORT from T_MONITOR_DEVICE where id=v_monitordeviceid;--带参

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

sql server中编写一个存储过程: CREATE PROCEDURE ProGetPWD @username varchar(20), @password varchar(20) OUTPUT AS BEGIN SELECT @password = password FROM Users WHERE username = @username END -------------------------- 下面是.NET中调用存储过程的方法: string strConnection = "u

C#与matlab参数调用(输出参数为两个不同类型的数组)

int L1 = 150; Class1 Coverage = new Coveragefunction2.Class1(); MWArray[] array = null; array = Coverage.Coveragefunction2(2, W1, L1);//(n,input1,input2,...inputm)输出n个矩阵,输入为m个矩阵 MWNumericArray a1 = null; MWNumericArray a2 = null; a1 = (MWNumericArray

创建有输出参数的存储过程并在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_N

【Mybatis】MyBatis调用带有返回结果、output参数的存储过程上与ibatis的区别

用过mybatis的应该都知道它是ibatis被Google收购后重新命名的一个工程,因此也做了大量升级.本文就来介绍下两者在调用存储过程上的一点区别,ibatis有一个专门的标签<procedure>,在mybatis里面已经没有这标签了,而是通过一个参数statementType="CALLABLE"来区分. 存储过程: ALTER PROCEDURE [dbo].[Pro_Create_Number] @ChannelNo VARCHAR(10) ,--渠道号 @Nu

如此高效通用的分页存储过程是带有sql注入漏洞的

原文:如此高效通用的分页存储过程是带有sql注入漏洞的 在google中搜索“分页存储过程”会出来好多结果,是大家常用的分页存储过程,今天我却要说它是有漏洞的,而且漏洞无法通过修改存储过程进行补救,如果你觉得我错了,请读下去也许你会改变看法. 通常大家都会认为存储过程可以避免sql注入的漏洞,这适用于一般的存储过程,而对于通用分页存储过程是不适合的,请看下面的代码和分析! 一般的通用的分页存储过程代码如下: 通用分页存储过程CREATE PROCEDURE pagination@tblName