>

변수 @result를 1 또는 0 (데이터 유형 비트)으로 설정 한 저장 프로 시저가 있습니다. 다음 코드를 사용하여 C #에서 액세스하고 있습니다. 너무 많은 매개 변수를 말하는 오류가 발생합니다.

protected void btnRegister_Click(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]);
        con.Open();

        SqlCommand Cmd = new SqlCommand("usp_CheckEmailMobile", con);
        Cmd.CommandType = CommandType.StoredProcedure;
        Cmd.CommandText = "Registration";
        Cmd.Parameters.AddWithValue("@Name", txtName.Text);
        Cmd.Parameters.AddWithValue("@Email", txtEmailAddress.Text);
        Cmd.Parameters.AddWithValue("@Password", txtPassword.Text);
        Cmd.Parameters.AddWithValue("@CountryCode", ddlCountryCode.Text);
        Cmd.Parameters.AddWithValue("@Mobile", txtMobileNumber.Text);
        //Cmd.Parameters.Add("@Result", DbType.Boolean);
        SqlParameter sqlParam = new SqlParameter("@Result", DbType.Boolean);
        //sqlParam.ParameterName = "@Result";
        //sqlParam.DbType = DbType.Boolean;
        sqlParam.Direction = ParameterDirection.Output;
        Cmd.Parameters.Add(sqlParam);
        Cmd.ExecuteNonQuery();
        con.Close();
        Response.Write(Cmd.Parameters["@Result"].Value); 

    }

저장 프로 시저 : (괜찮아요 ...) CS 코드를 수정하십시오 ...

ALTER PROCEDURE [dbo].[usp_CheckEmailMobile]
  ( @Name VARCHAR(50), 
@Email NVARCHAR(50), 
@Password NVARCHAR(50), 
@CountryCode INT, 
@Mobile VARCHAR(50), 
@Result BIT OUTPUT)
 AS 
BEGIN 
IF EXISTS (SELECT COUNT (*) FROM AUser WHERE  [Email] = @Email AND [Mobile] = @Mobile) 
 Begin 
 Set @Result=0; --Email &/or Mobile does not exist in database
End
ELSE
Begin
  --Insert the record & register the user 
INSERT INTO [AUser] ([Name], [Email], [Password], [CountryCode], [Mobile]) VALUES (@Name, @Email, @Password, @CountryCode, @Mobile)  
Set @Result=1;
 End
END

  • 답변 # 1

    이 코드를 사용해보십시오 :

    bool result=false;
    SqlCommand scCommand = new SqlCommand("usp_CheckEmailMobile", sqlCon);
    scCommand.CommandType = CommandType.StoredProcedure;
    scCommand.Parameters.Add("@Name", SqlDbType.VarChar, 50).Value = txtName.Text;
    scCommand.Parameters.Add("@Email", SqlDbType.NVarChar, 50).Value = txtEmailAddress.Text;
    scCommand.Parameters.Add("@Password ", SqlDbType.NVarChar, 50).Value = txtPassword.Text;
    scCommand.Parameters.Add("@CountryCode", SqlDbType.VarChar.50).Value =ddlCountryCode.SelectedText;
    scCommand.Parameters.Add("@Mobile", SqlDbType.NVarChar, 50).Value = txtMobileNumber.Text;
    scCommand.Parameters.Add("@Result ", SqlDbType.Bit).Direction = ParameterDirection.Output;
    try
    {
        if (scCommand.Connection.State == ConnectionState.Closed)
        {
            scCommand.Connection.Open();
        }
        scCommand.ExecuteNonQuery();
        result = Convert.ToBoolean(scCommand.Parameters["@Result"].Value);
    
    }
    catch (Exception)
    {
    }
    finally
    {                
        scCommand.Connection.Close();
        Response.Write(result); 
    }
    
    

  • 답변 # 2

    설정 이유 :

    Cmd.CommandText = "Registration";
    
    

    이것은 저장 프로 시저 이름을 대체하므로 지정한 저장 프로 시저를 호출하지 않습니다 :

    SqlCommand Cmd = new SqlCommand("usp_CheckEmailMobile", con);
    
    

    "전선을 통해"가는 SQL이 예상 한대로 디버깅하기 위해 SQL 프로파일 러를 사용하는 것이 유용 할 수 있습니다.

관련 자료

  • 이전 regex - java 패턴 매처 - 새로 작성 또는 재설정?
  • 다음 c# - 일부 제한이있는 JOIN을 구현하는 알고리즘