我会坚持经常就一些比较典型的问题发表博客,同学们可以长上来看看,有什么问题及时来反映。
第一篇,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);
}
}
上面代码中注释已经非常清楚,大家可以直接执行一下看看效果,下面给出执行效果图