4

次のようなストアドプロシージャがあります。

 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 パラメーターとして宣言されていませんでしたが、要求された出力で実際のパラメーターが渡されました。

それを手伝ってください。

4

2 に答える 2

4

変化する

parm.Direction = ParameterDirection.Output;

parm1.Direction = ParameterDirection.Output;

間違った SqlParam を設定していました。

parm は @Email パラメーターに使用され、最初は入力として正しく指定されていますが、parm1 を作成するときにその方向を設定せず、parm の方向を設定します。

そのため、適切な命名規則を使用する必要があります。

于 2013-07-17T13:25:56.067 に答える