调用输出的存储过程
|
我一直在尝试从数据库中检索一些信息,并且还检索返回值。我知道存储过程可以正常工作。
我使用的代码是修改后的代码,用于注册用户。我的代码的cmd.ExecuteReader部分出了问题。
protected void btn_login_Click(object sender, ImageClickEventArgs e)
{
//Actions after Submit button is clicked
Page.Validate(((ImageButton)sender).ValidationGroup);
if (Page.IsValid)
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[\"DbConnectString\"].ConnectionString))
{
SqlCommand cmd = new SqlCommand(\"usp_validateUsers\", conn);
//Input Values
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue(\"username\", Uname.Text);
cmd.Parameters.AddWithValue(\"password\", pwd.Text);
//Return Values
SqlParameter retParam = cmd.Parameters.Add(\"@RetVal\", SqlDbType.Int);
retParam.Direction = ParameterDirection.ReturnValue;
SqlParameter acsParam = cmd.Parameters.Add(\"@ac_status\", SqlDbType.Int);
acsParam.Direction = ParameterDirection.Output;
SqlParameter nikParam = cmd.Parameters.Add(\"@memb_name\", SqlDbType.VarChar);
nikParam.Direction = ParameterDirection.Output;
try
{
// Open Connection and execute Stored Proc
conn.Open();
///////////SOMETHING GOES WRONG HERE///////////////
cmd.ExecuteReader();
//Retrieve Data
int retVal = (int)retParam.Value;
string nickname = nikParam.Value.ToString();
string ac_stats = acsParam.Value.ToString();
if (retVal != 0)
{
//Invalid Username or password
}
else
{
//Login User
}
}
catch (Exception Error)
{
lbl_login.Text = \"An error occured, please try again later\";
debug.Text = Error.Message;
}
finally
{
debug.Text = \"\\n Clossing Connection\";
if (conn.State == System.Data.ConnectionState.Open)
{
conn.Close();
}
}
}
}
}
当我只想接收返回值时,我仅使用ѭ1,我知道将SQL查询传递到SQL数据库时如何接收数据,但是使用存储过程时似乎有所不同。
编辑
可能可以进一步改善此代码,但它确实做了应做的事情。
ALTER PROCEDURE dbo.usp_validateUsers
@username varchar(10),
@password varchar(10),
@ac_status char(1) OUTPUT,
@memb_name varchar(15) OUTPUT
AS
IF EXISTS(SELECT * FROM MEMB_INFO WHERE (memb___id = @username))
BEGIN
SELECT @ac_status = ac_status, @memb_name = memb_name
FROM MEMB_INFO
WHERE (memb___id = @username) AND (memb__pwd = @password)
RETURN 0
END
ELSE
BEGIN
return 1
END
当我使用断点捕获Visual Studio中的可能异常时,它给了我:
字符串[4]:Size属性的大小无效为0
没有找到相关结果
已邀请:
3 个回复
犯痪桂涛杭
参数的大小而引起的。而不是像这样的行:
尝试这个:
翁茄口霉氖
妒垮