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 ③ 这个存储过 ...
随机推荐
- 不同的类UNIX操作系统密码破解方法介绍
(一)Linux 系统密码破解 1.在grub选项菜单按E进入编辑模式 2.编辑kernel那行 /init 1 (或/single) 3.按B重启 4.进入后执行下列命令 root@#passwd ...
- RPC通信
@version: @author: morgana @license: Apache Licence @contact: vipmorgana@gmail.com @site: @software: ...
- 「小程序JAVA实战」小程序登录与后端联调(36)
转自:https://idig8.com/2018/09/01/xiaochengxujavashizhanxiaochengxudengluyuhouduanliandiao36/ 重新温习下用户的 ...
- django -- url (模版语言 {% url 'test1' param1=5 param2=6 %})
如果想让form表单提交的url是类似 action="/index-5-6.html" 这样的,可以在html模版语言中使用{% url 'test1' param1=5 par ...
- 整理SSH框架的优缺点
Hibernate优点(1) 对象/关系数据库映射(ORM)它使用时只需要操纵对象,使开发更对象化,抛弃了数据库中心的思想,完全的面向对象思想(2) 透明持久化(persistent)带有持久化状态的 ...
- url_encode and url_decode in Shell
之前写过一版 shell下解码url,下面给出另外一个版本 from https://gist.github.com/cdown/1163649 function urlencode() { loca ...
- 安装mongodb时报错 configure: error: Cannot find OpenSSL's libraries
请安装这些包以便继续: apt-get install build-essential libexpat1-dev libgeoip-dev libpng-dev libpcre3-dev libss ...
- flex 设置换行flex-wrap
flex 设置flex-wrap 换行 本来预想的正常情况下,代码应该如下: ul { width: 100%; display: flex; flex-wrap: wrap; li { ; widt ...
- Redis搭建(六):Redis持久化配置
一.介绍 Redis的持久化有2种方式: Rdb快照 Aof日志 1. Rdb快照的配置选项 save 900 1 // 900内,有1条写入,则产生快照 save 300 1000 // 如果300 ...
- Unity发布安卓Splash Image适应手机、平板
问题描述: Unity发布安卓应用时,遇到只能添加一张SplashImage而需要适配手机及平板不同分辨率处理 解决方法: http://blog.csdn.net/aiyan1111111/arti ...