带有out参数的存储过程

时间:2013-07-17 13:23:34

标签: sql-server c#-4.0 stored-procedures

我有一个存储过程如下:

 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参数,   但实际参数在请求的输出中传递。

请帮帮我。

2 个答案:

答案 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