C# 调用带输入输出参数的存储过程
//调用存储过程执行类似于
2//select count(*) from userinfo where username=username and pwd=pwd and grade=grade
3//接受 3个参数分别用来表示用户名、用户密码、用户权限
4public bool GetUserinfo(string username,string pwd,string grade)
5 {
6 //获取连接字符串
7 private bool connstring = ConfigurationManager.ConnectionStrings["connstring"].Tostring;
8 int n = 0;//查询后返回的行数保存存储过程中的输出参数
9 //创建连接对象 using代码片段好处在于离开作用域后立刻从内存中释放对象
10 using (SqlConnection con=new SqlConnection(connstring))
11 {
12 con.Open();//打开数据库连接
13 using (SqlCommand cmd=new SqlCommand("proc_userinfo",con))
14 {
15 //什么作用不记得了只记得调用存储过程该语句不能少
16 cmd.CommandType = CommandType.StoredProcedure;
17 //添加存储过程输入输出参数类型及输入参数值
18 cmd.Parameters.Add("@username", SqlDbType.VarChar, 50).Value=username;
19 cmd.Parameters.Add("@pwd", SqlDbType.VarChar, 50).Value=pwd;
20 cmd.Parameters.Add("@grade", SqlDbType.VarChar, 50).Value=grade;
21 cmd.Parameters.Add("@count", SqlDbType.Int);
22 cmd.Parameters["@username"].DbType = DbType.String;
23 //指定参数类型是输入参数还是输出参数
24 cmd.Parameters["@username"].Direction = ParameterDirection.Input;
25 cmd.Parameters["@pwd"].DbType = DbType.String;
26 //指定参数类型是输入参数还是输出参数
27 cmd.Parameters["@pwd"].Direction = ParameterDirection.Input;
28 cmd.Parameters["@grade"].DbType = DbType.String;
29 //指定参数类型是输入参数还是输出参数
30 cmd.Parameters["@grade"].Direction = ParameterDirection.Input;
31 cmd.Parameters["@count"].DbType = DbType.Int32;
32 //指定参数类型是输入参数还是输出参数
33 cmd.Parameters["@count"].Direction = ParameterDirection.Output;
34 //执行存储过程 此处类似于查询语句
35 cmd.ExecuteScalar();
36 //接受执行存储过程后的返回值
37 n = (int)cmd.Parameters["@count"].Value;
38 //根据返回值判断数据库中是否存在对应用户名密码及用户权限的记录
39 if (n==1)
40 {
41 return true;
42 }
43 else
44 {
45 return false;
46 }
47 }
48 }
49 }
至于业务逻辑层及表示层这里就不做介绍了,想必大家都知道该如何写了.
注:这里补充点有关清空DataGradeView中所有数据de思路方法
Code
1//用dataGradeView.DataSource dataGradeView的数据源创建一个DataTable 对象 需要强转成DataTable
2
3 DataTable dt=(DataTable )dataGradeView.DataSource;
4 //dataGradeView为具体的dataGradeView
5
6 dt.Rows.Clean(); //删除表中的行
7
8 dataGradeView.DataSource=dt;
9//再把dt绑定到dataGradeView上即可
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
sql语句执行的时候要先编译,然后执行。存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
优点:
允许模块化程序设计,只需创建一次存储过程,并将其存储在数据库中,以后可在程序中调用该过程任意次
执行效益高
减少网络流量
可保证数据的安全性和完整性
分类:
系统存储过程 以sp_开头并存放在master数据库中
扩展存储过程 以xp_开头
用户自定义存储过程 用户自己定义
这里重点介绍用户自定义存储过程
自定义存储过程又分为两种:带参数的存储过程及不带参数的存储过程
带参数的存储过程又分为:带输入参数的存储过程和带输出参数的存储过程
存储过程语法规则:
create proc[edure](关键字,中括号内为可选内容) procName(存储过程名字)
@参数 数据类型=默认值, (输入参数)
@参数 数据类型 output(输出参数必须加上output)
as
sql语句
go
删除存储过程
创建的存储过程位于sysobjects表中
if exists(select * from sysobjects where name='存储过程名字')
drop proc 存储过程
go
存储过程执行使用关键字exec
执行无参存储过程
exec 存储过程名
执行输入参数存储过程
如:
exec 存储过程 参数值
执行输出参数的存储过程要求定义变量用来接受存储过程的返回值
declare @count int (数据类型需和存储过程中输出参数类型一致)
exec 存储过程 输出参数 output (output不能少)
print 输出参数 (用于显示输出参数)
创建无参的存储过程
查询student表中所有记录
if exists(select * from sysobjects where name='proc_select')
drop proc proc_select
go
create proc proc_select
as
select * from student
go
执行存储过程
exec proc_select 效果类似于 select * from student
创建带输入参数的存储过程
比如根据用户名查询用户密码
if exists(select * from sysobjects where name='proc_username')
drop proc proc_username
go
create proc proc_username
@username varchar(50)
as
select pwd from userinfo where username=@username
执行存储过程:
exec proc_username admin (或@username=admin)
创建带输出参数的存储过程执行时需要自定义一个变量用来接受存储过程返回的值
比如查询userinfo表中有多少条记录
if exists(select * from sysobjects where name='proc_num')
drop proc proc_num
go
create proc proc_num
@count int output (output不能少,不能赋默认值)
as
select @count=count(*) from userinfo
go
执行存储过程
declare @n int
exec proc_num @n output (output不能少)
go
print @n 显示表中有多少条记录
注:定义参数时多个参数间用逗号隔开而不是分号最后一个参数逗号可省略
C# 调用带输入输出参数的存储过程的更多相关文章
- c#调用带输出参数的存储过程
sql server中编写一个存储过程: CREATE PROCEDURE ProGetPWD @username varchar(20), @password varchar(20) OUTPUT ...
- Oracle带输入输出参数的存储过程
(一)使用输入参数 需求:在emp_copy中添加一条记录,empno为已有empno的最大值+1,ename不能为空且长度必须大于0,deptno为60. 创建存储过程: create or rep ...
- sql server 带输入输出参数的分页存储过程(效率最高)
create procedure proc_page_withtopmax( @pageIndex int,--页索引 @pageSize int,--每页显示数 @pageCount int out ...
- 用exec调用带有output输出参数的存储过程
用exec调用带有output输出参数的存储过程,想要得到输出参数的值,必须在调用参数后面加output关键字,如: declare @value int exec up_test 2,3,@v ...
- Oracle使用jdbc调用带游标参数的存储过程
package com.jckb.procedure; import java.sql.CallableStatement; import java.sql.Connection; import ja ...
- 创建有输出参数的存储过程并在c#中实现DataGridView分页功能
不足之处,欢迎指正! 创建有输出参数的存储过程 if exists(select * from sysobjects where name='usp_getPage1') drop procedure ...
- C#中调用存储过程:带输入输出参数
using (SqlConnection conn = new SqlConnection(this.GetConnectionString(this.WMPDBName))) { SqlComman ...
- C# 调用带有输出参数的分页存储过程
一.创建带有输出参数的分页存储过程 use StudentMISDB go select * from Course alter table Course go --update Course set ...
- c#调用Mysql带参数的存储过程
1.首先创建一个带参数的存储过程 ①存储过程名称=proc_bookinfo ②存储过程2个参数 一个in 一个out in参数名称=ispay out参数名称=unPaycount ③ 这个存储过 ...
随机推荐
- python中django的第一课
今天找遍了,PYTHON项目中的文件,也没发现后台管理的这些页面去哪里修改 原来在pycharm中的外部库中,查找django,最终找到 $python\django\django\contrib\a ...
- Rhythmk 一步一步学 JAVA(4):Spring MVC -之拦截器
1.实现拦截器类(myInterceptor): package com.rhythmk.Interceptor; import javax.servlet.http.HttpServletReque ...
- 「小程序JAVA实战」springboot的后台搭建(30)
转自:https://idig8.com/2018/08/27/xiaochengxujavashizhanspringbootdehoutaidajian30/ 做了多年的开发,原来很多项目都是一个 ...
- django -- 内置分页
urls.py from django.conf.urls import url from conn_oracle import views urlpatterns = [ url(r'^page/' ...
- GitHub从注册到使用
GitHub是最流行的代码库,里面存储着丰富的优秀的开源代码,不仅如此,作为一款免费的代码存储利器也是很牛逼,支持各种编程语言,代码显示效果堪称完美,可以随时随地查看自己记录的笔记 GitHub的好处 ...
- FreeSWITCH 启用多域(多租户)的配置
如果将FreeSWITCH用于云端, 支持大规模并发呼叫, 就要用到 多域/多租户 技术了, FreeSWITCH 本身可以直接支持. 每个域可以单独, 拥有相同的分机号也互相打不通, 各自线路, I ...
- DDA算法
[DDA算法] Digital Differential Analyzer,DDA算法是一种线段扫描转换算法.(线段光栅化算法) DDA算法优缺点: 1.消除了直线方程中的乘法计算,而在x.y方向使用 ...
- HBase、HDFS与本地文件系统之间的关系
一.文件系统 1. 概念 所谓文件系统,是操作系统用于明确磁盘或分区上的文件的方法和数据结构:即在磁盘上组织文件的方法.也指用于存储文件的磁盘或分区,或文件系统种类. 2. Local File Sy ...
- 安装操作系统CentOS-7.x
一.创建虚拟机 使用VMware Fusion创建虚拟机 二.系统安装 为了统一环境,保证实验的通用性,将网卡名称设置为eth*,不使用CentOS 7默认的网卡命名规则.所以需要在安装的时候,增加内 ...
- Python3 获取RDS slowlog+微信接口报警
一.功能说明 二.代码详情 1.通过阿里sdk获取慢查询列表,格式化. 2.企业微信报警接口 3.deamon #!/usr/bin/python #-*- conding:utf-8 -*- fro ...