存储过程返回值:
下面的类是.net提供的存储过程的参数的枚举类型
namespace System.Data
{
// 摘要:
// 指定查询内的有关 System.Data.DataSet 的参数的类型。
public enum ParameterDirection
{
// 摘要:
// 参数是输入参数。
Input = 1,
//
// 摘要:
// 参数是输出参数。
Output = 2,
//
// 摘要:
// 参数既能输入,也能输出。
InputOutput = 3,
//
// 摘要:
// 参数表示诸如存储过程、内置函数或用户定义函数之类的操作的返回值。
ReturnValue = 6,
}
}
应用实例:
拿最通用的用户登陆验证的例子来讲:
1、如果在.net程序中写入代码如下
/// <summary>
/// 检测用户名及密码是否正确(mocklystone 2009-0-10-14)
/// </summary>
/// <param name="userName"></param>
/// <param name="userPwd"></param>
/// <returns></returns>
public static bool IsCheckPass(string userName,string userPwd)
{
SqlConnection conn = new SqlConnection(sqlConn);
try
{
conn.Open();
SqlCommand cmd = new SqlCommand("proc_UserInfo_CheckUser", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@UserName", SqlDbType.NVarChar, 50);
cmd.Parameters["@UserName"].Value = userName;
cmd.Parameters.Add("@UserPwd", SqlDbType.NVarChar, 50);
cmd.Parameters["@UserPwd"].Value = userPwd;
// 注意:这边是关键点,给存储过程添加一个参数为@cnt,类型为ParameterDirection中的ReturnValue
// 那么数据库中对应的存储过程应如下述的第1点所写的
// 如果类型为ParameterDirection中的Output,存储过程应如下述的第2点所写的。
cmd.Parameters.Add("@cnt", SqlDbType.Int);
cmd.Parameters["@cnt"].Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
int cnt = int.Parse(cmd.Parameters["@cnt"].Value.ToString());
if (cnt > 0)
return true;
else
return false;
}
catch
{
return false;
}
finally
{
conn.Close();
}
}
存储过程1:
--=====================================================--
--Author: mocklystone
--CreateDate: 2010-01-02
--description: 用于验证用户是否存在
--UpdateRecord:
--=====================================================--
ALTER procedure [dbo].[proc_UserInfo_CheckUser]
@UserName varchar(20),
@UserPwd varchar(20)
as
if exists(select * from UserInfo where UserName=@UserName and UserPwd=@UserPwd)
return 1
else
return 0
存储过程2:
--=====================================================--
--Author: mocklystone
--CreateDate: 2010-01-02
--description: 用于验证用户是否存在
--UpdateRecord:
--=====================================================--
ALTER procedure [dbo].[proc_UserInfo_CheckUser]
@UserName varchar(20),
@UserPwd varchar(20),
@Cnt int output
as
if exists(select * from UserInfo where UserName=@UserName and UserPwd=@UserPwd)
set @Cnt=1
else
set @Cnt=0