现在的位置: 首页 > 综合 > 正文

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

2013年12月05日 ⁄ 综合 ⁄ 共 1589字 ⁄ 字号 评论关闭
文章目录

我会坚持经常就一些比较典型的问题发表博客,同学们可以长上来看看,有什么问题及时来反映。

第一篇,c#调用带输出参数的存储过程。

1.存储过程的意义

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

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

2..NET中调用存储过程

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

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

CREATE PROCEDURE ProGetPWD
   @username varchar(20),
   @password varchar(20) OUTPUT
AS
BEGIN
   SELECT @password = password 
   FROM Users 
   WHERE username = @username
END

 

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

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

string strConnection = "user id=sa;password=sa;initial catalog=MyTest;Server=YHB;Connect Timeout=30";
            using (SqlConnection conn = new SqlConnection(strConnection))
            {
                conn.Open();
                using (SqlCommand sqlComm = conn.CreateCommand())
                {
                    //设置要调用的存储过程的名称
                    sqlComm.CommandText = "GetPWD";
                    //指定SqlCommand对象传给数据库的是存储过程的名称而不是sql语句
                    sqlComm.CommandType = CommandType.StoredProcedure;

                    SqlParameter username = sqlComm.Parameters.Add(new SqlParameter("@username", SqlDbType.VarChar, 20));
                    //指明"@username"是输入参数
                    username.Direction = ParameterDirection.Input;
                    //为“@username”参数赋值
                    username.Value = this.txt_username.Text;

                    SqlParameter password = sqlComm.Parameters.Add(new SqlParameter("@password", SqlDbType.VarChar, 20));
                    //指定"@password"为输出参数
                    password.Direction = ParameterDirection.Output;
                    //执行
                    sqlComm.ExecuteNonQuery();
                    //得到输出参数的值,把赋值给name,注意,这里得到的是object类型的,要进行相应的类型轮换
                    string passwrod = Convert.ToString(sqlComm.Parameters["@password"].Value);
                    MessageBox.Show(passwrod);
                }
            }

 

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

 

抱歉!评论已关闭.