ADO調用分頁查詢存儲過程

来源:http://www.cnblogs.com/hao-1234-1234/archive/2017/12/11/8025559.html
-Advertisement-
Play Games

一、分頁存儲過程 使用存儲過程編寫一個分頁查詢 set nocount off --關閉SqlServer消息 --set nocount on --開啟SqlServer消息 gocreate proc usp_getMyStudentsDataByPage --輸入參數@pagesize int ...


 

一、分頁存儲過程

----------使用存儲過程編寫一個分頁查詢-----------------------
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)  --乘以1.0轉成flot型, 然後celling “進一法”取值
end

 

--調用前定義輸出參數
declare @rc int,@pc int
exec usp_getMyStudentsDataByPage @pagesize=7,@pageindex=4, @recordcount=@rc output,@pagecount=@pc output
print @rc
print @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對象後,才能獲取輸出參數。

 

來源:傳智播客 視頻教程。

ROW_NUMBER() OVER函數的基本用法

https://jingyan.baidu.com/article/9989c74604a644f648ecfef3.html

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 使用過濾器改進應用程式 一、過濾器的目的 過濾器是可以攔截訪問資源的請求、資源的響應或者同時攔截兩者的應用組件。過濾器可以檢測和修改請求和響應,同時也可以拒絕、重定向或轉發請求。javax.servlet.Filter介面實現了過濾器技術,使用HttpServletRequest和HttpServl ...
  • String是最常使用的Java類之一,整理的了一些重要的String知識分享給大家。 作為一個Java新手程式員,對String進行更深入的瞭解很有必要。如果你是有幾年Java開發經驗,可以根據目錄選擇性的閱讀以下內容。 1、什麼是String,它是什麼數據類型? String是定義在 java. ...
  • 作為 Java 書呆子,比起實用技能,我們會對介紹 Java 和 JVM 的概念細節更感興趣。因此我想推薦 Lukas Eder 在 jooq.org 發表的原創作品給大家。 你是從很早開始就一直使用 Java 嗎?那你還記得它的過去嗎?那時,Java 還叫 Oak,OO 還是一個熱門話題,C++ ...
  • - 服務端軟體 - socket服務端 - 本地文件操作 - 解析指令【SQL語句】 - 客戶端軟體(各種各樣) - socket客戶端 - 發送指令 - 解析指令【SQL語句】 上述提到MySQL等軟體可以接受命令,並做出相應的操作,由於命令中可以包含刪除文件、獲取文件內容等眾多操作,對於編寫的命 ...
  • 相信每個小伙伴在使用laravel的時候都會記錄日誌、查看日誌。那麼問題來了,比如我在對接zabbix介面的時候,使用 Log::info() 會讓日誌全部記錄在 storage/logs/laravel.log 文件里,查找起來比較麻煩。那麼我可不可以單獨記錄在一個日誌文件里呢? laravel文 ...
  •   hashCode和equals方法是Object類的相關方法,而所有的類都是直接或間接的繼承於Object類而存在的,為此,所有的類中都存在著hashCode和equals。通過翻看Object類的相關源碼,發現其hashCode的實現方式如下:   從中 ...
  • 本篇是為項目實戰做準備,學習Linux是必備的,不然都不好意思叫全棧對吧?下麵是一位資深大神寫的文章,夠詳細,我也不用浪費時間再寫了 原文鏈接:Ubuntu學習——第一篇 內容: 一、 Ubuntu簡介 Ubuntu(烏班圖)是一個基於Debian的以桌面應用為主的Linux操作系統,據說其名稱來自 ...
  • OpenXml讀取word內容註意事項 1、使用OpenXml讀取word內容,word尾碼必須是".docx";如果word尾碼是".doc"需要轉成".docx"後,才可以讀取; 2、需要引入相關dll;"WindowsBase.dll"、“DocumentFormat.OpenXml.dll” ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...