3

別の関数で呼び出す必要がある次の関数があります。どうすればいいのかわからない?

private int IsValidUser()
{            
    int result = 0;
    string strQuery = "Select Email From AUser Where Email = @Email And Password = @Password ";
    SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]);

    SqlCommand Cmd = new SqlCommand(strQuery, con);
    //Cmd.CommandType = CommandType.StoredProcedure;

    Cmd.Parameters.AddWithValue("@Email", txtEmail.Text);
    Cmd.Parameters.AddWithValue("@Password", txtPassword.Text);
    con.Open();

    result = (int)Cmd.ExecuteScalar();

    if (result > 0)
    {
        //Session["SessionEmail"] = txtEmail.Text;
        Session[General.S_USEREMAIL] = txtEmail.Text;
        Response.Redirect("~/frmMyAccountMyProfile.aspx");
    }
    else
    {
        Literal1.Text = "Invalid Email/Password!";
    }
}

ボタンクリックイベントで以下のように呼び出そうとしています。

protected void btnSignIn_Click(object sender, EventArgs e)
{
    // Authenticate User
    bool blnValidUser = false;
    IsValidUser();
    blnValidUser = Convert.ToBoolean(IsValidUser().result.Value);
    if (blnValidUser)
    {
        // on Success - If remember me > Save to cookies
        //SaveUserDetailsToCookie();                       
    }
    else
    {
        // on Failure - Show error msg
    }
}
4

3 に答える 3

3

関数IsValidUserは int を返すように設計されています

(なんらかの理由で何も返さないため、私には不明です。このコードは決してコンパイルされません。)

bool次のように返すことで修正できます。

private bool IsValidUser()
{
        int result = 0;
        //since executeScalar is intended to retreive only a single value
        //from a query, we select the number of results instead of the email address
        //of each matching result.
        string strQuery = "Select COUNT(Email) From AUser Where Email = @Email And Password = @Password ";
        SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]);

        SqlCommand Cmd = new SqlCommand(strQuery, con);
        //Cmd.CommandType = CommandType.StoredProcedure;

        Cmd.Parameters.AddWithValue("@Email", txtEmail.Text);
        Cmd.Parameters.AddWithValue("@Password", txtPassword.Text);
        con.Open();

        result = (int)Cmd.ExecuteScalar();

        //returning a boolean comparator works like this :
        //will return true if the result is greater than zero, but false if it is not.
        return result > 0;
}

そして、次のように関数を呼び出すことができます:

blnValidUser = IsValidUser();
于 2013-03-28T09:08:36.140 に答える
1

IsValidUserint明らかにプロパティを持たない を返しresultます。しかし、その値を使用したいだけだと思います:

int valUserResult = IsValidUser();
bool blnValidUser = valUserResult == 1;

boolただし、最初にa を返すことを検討する必要があります。その方が読みやすいからです。

private bool IsValidUser()
{            
    bool result = false;
    // ...
    return result;
}
于 2013-03-28T09:11:15.820 に答える
0

関数を次のように変更します

private int IsValidUser()
   {
    int result = 0;
    string strQuery = "Select Email From AUser Where Email = @Email And Password = @Password ";
    SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]);

    SqlCommand Cmd = new SqlCommand(strQuery, con);
    //Cmd.CommandType = CommandType.StoredProcedure;

    Cmd.Parameters.AddWithValue("@Email", txtEmail.Text);
    Cmd.Parameters.AddWithValue("@Password", txtPassword.Text);
    con.Open();

    result = (int)Cmd.ExecuteScalar();

    if (result > 0)
    {
        //Session["SessionEmail"] = txtEmail.Text;
        Session[General.S_USEREMAIL] = txtEmail.Text;
        Response.Redirect("~/frmMyAccountMyProfile.aspx");
    }

    else
    {
        Literal1.Text = "Invalid Email/Password!";
    }
     return result;

}
}

そして、次のように呼び出します

protected void btnSignIn_Click(object sender, EventArgs e)
 {
    // Authenticate User
    int blnValidUser = IsValidUser();
    //Check if blnValidUser is greater than 0.
    //IsValidUser() will return value greater than 0 if the sql is successful else will return 0
    if (blnValidUser > 0)
    {
        // on Success - If remember me > Save to cookies
        //SaveUserDetailsToCookie();                       
    }
    else
    {
        // on Failure - Show error msg

    }
}
于 2013-03-28T09:09:04.497 に答える