sql server 支持存储过程,存储过程就是将sql语句以函数的形式内嵌在数据库中,这样就可以在主程序中调用这个存储过程了。
这里给出一个用以id来查询密码的存储过程示例:
<span style="font-size:18px;">//存储过程名字为</span><span style="font-size:18px;">getUserById</span><span style="font-size:18px;">
create procedure getUserById(
@id varchar(50),
@name varchar(50) output,
@password varchar(50) output)//output意为输出参数
as
begin
//表的名字是UserInfo,有两个属性:id password
select @password = password from UserInfo where id = @id
end</span>
下面是c#中调用这个存储过程的例子。//创建执行语句
<span style="font-size:18px;">SqlCommand command = conn.CreateCommand();
//设置执行语句类型为存储过程
command.CommandType = CommandType.StoredProcedure;
指定存储过程名字
command.CommandText = "getUserById";
//给存储过程的输入参数@id赋值
command.Parameters.Add("@id",SqlDbType.VarChar,50).Value = id;
//声明存储过程的输出参数@password
command.Parameters.Add("@password",SqlDbType.VarChar,50).Direction = ParameterDirection.Output;
//执行存储过程
command.ExecuteReader();
//获取输出参数
user.password = command.Parameters["@password"].Value.ToString();</span>
上面这个例子实现了以id来查询密码的功能。对于普通的sql语句来说存储过程有点画蛇添足,因为只要一条sql语句就可以完成了。但是对于较复杂的sql语句或者频繁的业务操作来说,存储过程可以有效减少程序中调用重复的sql语句,减少通信量。
查询结果集是sql查询最普遍的操作,而存储过程的返回值与输出参数无法实现集合的输出,而是用游标Cursor来指示一个集合,通过游标的移动来读取集合中的元素。这个以后如果需要的话,会深入学习一下。