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);
- }
- }
上面代码中注释已经非常清楚,大家可以直接执行一下看看效果,下面给出执行效果图