0

パスワードを手動で変更してユーザーにパスワードを送信したいのですが、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージが表示されます。エラー。私のタラの何が問題なのですか: ありがとう:

        Random r = new Random();
        string code = r.Next(100000, 9999999).ToString();

        //////////////////////////////////////////////////////////////////////////////////////////////

        string connStr = ConfigurationManager.ConnectionStrings["****"].ConnectionString;
        SqlConnection sqlconn = new SqlConnection(connStr);
        SqlCommand sqlcmd = new SqlCommand();
        sqlcmd = new SqlCommand("SELECT Count(ID) FROM RolInfo where username=@username", sqlconn);
        sqlcmd.Parameters.AddWithValue("@username", TextBox1.Text);

        sqlconn.Open();
        int count = ((int)sqlcmd.ExecuteScalar());


        sqlconn.Close();


        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        if (count != 0)
        {

          Sendmail();

            MembershipUser u = Membership.GetUser();
            u.ChangePassword(u.ResetPassword(), code);
        }
        else
        {
            lab_Message.Visible = true;
            lab_Message.Text = "This username is invalid.";
            lab_Message.ForeColor = System.Drawing.Color.Red;

        }

    }
    else
    {
        lab_Message.Visible = true;
        lab_Message.Text = "Please enter your username.";
        lab_Message.ForeColor = System.Drawing.Color.Red;
    }
    }
4

1 に答える 1

0

あなたは引数を渡していませんMembership.GetUser();

Membership.GetUser();現在ログインしているユーザーを取得します。ログインしていないため、 が返されnullます。ログインしている場合は、メンバーではなく、あなただけが返されます。

ユーザーを取得したい場合は、username. このような:

MembershipUser u = Membership.GetUser(TextBox1.Text);

アップデート

ユーザーが存在するかどうかを確認するために SQL データベースを呼び出す必要はありません。

代わりにこれを行うことができます。

   MembershipUser u = Membership.GetUser(TextBox1.Text);

   if (u != null){
      SendMail();
      u.ChangePassword(u.ResetPassword(), code);
   }else{
      lab_Message.Visible = true;
      lab_Message.Text = "This username is invalid.";
      lab_Message.ForeColor = System.Drawing.Color.Red;
   }

ちなみに、ユーザーのパスワードは に設定されませんcode。これは、セキュリティの質問に対するユーザーの回答に設定されます。ResetPasswordパスワードを自動生成されたものにリセットします。

ドキュメントについては、こちらを参照してください。http://msdn.microsoft.com/en-us/library/system.web.security.membershipuser.resetpassword.aspx

于 2012-12-14T16:24:38.220 に答える