使用if和else块更改密码

本文关键字:密码 else if 使用 | 更新日期: 2023-09-27 17:57:28

我是想要通过在文本框中输入任何人的电子邮件地址和新密码来更改其密码的管理员。存储过程如下:

   Alter proc spChangePassword
  @Email varchar(100),
 @Passwordd varchar(100)
  as
   begin
   IF EXISTS (SELECT * FROM tblRegister WHERE Email=@Email) 
   begin
   UPDATE tblRegister
   SET Passwordd=@Passwordd where Email=@Email
  Select 0
   end
  ELSE
   BEGIN
  Select -1
  end
   end

后面的代码如下:

private void ChangePassword()
{
    string CS = ConfigurationManager.ConnectionStrings["ABCD"].ConnectionString;
    using(SqlConnection con = new SqlConnection(CS))
    {
        con.Open();
        SqlCommand cmd = new SqlCommand("spChangePassword", con);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@Email",txtEmail.Text);
        cmd.Parameters.AddWithValue("@Passwordd", txtPassword.Text);
        cmd.ExecuteNonQuery();
    }
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
    ChangePassword();
}

但我想使用if和else语句来检查表中是否存在该电子邮件。如果电子邮件存在,则更改密码,否则引发异常。我能做什么?

使用if和else块更改密码

您可以简单地更改过程的代码,并让它返回一个值。0表示密码已更新,-1表示没有类似于提供的电子邮件。

ALTER proc spChangePassword
    @Email varchar(100),
    @Passwordd varchar(100)
AS
BEGIN
IF EXISTS (SELECT * FROM Users WHERE Email=@Email) THEN 
BEGIN
    UPDATE tblRegister
    SET Passwordd=@Passwordd where Email=@Email
    SELECT 0 AS Result
END
ELSE
    BEGIN
        SELECT -1 AS Result
    END
END 

然后,您必须读取存储过程的结果并采取相应的操作。因此,您的服务器端代码必须更改为以下代码:

var reader = cmd.ExecuteReader();
while (reader.Read()) 
{
    if(int.Parse(reader["Result"].ToString())==0)
    {
         // success
    }
    else
    {
        // failure
    }
};

updateif语句中,您也可以使用以下语句:

Convert.ToInt32(reader["Result"])==0

我认为它会像符咒一样发挥作用。

在存储过程中添加

    Begin
    DECLARE @id AS INT
    SELECT @id = tblRegisterId FROM tblRegisterWHERE Email =@Email 
    IF @id IS not NULL
     Begin 
       UPDATE tblRegister
       SET Passwordd=@Passwordd where Email=@Email
       Select 1
     End
    Else
        Begin 
      Select 0
     End
    End

试试这个:-

private bool ChangePassword()
{
    string CS = ConfigurationManager.ConnectionStrings["ABCD"].ConnectionString;
    using(SqlConnection con = new SqlConnection(CS))
    {
        con.Open();
        SqlCommand cmd = new SqlCommand("spChangePassword", con);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@Email",txtEmail.Text);
        cmd.Parameters.AddWithValue("@Passwordd", txtPassword.Text);
        int count = cmd.ExecuteNonQuery();
        if (count > 0)
            return true;
        else
            return false;
    }
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
    bool success = ChangePassword(); //Use this success variable to show a message.
}

您也可以更改存储过程,但它不会抛出任何异常,只会进行检查。如果电子邮件存在,它将执行更新查询:-

Create proc spChangePassword
  @Email varchar(100),
  @Passwordd varchar(100)
as
begin
IF EXISTS ( SELECT * FROM tblRegister WHERE Email = @Email)
BEGIN
UPDATE tblRegister
  SET Passwordd=@Passwordd where Email=@Email
END
end

SQL

Create proc spChangePassword
  @Email varchar(100),
  @Passwordd varchar(100)
as
begin
 IF EXISTS ( SELECT * FROM tblRegister WHERE Email = @Email)
  BEGIN
   UPDATE tblRegister
    SET Passwordd=@Passwordd where Email=@Email
  END
 ELSE
  BEGIN
   RAISEERROR('Email does not exists',0,1)
  END
end

c#

string CS = ConfigurationManager.ConnectionStrings["ABCD"].ConnectionString;
using(SqlConnection con = new SqlConnection(CS))
{
    try{
    con.Open();
    SqlCommand cmd = new SqlCommand("spChangePassword", con);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@Email",txtEmail.Text);
    cmd.Parameters.AddWithValue("@Passwordd", txtPassword.Text);
    cmd.ExecuteNonQuery();
    }
    catch(SqlException ee)
    {
      ...
    }
}

尝试此存储过程(请使用IF EXISTS

 CREATE PROCEDURE InsertName
    (
      @Email varchar(25), 
      @Passwordd varchar(25)
    )
    AS
    IF EXISTS(SELECT 'True' FROM tblRegister WHERE Email = @Email)
    BEGIN
      --This means it exists,update
      UPDATE tblRegister
          SET Passwordd=@Passwordd where Email=@Email
 SELECT 'Changed successfully'
    END
    ELSE
    BEGIN
      --This means the record isn't in there already
      SELECT 'Does Not Exist' 
    END
private string ChangePassword()
{
    string CS = ConfigurationManager.ConnectionStrings["ABCD"].ConnectionString;
    using(SqlConnection con = new SqlConnection(CS))
    {
        con.Open();
        SqlCommand cmd = new SqlCommand("spChangePassword", con);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@Email",txtEmail.Text);
        cmd.Parameters.AddWithValue("@Passwordd", txtPassword.Text);
        return cmd.ExecuteNonQuery().ToString();
    }
}