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

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

1.存储过程的意义

  • sql语句的执行大致包括,语法和语句分析,给出优化执行方案,执行操作。事先编译好的存储过程就是一系列sql语句的集合,这些语句已经经过已经完成了执行sql语句所需的大部分工作,所以极大提高了执行性能,所以存储过程都能比sql语句更快的执行。
  • 在B/S架构的程序中,像程序发送一段sql语句和一个存储过程的名称所占的流量肯定是不一样的,尤其sql语句很长时。所以使用存储过程也能节省网络流量,特别是在一些网络不发达的地区,这一点很重要。

这两点是最容易理解的,还有其他的一些优点,大家可以找相关资料了解一下。

2..NET中调用存储过程

先给出一个实例,用代码说话。

首先在sql server中编写一个存储过程:

[csharp]  view plain copy
  1. CREATE PROCEDURE ProGetPWD  
  2.    @username varchar(20),  
  3.    @password varchar(20) OUTPUT  
  4. AS  
  5. BEGIN  
  6.    SELECT @password = password   
  7.    FROM Users   
  8.    WHERE username = @username  
  9. END  

 

做点解释:表Users中存储的是用户的信息,包括用户名(username),密码(password),@username是一个输入参数,接收用户的输入,@password是输出参数,这个存储过程的作用是根据用户输入的用户名查询出相应的密码,并输出。

下面是.NET中调用存储过程的方法。先给出代码

[csharp]  view plain copy
  1. string strConnection = "user id=sa;password=sa;initial catalog=MyTest;Server=YHB;Connect Timeout=30";  
  2.             using (SqlConnection conn = new SqlConnection(strConnection))  
  3.             {  
  4.                 conn.Open();  
  5.                 using (SqlCommand sqlComm = conn.CreateCommand())  
  6.                 {  
  7.                     //设置要调用的存储过程的名称  
  8.                     sqlComm.CommandText = "GetPWD";  
  9.                     //指定SqlCommand对象传给数据库的是存储过程的名称而不是sql语句  
  10.                     sqlComm.CommandType = CommandType.StoredProcedure;  
  11.   
  12.                     SqlParameter username = sqlComm.Parameters.Add(new SqlParameter("@username", SqlDbType.VarChar, 20));  
  13.                     //指明"@username"是输入参数  
  14.                     username.Direction = ParameterDirection.Input;  
  15.                     //为“@username”参数赋值  
  16.                     username.Value = this.txt_username.Text;  
  17.   
  18.                     SqlParameter password = sqlComm.Parameters.Add(new SqlParameter("@password", SqlDbType.VarChar, 20));  
  19.                     //指定"@password"为输出参数  
  20.                     password.Direction = ParameterDirection.Output;  
  21.                     //执行  
  22.                     sqlComm.ExecuteNonQuery();  
  23.                     //得到输出参数的值,把赋值给name,注意,这里得到的是object类型的,要进行相应的类型轮换  
  24.                     string passwrod = Convert.ToString(sqlComm.Parameters["@password"].Value);  
  25.                     MessageBox.Show(passwrod);  
  26.                 }  
  27.             }  


 

上面代码中注释已经非常清楚,大家可以直接执行一下看看效果,下面给出执行效果图

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值