下面小編就為大家分享一篇ADO調用分頁查詢預存程序的執行個體講解,具有很好的參考價值,希望對大家有所協助讓大家更好的使用ADO進行分頁。對ADO感興趣的一起跟隨小編過來看看吧
一、分頁預存程序
----------使用預存程序編寫一個分頁查詢-----------------------set nocount off --關閉SqlServer訊息--set nocount on --開啟SqlServer訊息gocreate proc usp_getMyStudentsDataByPage--輸入參數@pagesize int=7,--每頁記錄條數@pageindex int=1,--當前要查看第幾頁的記錄--輸出參數@recordcount int output,--總的記錄的條數@pagecount int output --總的頁數asbegin--1.編寫查詢語句,把使用者要的資料查詢出來selectt.fid,t.fname,t.fage,t.fgender,t.fmath,t.fclassid,t.fbirthdayfrom (select *,rn=row_number() over(order by fid asc) from MyStudent) as twhere 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 intexec usp_getMyStudentsDataByPage @pagesize=7,@pageindex=4, @recordcount=@rc output,@pagecount=@pc outputprint @rcprint @pc
二、ADO調用預存程序
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.net調用預存程序與調用帶參數的SQL語句的區別。
1>把SQL語句變成了預存程序名稱
2>設定SqlCommand對象的CommandType為CommandType.StoredProcedure
這步本質 就是在 預存程序名稱前面加了個“ exec ”
3>根據預存程序的參數來設定SqlCommand對象的參數。
4>如果有輸出參數需要設定輸出參數的Direction屬性為:Direction=ParameterDirection.Output
四、如果是通過調用Command對象的ExecuteReader()方法來執行的該預存程序,那麼要想擷取輸出參數,必須得等到關閉reader對象後,才能擷取輸出參數。
以上這篇ADO調用分頁查詢預存程序的執行個體講解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援topic.alibabacloud.com。
相關推薦:
解析ADO.NET對SQL Server資料庫執行增刪改查操作詳解
ADO.NET實用執行個體介紹
ADO.NET實現對SQL Server資料庫的操作教程