C#中调用输入输出参数的存储过程

关于存储过程的介绍大家想必也不陌生了吧。大家可以参考《浅谈存储过程》一文,这里不做介绍。

今天要介绍的是在C#里如何调用带输入输出参数的存储过程。譬如实现简单的登陆功能,根据用户输入的用户名、用户密码及用户权限实现登陆。这里充当输入参数的有:用户名、用户密码、登陆权限。充当输出参数的就是在数据库里面根据输入参数的信息查询数据库中是否有记录。具体来说就是记录的行数。

数据库中的存储过程构建代码:

Code

1use Hotel --数据库名
2if exists(select * from sysobjects where name='proc_userinfo')--判断是否存在存储过程
3drop proc proc_userinfo --若存在删除此存储过程
4go
5--创建存储过程
6create proc proc_userinfo
7@username varchar(50),--输入参数
8@pwd varchar(50),--输入参数
9@grade varchar(20),--输入参数
10@count int output --输出参数output不能少
11--sql语句
12as
13select @count=count(*) from userinfo where username=@username and pwd=@pwd and @grade=grade
14go
15
16
17执行存储过程
18declare @n int
19exec proc_userinfo admin,123,管理员,@n output
20--output不能少
21print @n
22go

数据访问层代码

Code

1//调用存储过程执行类似于
2//select count(*) from userinfo where username=username and pwd=pwd and grade=grade
3//接受三个参数分别用来表示用户名、用户密码、用户权限
4public bool GetUserinfo(string username,string pwd,string grade)
5    {
6      //获取连接字符串
7      private string 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中所有数据的方法

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上即可
10

时间: 2024-12-31 22:09:47

C#中调用输入输出参数的存储过程的相关文章

gridview中调用带参数的存储过程,出现错误,提示"未提供该参数"

问题描述 存储过程:Createprocdeltractor(@idint,@marknumchar)asDELETEFROMdbo.tractorinfoWHERE(dbo.tractorinfo.id=@id)DELETEFROMdbo.stateWHERE(dbo.state.marknum=@marknum)returngoC#代码:<asp:GridViewID="GridView1"DataKeyNames="id".....<asp:Sql

在asp中调用sql server的存储过程

在asp中调用sql server的存储过程可以加快程序运行速度,所以这些天在研究asp中利用sql server的存储过程,现总结如下,其中很多思想也是直接从chinaasp论坛中得出来,希望能给大家一些帮助.1.调用存储过程的一般方法先假设在sql server中有一存储过程dt_users:CREATE PROCEDURE [dbo].[dt_users] ASselect * from usersreturnGO第一种方法是不利用command对象,直接用recordset对象set r

为什么link中调用函数参数写少了也不会报错?难道参数写少了也可以调用么?

问题描述 为什么link中调用函数参数写少了也不会报错?难道参数写少了也可以调用么? 为什么link中调用函数参数写少了也不会报错?难道参数写少了也可以调用么? 解决方案 有默认参数这个东东,所以有可能存在参数写少了不会报错:但写多了,是一定会报错的.

调用SQL SERVER数据库存储过程实现ASP用户身份验证

server|存储过程|数据|数据库 在我们编写用户身份验证程序中,很容易用ASP调用SQL语句来检索数据表中是否有条件相符的记录,然后再用ASP进行相关处理. 条条道路通罗马!当然,我们也可以用SQL SERVER数据库的存储过程来轻松实现这个功能.虽然相对而言较复杂,但其效率的提升是很明显的,因为存储过程是在数据库中已经编译好的一段程序,我们只需用ASP将其所用的各种参数正确传递就行了. 本文也主要是想通过一个简单的事例,向大家介绍一下如何在ASP中调用带参数的存储过程.希望大家能从中得到更

ASP调用带有输入参数和输出参数的存储过程

存储过程 返回值其实是一种特殊的输出参数.在大多数情况下,我们用到的是同时有输入及输出参数的存储过程,比如我们想取得用户信息表中,某ID用户的用户名,这时候,有一个输入参数----用户ID,和一个输出参数----用户名.实现这一功能的存储过程如下:<br><br> <table style="WIDTH: 475px; HEIGHT: 220px" borderColor=#cccccc width=475 align=center bgColor=#e3

C#中调用存储过程主要是参数使用问题

存储过程|问题 C#中调用存储过程主要是参数使用问题(输入参数,输出参数,返回值)         //现假设conn是已经定义好的连接,proc为存储过程名         //1.调用无参数无返回的存储过程        //SqlCommand cmd=new SqlCommand(proc,conn);        //cmd.CommandType=CommandType.StoredProcedure;//告知执行存储过程        //conn.Open();       

oracle数据库存储过程带输入参数建表的语法和在oracle中调用语法

问题描述 oracle数据库存储过程带输入参数建表的语法和在oracle中调用语法 大神们,随便给几个例子参照一下啊,oracle数据库存储过程带输入参数建表的语法和在oracle中调用语法 解决方案 差不多这个意思,http://zhidao.baidu.com/link?url=lYFB7BBbSoybi5mTurmVbI88Q5R78nnhHyQUiMAhF3B4iyA1OiPCxY4xsRS7v_v0kBdbtCVvVlPHhfY9Rerx7K 解决方案二: create or repl

ASP调用带参数的MSSQL存储过程,并返回临时表记录集

前些天,阿里西西web团队(Alixixi.com)在开发一个系统平台时,需要通过存储过程调用多个表的几个字段,合并到一个临时表中,并进行排序返回给ASP调用. 下面,我把经验分享出来: 1.存储过程部分: 以下是存储过程部分:CREATE PROCEDURE [dbo].[alixixi] @sNum int, @sOrder varchar(20)  AS SET nocount on create table #btable (id int,channelid int,classid in

mysql创建存储过程并在php中调用

今天web开发中遇到需要利用php调取mysql的存储过程的,研究了半天终于小有所成,下面将如何使用mysql创建存储过程以及如何使用php调用mysql的存储过程做个记录,以防忘记. 1.在PHPmyadmin中创建一个test1存储过程: create procedure test1(in a int) //create创建:procedure存储过程:test1是存储过程名还管有没有参数都得加上() begin //开始 select * from test where id=a;//这里