我想写个存储过程来验证用户的登陆,在界面层会传两个参数 user ,password 代码是这样的:
DataBase db = new DataBase();//连接数据库
SqlParameter[] parameters ={
db.MakeInParam("@userid",SqlDbType.VarChar,50,textBox1.Text),//textbox1里面是用户名
db.MakeInParam("@userpassword",SqlDbType.VarChar,50,textBox2.Text),textbox2里面是密码
};
db.RunProc("login", parameters);//调用存储过程我的存储过程代码:
CREATE procedure login
@userid varchar(50),
@userpassword varchar(50),
@value int output
asselect @value=count(*) from users where userid=@userid and userpassword=@userpassword
GO代码是自己写的,见笑了,我想如果成功的话,就会返回一个值给@value,但是这个值怎么得到成问题了.大家帮帮忙了
DataBase db = new DataBase();//连接数据库
SqlParameter[] parameters ={
db.MakeInParam("@userid",SqlDbType.VarChar,50,textBox1.Text),//textbox1里面是用户名
db.MakeInParam("@userpassword",SqlDbType.VarChar,50,textBox2.Text),textbox2里面是密码
};
db.RunProc("login", parameters);//调用存储过程我的存储过程代码:
CREATE procedure login
@userid varchar(50),
@userpassword varchar(50),
@value int output
asselect @value=count(*) from users where userid=@userid and userpassword=@userpassword
GO代码是自己写的,见笑了,我想如果成功的话,就会返回一个值给@value,但是这个值怎么得到成问题了.大家帮帮忙了
获取或设置一个值,该值指示参数是只可输入、只可输出、双向还是存储过程返回值参数。ParameterDirection 值之一。默认值为 Input。 Input 参数是输入参数。
Output 参数是输出参数。
InputOutput 参数既能输入,也能输出。
ReturnValue 参数表示诸如存储过程、内置函数或用户定义函数之类的操作的返回值。
SqlParameter[] parameters ={
db.MakeInParam("@userid",SqlDbType.VarChar,50,textBox1.Text),//textbox1里面是用户名
db.MakeInParam("@userpassword",SqlDbType.VarChar,50,textBox2.Text),textbox2里面是密码
db.MakeOutParam("@value",SqlDbType.int,4),textbox2里面是密码
};
db.RunProc("login", parameters);//调用存储过程
db应该有个获取参数值的方法。
int NewsId = (int)db.GetParameterValue("NewsId");
return NewsId;
在再程序里接收.
/// <summary>
/// 生成存储过程参数
/// </summary>
/// <param name="ParamName">参数名</param>
/// <param name="DbType">参数类型</param>
/// <param name="Size">参数大小</param>
/// <param name="Direction">参数方向</param>
/// <param name="Value">参数值</param>
/// <returns>新的 parameter 对象</returns>
public SqlParameter MakeParam(string ParamName , SqlDbType DbType , Int32 Size , ParameterDirection Direction , object Value)
{
SqlParameter param; if(Size > 0)
param = new SqlParameter(ParamName ,DbType ,Size);
else
param = new SqlParameter(ParamName ,DbType); param.Direction = Direction;
if(Direction == ParameterDirection.Input)
param.Value = Value;
return param;
}
#endregion #region 传入输入参数MakeInParam(string ParamName , SqlDbType DbType , int Size , object Value)
/// <summary>
/// 传入输入参数
/// </summary>
/// <param name="ParamName">参数名</param>
/// <param name="DbType">参数类型</param></param>
/// <param name="Size">参数大小</param>
/// <param name="Value">参数值</param>
/// <returns>新的 parameter 对象</returns>
public SqlParameter MakeInParam(string ParamName , SqlDbType DbType , int Size , object Value)
{
return MakeParam(ParamName ,DbType ,Size ,ParameterDirection.Input ,Value);
}
#endregion #region 传入输出参数MakeOutParam(string ParamName, SqlDbType DbType, int Size)
/// <summary>
/// 传入输出参数
/// </summary>
/// <param name="ParamName">参数名/param>
/// <param name="DbType">参数类型</param>
/// <param name="Size">参数大小</param>
/// <returns>新的 parameter 对象</returns>
public SqlParameter MakeOutParam(string ParamName, SqlDbType DbType, int Size)
{
return MakeParam(ParamName, DbType, Size, ParameterDirection.Output, null);
}
#endregion #region 返回参数值MakeReturnParam(string ParamName, SqlDbType DbType, int Size)
/// <summary>
/// 返回参数值
/// </summary>
/// <param name="ParamName">参数名</param>
/// <param name="DbType">参数类型</param>
/// <param name="Size">参数大小</param>
/// <returns>新的 parameter 对象</returns>
public SqlParameter MakeReturnParam(string ParamName, SqlDbType DbType, int Size)
{
//不懂ParameterDirection.ReturnValue, 不知道能return些什么:(
return MakeParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null);
}
#endregion
----------这是执行存储过程的代码
#region 执行存储过程RunProc(string procName ,SqlParameter[] prams)
/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="procName">存储过程名称</param>
/// <param name="prams">存储过程所需参数</param>
/// <returns>返回存储过程返回值</returns>
public void RunProc(string procName ,SqlParameter[] prams)
{
SqlCommand cmd = CreateCommand(procName, prams);
Open();
cmd.ExecuteNonQuery();
Close();
//return cmd.Parameters["ReturnValue"].Value;
}
#endregion#region 创建一个SqlCommand对象CreateCommand(string procName ,SqlParameter[] prams)
/// <summary>
/// 创建一个SqlCommand对象以此来执行存储过程
/// </summary>
/// <param name="procName">存储过程的名称</param>
/// <param name="pramsIn">存储过程所需输入参数</param>
/// <returns>返回SqlCommand对象</returns>
private SqlCommand CreateCommand(string procName ,SqlParameter[] prams)
{
SqlCommand cmd = new SqlCommand(procName , conn);
cmd.CommandType = CommandType.StoredProcedure; if(prams != null)
{
foreach(SqlParameter parameter in prams)
{
cmd.Parameters.Add(parameter);
}
}
// 加入返回参数
/*cmd.Parameters.Add(
new SqlParameter("ReturnValue", SqlDbType.NVarChar, 50,
ParameterDirection.ReturnValue, false, 0, 0,
string.Empty, DataRowVersion.Default, null));*/
return cmd;
}
#endregion
if(Table[0].Rows.count >0)
{
登陆成功;
}
return MakeParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null);
}
return MakeParam方法里的返回值 return param;ParameterDirection 应该是个枚举
SqlParameter[] parameters ={
db.MakeInParam("@userid",SqlDbType.VarChar,50,textBox1.Text),//textbox1里面是用户名
db.MakeInParam("@userpassword",SqlDbType.VarChar,50,textBox2.Text),textbox2里面是密码
db.MakeOutParam("@value",SqlDbType.int)
};
db.RunProc("login", parameters);//调用存储过程
parameters[3].value应该就可以取值吧
我没有测试,以前也没有这么用过参数
一般都是先定义一个输出的参数