//调用存储过程执行类似于
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# 调用带输入输出参数的存储过程的更多相关文章

  1. c#调用带输出参数的存储过程

    sql server中编写一个存储过程: CREATE PROCEDURE ProGetPWD @username varchar(20), @password varchar(20) OUTPUT ...

  2. Oracle带输入输出参数的存储过程

    (一)使用输入参数 需求:在emp_copy中添加一条记录,empno为已有empno的最大值+1,ename不能为空且长度必须大于0,deptno为60. 创建存储过程: create or rep ...

  3. sql server 带输入输出参数的分页存储过程(效率最高)

    create procedure proc_page_withtopmax( @pageIndex int,--页索引 @pageSize int,--每页显示数 @pageCount int out ...

  4. 用exec调用带有output输出参数的存储过程

    用exec调用带有output输出参数的存储过程,想要得到输出参数的值,必须在调用参数后面加output关键字,如: declare @value int exec up_test    2,3,@v ...

  5. Oracle使用jdbc调用带游标参数的存储过程

    package com.jckb.procedure; import java.sql.CallableStatement; import java.sql.Connection; import ja ...

  6. 创建有输出参数的存储过程并在c#中实现DataGridView分页功能

    不足之处,欢迎指正! 创建有输出参数的存储过程 if exists(select * from sysobjects where name='usp_getPage1') drop procedure ...

  7. C#中调用存储过程:带输入输出参数

    using (SqlConnection conn = new SqlConnection(this.GetConnectionString(this.WMPDBName))) { SqlComman ...

  8. C# 调用带有输出参数的分页存储过程

    一.创建带有输出参数的分页存储过程 use StudentMISDB go select * from Course alter table Course go --update Course set ...

  9. c#调用Mysql带参数的存储过程

    1.首先创建一个带参数的存储过程 ①存储过程名称=proc_bookinfo  ②存储过程2个参数 一个in 一个out in参数名称=ispay out参数名称=unPaycount ③ 这个存储过 ...

随机推荐

  1. Python Twisted系列教程22:结束

    作者:dave@http://krondo.com/part-22-the-end/  译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted 入门!“ ...

  2. Python小知识点(2)

    1.简述Python的运行过程 在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件. 我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器 ...

  3. [js方法pk]之instanceof() vs isPrototypeOf() hasOwnProperty() vs propertyIsEnumerable()

    这几个方法在js的高级编程中经常用到,对于新手来说可能还不知道他们有什么区别,我把我的体会总结下来,供大家参考: 首先,定义一个对象: function Parent() {this.name = & ...

  4. 使用ssh client与bash scripts轻松管理多台主机

    当我们需要控制一个局域网中的很多台服务器时,一个简单的全局操作可能会被放大地异常繁琐,这时我们就会需要新的工具来快速完成这种工作. 我们将使用ssh客户端提供的一些工具来快速完成这一开发工作,我们的开 ...

  5. 用django实现redirect的几种方法总结

    用django开发web应用, 经常会遇到从一个旧的url转向一个新的url.这种隐射也许有规则,也许没有.但都是为了实现业务的需要.总体说来,有如下几种方法实现 django的 redirect.1 ...

  6. Django xadmin的使用 (三)

    关于报错: 1.在页面添加好新的用户后登录报错 解决方法: 新建一个app,名叫app D:\myfiles\study\python\django\datas>python manage.py ...

  7. spring maven项目解决依赖jar包版本冲突方案

    引入:http://blog.csdn.net/sanzhongguren/article/details/71191290 在spring reference中提到一个解决spring jar包之间 ...

  8. MyBatis初识(通过小实例清晰认识MyBatis)

    1.MyBatis框架: MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可 ...

  9. 【转】arm和x86的区别

    来自: https://blog.csdn.net/u012513972/article/details/78349192/ 信不信,随便逮住一个人问他知不知道CPU,我想他的答案一定会是肯定的,但是 ...

  10. iOS学习之UINavigationController详解与使用(三)ToolBar

    1.显示Toolbar  在RootViewController.m的- (void)viewDidLoad方法中添加代码,这样Toobar就显示出来了. [cpp] view plaincopy [ ...