数据库复习总结(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 ...
随机推荐
- C# .net中json字符串和对象之间的转化方法
http://blog.csdn.net/xuexiaodong009/article/details/46998069 json作为作为一种最常用的数据,应用很广泛,在.net中如何把一个对象转化为 ...
- Android studio Error:org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection cannot be cast to
http://blog.csdn.net/FlyRabbit_1/article/details/74536317 Error:org.gradle.api.internal.tasks.Defaul ...
- chromedriver与chrome版本映射列表
chromedriver与chrome版本映射列表: chromedriver版本 支持的Chrome版本 v2.30 v58-60 v2.29 v56-58 v2.28 v55-57 v2.27 v ...
- python2中的__init__.py文件的作用
python2中的__init__.py文件的作用: 1.python的每个模块的包中,都必须有一个__init__.py文件,有了这个文件,我们才能导入这个目录下的module. 2.__init_ ...
- 常用base.css
ul { list-style: none;}a { text-decoration: none;} body,h1,h2,h3,h4,h5,h6,p,ul,ol,form { margin: 0; ...
- Hyperledger Fabric 1.0 从零开始(十二)——fabric-sdk-java应用
Hyperledger Fabric 1.0 从零开始(十)--智能合约 Hyperledger Fabric 1.0 从零开始(十一)--CouchDB 上述两章,最近网上各路大神文章云集,方案多多 ...
- ubuntu14.04下部署Tsung
我是在Windows 7下装的虚拟机里部署的Tsung,所以,以下均是在虚拟机下的操作: 1.网络问题必须搞定,见我的另外一篇博文 2.erlang的安装包.Tsung的安装包一一备齐.我用的是tsu ...
- 设计一个有getMin功能的栈(2)
题目: 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. 要求: 1.pop.push.getMin操作的时间复杂度都是O(1) 2.设计的栈类型可以输用现成的栈结构 解答 ...
- Oracle COMMIT语句的处理顺序
Oracle COMMIT语句相信大家都有一定的了解,下面就为您介绍Oracle COMMIT语句的处理步骤,希望对您能有所帮助. Oracle COMMIT语句处理顺序 当事务提交时,Oracle分 ...
- Hexo next博客添加折叠块功能添加折叠代码块
前言 有大段的东西想要放上去,但又不想占据大量的位置.折叠是最好的选择.下面在Hexo的主题上定制添加折叠功能. 本文基于Hexo Next的主题修改.其他主题应该也差不多. 在main.js中添加折 ...