我有一个存储过程如下:
ALTER PROCEDURE [dbo].[sp_CheckEmailAvailability] -- Add the
parameters for the stored procedure here ( @Email VARCHAR(50)=null,
@Count int OUTPUT
) AS BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements. SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT @Count=COUNT(*) from dbo.tx_UserPersonalDetails where s_Email=@Email
END
我的aspx.cs页面中有以下代码: -
SqlCommand cmd = new SqlCommand("[dbo].[sp_CheckEmailAvailability]", objcon);
int result = 0;
try
{
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter parm = new SqlParameter("@Email", SqlDbType.VarChar);
parm.Value = txtUserName.Text.ToString();
parm.Direction = ParameterDirection.Input;
cmd.Parameters.Add(parm);
SqlParameter parm1 = new SqlParameter("@Count", SqlDbType.Int);
// parm1.Value = txtUserName.Text.ToString();
parm.Direction = ParameterDirection.Output;
cmd.Parameters.Add(parm1);
cmd.Connection.Open();
result=cmd.ExecuteNonQuery();
if (result>0)
{
lblAvailText.Text = "Email id is in use";
}
else
{
lblAvailText.Text = "Email id is Available";
}
}
catch (SqlException sql)
{
}
finally
{
cmd.Connection.Close();
}
当我运行代码时,我收到一个错误: -
形式参数“@Email”未声明为OUTPUT参数, 但实际参数在请求的输出中传递。
请帮帮我。
答案 0 :(得分:4)
更改
parm.Direction = ParameterDirection.Output;
到
parm1.Direction = ParameterDirection.Output;
您设置了错误的SqlParam。
parm用于@Email参数,最初正确指定为输入,但是当你创建parm1时,你没有设置它的方向,你设置parm的方向。
这就是为什么你应该使用良好的命名约定。
答案 1 :(得分:2)
替代方式 - 尝试使用RETURN -
ALTER PROCEDURE [dbo].[sp_CheckEmailAvailability]
(
@Email VARCHAR(50)
)
AS BEGIN
RETURN (
SELECT COUNT(1)
FROM dbo.tx_UserPersonalDetails
WHERE s_Email = @Email
)
END