1

私が持っているコードの何が問題なのか、誰でも指摘できますか? 最初の関数は、2 番目の関数とは異なる aspx ファイルにあります。

    protected void btnManageUsersAddUser_Click(object sender, EventArgs e)
{
    if (clsDataLayer.SaveUser(Server.MapPath("PayrollSystem_DB.mdb"), txtManageUsersName.Text, txtManageUsersPassword.Text, ddlSecurityLevel.SelectedValue))
    {
        lblAddUserMsg.Text = "The user was successfully added";
        grdManagePersonnel.DataBind();
    }
    else
    {
        lblAddUserMsg.Text = "The user was not successfully added";
    }

以下の関数はもともと「void」ではなく「bool」になっているのですが、先生から値が返らないというエラーが出たので「void」に変更するように言われました。

    public static void SaveUser(string Database, string UserName, string UserPassword, string SecurityLevel)
{

    bool recordSaved;

    try
    {
        // Create connection
        OleDbConnection conn = new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;" +
                                                   "Data Source=" + Database);
        conn.Open();
        OleDbCommand command = conn.CreateCommand();
        string strSQL;

        // Insert to tblUserLogin
        strSQL = "Insert into tblUserLogin " +
                 "(UserName, UserPassword, SecurityLevel) values ('" +
                 UserName + "', '" + UserPassword + "', '" + SecurityLevel + "')";

        // Process data
        command.CommandType = CommandType.Text;
        command.CommandText = strSQL;

        // Add your comments here
        command.ExecuteNonQuery();

        // Closes the transaction when true
        conn.Close();
        recordSaved = true;


    }
            catch (Exception ex)
    {

    }

}
4

3 に答える 3

1

私はあなたの教授の推薦に同意しません。メソッドの戻り値の型を void に変更するのは、すべてのパスが値を返さないためです。

より良い解決策である IMO は、すべてのパスが確実に値 (true または false) を返すようにすることです。

たとえば、メソッドで次のように変更します。

bool recordSaved;

に:

bool recordSaved = false;

次に、tryセクションの最後 (catch行の前) に次のように追加します。

recordSaved = true;

次にrecordSaved、メソッドを終了する前に戻ります。

return recordSaved;

これらの変更により、メソッドはrecordSaved値を false に設定します。レコードが保存されている場合にのみ true に設定されます。次に、値を返し、ifチェックでメソッドを使用できます。

完全なコードは次のようになります。

public static bool SaveUser(string Database, string UserName, string UserPassword, string SecurityLevel)
{

    bool recordSaved = false;

    try
    {
        // do your save
        recordSaved = true;
    }
    catch (Exception ex)
    {
       // Handle the exception (logging, etc)
    }

    return recordSaved;
}
于 2013-06-24T00:23:10.960 に答える