数据库复习总结(20)-存储过程以及.net调用存储过程
一、存储过程(注意区分将一段select语句进行封装叫做视图)
(1)将一段t-sql脚本进行封装,以完成一个逻辑操作
(2)创建存储过程:
create proc 名称
参数列表
as
begin
...
end
(3)调用:exec 名称 参数列表
(4)可以将参数指定为输出:output,调用时也需要加上output关键字
(5)在ado.net中调用存储过程


--' abc ' 'abc'去掉空格
declare @temp varchar(10)
set @temp=' abc '
select LTRIM(RTRIM(@temp)) --创建存储过程
create proc trim1
@str1 varchar(10)
as
begin
select LTRIM(RTRIM(@str1))
end --执行存储过程'abc'
exec trim1 ' abc '

--编写存储过程,查询表中的总数据,及当前页的数据
--pageindex,pagesize
create proc GetPageList--create/alter/drop
@pageIndex int,
@pageSize int,
@rowsCount int output
as
begin
SET NOCOUNT ON;--不会提示有几行受影响
select @rowsCount=COUNT(*) from StudentInfo where IsDelete=0 select * from
(select *,ROW_NUMBER() over(order by sid desc) as rowIndex
from StudentInfo where IsDelete=0) as t1
where rowindex between (@pageIndex-1)*@pageSize+1 and @pageIndex*@pageSize
end --执行
declare @temp int
exec GetPageList 1,2,@temp output
print @temp


二、.net调用存储过程
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles; namespace t1_ProcTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private int pageIndex,pageSize;
private void Form1_Load(object sender, EventArgs e)
{
pageIndex = ;//设置默认是第一页
pageSize = ;
LoadList();
} private void LoadList()
{
string sql = "GetPageList";//存储过程的名称 SqlParameter pCount = new SqlParameter("@rowsCount", SqlDbType.Int);
pCount.Direction = ParameterDirection.Output;//将参数设置为输出 using (SqlConnection conn = new SqlConnection("server=.;database=dbtest;uid=sa;pwd=123"))
{
SqlCommand cmd=new SqlCommand(sql,conn);
//指定命令类型为存储过程
cmd.CommandType = CommandType.StoredProcedure; //根据存储过程来构造参数
SqlParameter pIndex=new SqlParameter("@pageIndex",pageIndex);
SqlParameter pSize = new SqlParameter("@pageSize",pageSize); //为cmd添加参数
cmd.Parameters.Add(pIndex);
cmd.Parameters.Add(pSize);
cmd.Parameters.Add(pCount); conn.Open();
SqlDataReader reader = cmd.ExecuteReader(); List<StudentInfo> list=new List<StudentInfo>();
while (reader.Read())
{
list.Add(new StudentInfo()
{
Sid = Convert.ToInt32(reader["sid"]),
SName = reader["sname"].ToString()
});
} dataGridView1.DataSource = list; }
//当整个操作执行完成后,连接关闭了,再去获取参数的返回值
txtCount.Text = pCount.Value.ToString();
} private void 上一页ToolStripMenuItem_Click(object sender, EventArgs e)
{
pageIndex--; if (pageIndex < )
{
pageIndex = ;
} LoadList();
} private void 下一页ToolStripMenuItem_Click(object sender, EventArgs e)
{
pageIndex++; int rowsCount = int.Parse(txtCount.Text);
//1.1
//计算总页数
//天花板函数(向上取整,注意整数除以整数还是整数天花板函数不能用了,所以先要让其变成浮点数)
int pageCount = (int) Math.Ceiling(rowsCount*1.0/pageSize);
//修正页索引,不能超出总页数
if (pageIndex > pageCount)
{
pageIndex = pageCount;
} LoadList();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace t1_ProcTest
{
public partial class StudentInfo
{
public int Sid { get; set; }
public string SName { get; set; }
}
}
数据库复习总结(20)-存储过程以及.net调用存储过程的更多相关文章
- Oracle数据库基本操作 (五) —— 使用java调用存储过程
一.环境准备 登录Oracle数据库scott账号,利用emp进行操作. 1.创建 proc_getyearsal 存储过程 -- 获取指定员工年薪 create or replace procedu ...
- Java和Ibatis调用存储过程并取得返回值详解
Java和Ibatis调用存储过程并取得返回值详解 2011-07-19 17:33 jiandanfeng2 CSDN博客 字号:T | T 本文主要介绍了Java和Ibatis调用存储过程的方法, ...
- IBatis.Net使用总结(四)-- IBatis 调用存储过程
IBatis 调用存储过程 http://www.cnblogs.com/jeffwongishandsome/archive/2010/01/10/1543219.html http://www.c ...
- [转]Oracle 调用存储过程并显示结果集 Oracle.DataAccess.Client OracleDbType.RefCursor
本文转自:http://liye9801.blog.163.com/blog/static/6019703200901244448950/ 今天学习了一个Oracle中的存储过程,一开始便被如果返回结 ...
- 【Java EE 学习 29 下】【JDBC编程中操作Oracle数据库】【调用存储过程的方法】
疑问:怎样判断存储过程执行之后返回值是否为空. 一.连接oracle数据库 1.需要的jar包:在安装的oracle中就有,所以不需要到官网下载,我的oracle11g下:D:\app\kdyzm\p ...
- [转] sql server 跨数据库调用存储过程
A库存储过程: create PROCEDURE [dbo].[spAAAForTest] ( ) =null , ) =null ) AS BEGIN select N'A' AS a , N'B' ...
- sql server 跨数据库调用存储过程
A库存储过程: create PROCEDURE [dbo].[spAAAForTest] ( ) =null , ) =null ) AS BEGIN select N'A' AS a , N'B' ...
- sql server service broker中调用存储过程执行跨库操作,不管怎么设置都一直提示 服务器主体 "sa" 无法在当前安全上下文下访问数据库 "dbname"。
用sql server自带的消息队列service borker,调用存储过程中,执行了一个跨库的操作,先是用了一个用户,权限什么都给够了,但是一直提示 服务器主体 "user" ...
- Java操作Oracle数据库以及调用存储过程
操作Oracle数据库 publicclass DBConnection { //jdbc:oracle:thin:@localhost:1521:orcl publicstaticf ...
随机推荐
- Struts2内部执行过程
首先是Struts2的流程图. 一.当有一个请求的时候.执行以下流程. 1 客户端初始化一个指向Servlet容器的请求: 2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做Act ...
- HTML与HTML5复习标签汇总
按字母顺序排列 New : HTML5 中的新标签. 标签 描述 <!--...--> 定义注释. <!DOCTYPE> 定义文档类型. <a> 定义锚. < ...
- BinderPool — Andorid端的“服务发现治理工具”
导语 最近在学习微服务相关知识,突然想到:微服务的思想虽然是在server端的场景下提出来的,但是无论是server,还是移动端,思想是相通的,移动端也会有多服务的场景,就同样面临多服务需要整合治理的 ...
- 关于Bitcoin的分叉之路
今年对与bitcoin来讲是不平凡的一年,它经历了价格的暴涨.腰斩和再次暴涨,对于这些现象背后的利益博弈网上分析的文章很多,我就不再赘述了.我们从技术的角度上分析一下bitcoin的发展历程,同时预测 ...
- Mtklog 分析(学习)
常见log异常类型: JE NE KE EE(external(modem) exception) 一.常见应用异常搜索关键信息 1. 常见应用crash的(系统提示***已停止运行) ,可以在ma ...
- python3之异常处理,断言和反射
1.异常基础 python在运行过程中,程序解释机制会测试代码,如检测不通过则会抛出异常. try: aa = 10 bb = ' cc = aa + bb except Exception as e ...
- python 数据类型之集合
一.集合的定义: 定义:由不同元素组成的集合,集合中是一组无序排列的可hash值,可以作为字典的key. 特性:集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值 二 ...
- 一次关于js事件出发机制反常的解决记录
起因:正常情况下我点击s2时是先弹出我是children,再弹出我是father,但是却出现了先弹出我是father,后弹出我是children的情况,这种情况是在和安卓app交互的h5页面中出现的, ...
- (转)Docker之Compose服务编排
转自:https://www.cnblogs.com/52fhy/p/5991344.html Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过 ...
- HDU6166-Senior Pan-Dijkstra迪杰斯特拉算法(添加超源点,超汇点)+二进制划分集合-2017多校Team09
学长好久之前讲的,本来好久好久之前就要写题解的,一直都没写,懒死_(:з」∠)_ Senior Pan Time Limit: 12000/6000 MS (Java/Others) Memor ...