0

ログインフォームがあり、別のソースからいくつかのコードを変更して、自分の状況で機能するようにしました。番号が空または「無限」であるため、ログインが無効な場合にエラーが発生します。

public int Validate_Login(String Username, String Password)
{

    //SqlConnection con = new SqlConnection(@"User id=judgment_day;Password=Kit$hen;Server=216.40.232.82, 2153;Database=new_judgment-system");
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["CityCollectionCSharp.Properties.Settings.newCityCollectionConnectionString"].ConnectionString);
    SqlCommand cmdselect = new SqlCommand();
    cmdselect.CommandType = CommandType.StoredProcedure;
    cmdselect.CommandText = "[dbo].[prcLoginv]";
    cmdselect.Parameters.Add("@Username", SqlDbType.VarChar, 50).Value = Username;
    cmdselect.Parameters.Add("@UPassword", SqlDbType.VarChar, 50).Value = Password;
    cmdselect.Parameters.Add("@OutRes", SqlDbType.Int, 4);
    cmdselect.Parameters["@OutRes"].Direction = ParameterDirection.Output;
    cmdselect.Connection = con;
    int Results = 0;

    try
    {
        con.Open();
        cmdselect.ExecuteNonQuery();
        Results = (int)cmdselect.Parameters["@OutRes"].Value;
    }
    catch (SqlException ex)
    {
        lblMessage.Text = ex.Message;
    }
    finally
    {
        cmdselect.Dispose();

        if (con != null)
        {
            con.Close();
        }
    }
    return Results;
}

エラーは次の行で発生します。

Results = (int)cmdselect.Parameters["@OutRes"].Value;

コードがここにある無効なログインをトリガーする有効な整数ではない場合、エラー処理をどのように行うのでしょうか。

protected void btnlogin_Click(object sender, EventArgs e)
{
    int Results = 0;


    if (txtUsername.Text != null && txtPassword.Text != null)
    {
        Results = Validate_Login(txtUsername.Text, txtPassword.Text);

        if (Results > 0)
        {
            lblMessage.Text = "Login is Good";

            GlobalVariables.Globals.SetGlobalInt(Results);
            lblMessage.Text = "'" + GlobalVariables.Globals.GlobalInt + "'";
            this.Hide();
            frmSwitch frm = new frmSwitch();
            frm.Show();   
        }
        else
        {
            lblMessage.Text = "Invalid Login";
            lblMessage.ForeColor = System.Drawing.Color.Red;
        }
    }
    else
    {
        lblMessage.Text = "Please make sure that the username and the password is Correct";
    }
}
4

2 に答える 2

1

コードの大部分が整っているようです。例外の処理方法を理解していないと思います-例外処理を読んでください。以下の例に従うことができるはずです。

発生する正確な内容を指定しないためException、一般的な Excepion ハンドラーを追加しました。

    try
    {
        con.Open();
        cmdselect.ExecuteNonQuery();
        // Check for null values
        if (cmdselect.Parameters["@OutRes"].Value != DBNull.Value)
        {
           Results = (int)cmdselect.Parameters["@OutRes"].Value;
        }
    }
    catch (SqlException ex)
    {
        lblMessage.Text = ex.Message;
    }
    catch (Exception generalEx)
    {
        // Do something with the error - Just displaying for now
        lblMessage.Text = ex.Message;
    }
    finally
    {
        cmdselect.Dispose();

        if (con != null)
        {
            con.Close();
        }
    }

コードは説明用です。必要に応じて編集してください。

于 2012-12-03T14:50:05.560 に答える
0

これを試して:

try
{
    con.Open();
    cmdselect.ExecuteNonQuery();
    object o = (int)cmdselect.Parameters["@OutRes"].Value;
    if (o == DBNull.Value)
        return 0;
    return (int)o;
}
catch (SqlException ex)
{
    lblMessage.Text = ex.Message;
}
finally
....

finallyブロックがリソースを処理します。

于 2012-12-03T14:57:37.050 に答える