c#中如何执行存储过程
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace 使用存储过程
{
using System.Data.SqlClient;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string connStr = "Data Source=.;Initial Catalog=MySchoolMoreData;Integrated Security=True"; #region 调用没有参数的存储过程 +void btnNoPARAMAS_Click(object sender, EventArgs e)
/// <summary>
/// 调用没有参数的存储过程
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnNoPARAMAS_Click(object sender, EventArgs e)
{
//SqlDataAdapter da = new SqlDataAdapter("select * from Student", connStr);
SqlDataAdapter da = new SqlDataAdapter("usp_getAllStuInfo", connStr);
DataTable dt = new DataTable();
da.Fill(dt);
this.dgvList.DataSource = dt;
}
#endregion #region 调用有输入参数的存储过程 +void btnHasParamas_Click(object sender, EventArgs e)
/// <summary>
/// 调用有输入参数的存储过程
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnHasParamas_Click(object sender, EventArgs e)
{
SqlDataAdapter da = new SqlDataAdapter("usp_getStuInfoBySexAndCname", connStr);
//1.如果传入了存储过程,必须告诉服务器按存储过程进行处理,否则就会按sql语句进行处理
da.SelectCommand.CommandType = CommandType.StoredProcedure;
//2.创建存储过程中所需要的参数,注意:名称必须与存储过程的参数名称对应
SqlParameter[] ps = {
new SqlParameter("@cname",this.cboClass.Text),//Text获取显示在下拉列表控件中的文本值
new SqlParameter("@Sex",rdoMale.Checked?"男":"女")
};
//3.将参数传递给服务器使用
da.SelectCommand.Parameters.AddRange(ps);
DataTable dt = new DataTable();
da.Fill(dt);
this.dgvList.DataSource = dt;
}
#endregion #region 加载班级下拉列表数据和Dgv控件的分页数据 +void Form1_Load(object sender, EventArgs e)
/// <summary>
/// 加载班级下拉列表数据和Dgv控件的分页数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Load(object sender, EventArgs e)
{
#region 加载下拉列表数据
SqlDataAdapter da = new SqlDataAdapter("select classid ,classname from classes where classid<@num", connStr);
SqlParameter p = new SqlParameter("@num", );
SqlParameter p2 = new SqlParameter("@num2", );
da.SelectCommand.Parameters.Add(p2);
da.SelectCommand.Parameters.Add(p);
DataTable dt = new DataTable();
da.Fill(dt);
this.cboClass.DisplayMember = "classname";
this.cboClass.ValueMember = "classid";
this.cboClass.DataSource = dt;
#endregion LoadDgvData();
}
#endregion int pageIndex = ; //当前页索引
//int pageCount = 5; #region 调用带输出参数和返回值的存储过程 +void btnOutput_Click(object sender, EventArgs e)
/// <summary>
/// 调用带输出参数和返回值的存储过程
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnOutput_Click(object sender, EventArgs e)
{
SqlDataAdapter da = new SqlDataAdapter("usp_GetCountByCnameAndSex", connStr);
//1.如果传入了存储过程,必须告诉服务器按存储过程进行处理,否则就会按sql语句进行处理
da.SelectCommand.CommandType = CommandType.StoredProcedure;
//2.创建存储过程中所需要的参数,注意:名称必须与存储过程的参数名称对应
SqlParameter[] ps = {
new SqlParameter("@cname",this.cboClass.Text),//Text获取显示在下拉列表控件中的文本值
new SqlParameter("@Sex",rdoMale.Checked?"男":"女"),
//创建输出参数的时候,没有必要赋值
//创建一个输出参数,服务器最终将输出参数的值返回到这个参数对象的Value属性中
new SqlParameter("@totalCount",),
new SqlParameter("@cnt",SqlDbType.Int),
new SqlParameter("@result",SqlDbType.Int)
};
//3.一定要修改输出参数的方向,否则服务器会将所有参数当成输入参数进行处理,需要客户端传入值,如果没有就报错
ps[].Direction = ParameterDirection.Input;//默认就是input,不设置也没有关系
//ps[2].Direction = ParameterDirection.Output;//设置参数的方向为输出参数
//指定方向,是向服务器发送返回对应类型输出参数或者返回值的请求
ps[].Direction = ParameterDirection.Output;
ps[].Direction = ParameterDirection.ReturnValue;
//3.将参数传递给服务器使用
da.SelectCommand.Parameters.AddRange(ps);
DataTable dt = new DataTable();
da.Fill(dt);
this.dgvList.DataSource = dt;
this.lblMsg.Text = "总人数是:" + ps[].Value + ",指定性别的人数是:" + ps[].Value + ",返回值是:" + ps[].Value;
}
#endregion #region 下一页 + void btnNext_Click(object sender, EventArgs e)
/// <summary>
/// 下一页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnNext_Click(object sender, EventArgs e)
{
if (pageIndex.ToString() == System.Configuration.ConfigurationManager.AppSettings["totalPageCount"])
{
MessageBox.Show("没有下一页了");
return;
}
pageIndex++;
LoadDgvData();
}
#endregion #region 获取分页数据 +void LoadDgvData()
/// <summary>
/// 获取分页数据
/// </summary>
private void LoadDgvData()
{
string count = System.Configuration.ConfigurationManager.AppSettings["pageCount"];
SqlParameter[] ps ={
new SqlParameter("@pageIndex",pageIndex),
new SqlParameter("@pageCount",count),
new SqlParameter("@totalPageCount",SqlDbType.Int)
};
ps[].Direction = ParameterDirection.Output;//修改参数的方法为输出参数--发送请求
this.dgvList.DataSource = SqlHelper.ExecuteTable("usp_getPageData", CommandType.StoredProcedure, ps);
System.Configuration.ConfigurationManager.AppSettings["totalPageCount"] = ps[].Value.ToString();
}
#endregion #region 上一页 +void btnPre_Click(object sender, EventArgs e)
/// <summary>
/// 上一页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnPre_Click(object sender, EventArgs e)
{
if (pageIndex == )
{
MessageBox.Show("没有上一页了");
return;
}
pageIndex--;
LoadDgvData();
}
#endregion
}
}
c#中如何执行存储过程的更多相关文章
- Oracle中执行存储过程call和exec区别
Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...
- Java中执行存储过程和函数(web基础学习笔记十四)
一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. CallableStatement 接口继承自PreparedStatement 接口.所以CallableS ...
- 在asp.net中执行存储过程(转)
摘自:http://www.cnblogs.com/smhy8187/articles/677742.html 声明:本例用的数据库是系统提供的pubs数据库,表是是employee,编程语言用C# ...
- Java中执行存储过程和函数
装载于:http://www.cnblogs.com/liunanjava/p/4261242.html 一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. Ca ...
- 在SQL Server数据库中执行存储过程很快,在c#中调用很慢的问题
记录工作中遇到的问题,分享出来: 原博客地址:https://blog.csdn.net/weixin_40782680/article/details/85038281 今天遇到一个比较郁闷的问题, ...
- EFCore 中执行存储过程返回DataSet DataTable
在项目中由于需求,需要返回复杂的数据,需要执行存储过程,但是在DONETCORE2.0中,看官网文档执行的sql的有点操蛋,满足不了需求,就想到了ADO.NET 于是找资料,也没有合适的,就动手自己封 ...
- EF中执行存储过程,获取output返回值
EF不能直接支持执行存储过程,于是使用转化成执行SQL语句的形式,却怎么也获取不到output的值,折腾的好久,终于解决了,分享下曲折的经历: public int AddVote(int title ...
- JDBC连接数据库中CallableStatement执行有参存储过程及注解其他
Oracle的建有参存储过程的过程 procedure pro_01(v_01 in number,v_02 out varchar2) as begin select name into v_02 ...
- shell 中执行Oracle查询和执行存储过程
[oracle@master2 test]$ more b.sh #!/bin/sh #数据库地址 ip=192.168.1.250 port sid=orcl username=c##scott p ...
随机推荐
- http学习笔记(三)
几乎所有的http通信都是由TCP/IP承载的.http好比一辆汽车,而TCP是一条公路,所有的汽车都要在公路上跑,看看http是如何在tcp这条公路上往返的. 首先简单地看看tcp,TCP连接是通过 ...
- 手把手教你用python打造网易公开课视频下载软件4-图形化界面
上一篇讲解完函数:def getdownLoadInfo (url): 传入公开课的url地址,就可以提取课程的信息,这一篇讲解一下如何编写图像化界面.大概思考一下图像化界面需要的内容: (1)一个标 ...
- Repeater绑定数组并显示其值
web开发中,尤其是对于数据展示,不得不说Repeater是一个万能的控件,而且使用也很方便. 在ASP.NET中将数组绑定到Repeater中请问如何在Repeater前台页面中显示该数组的值? s ...
- css 常见时间轴的做法(————————————————时间轴——————————————————)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Redis服务器的启动过程分析
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/127.html?1455808771 本文将通过分析代码来介绍Redis的 ...
- Redis 监控
redis 监控有 redis-live 和 redis-stat Redis-Live是一个用来监控redis实例,分析查询语句并且有web界面的监控工具,使用python编写. redis-sta ...
- salesforce 零基础开发入门学习(十三)salesforce中JSON的使用
JSON作为一种目前流行的轻量级数据交换格式,salesforce也对其有良好的类对其进行封装处理.salesforce中前后台交互时,使用JSON可以将apex的Object对象进行序列化和反序列化 ...
- iOS-----用LLDB调试,让移动开发更简单(二)
image lookup –address 当我们有一个地址,想查找这个地址具体对应的文件位置,可以使用image lookup --address,简写为image lookup -a e.g: 当 ...
- Asp.Net实现无刷新文件上传并显示进度条(非服务器控件实现)(转)
Asp.Net实现无刷新文件上传并显示进度条(非服务器控件实现) 相信通过Asp.Net的服务器控件上传文件在简单不过了,通过AjaxToolkit控件实现上传进度也不是什么难事,为什么还要自己辛辛苦 ...
- C++标准库vector类型详解
Vector简介 vector是定义在C++标准模板库,它是一个多功能.能够操作多种数据结构和算法的模板类(关于模板类我们后面会介绍,如何创建自己的模板类).vector是一个容器,能够像容器一样存放 ...