根据条件减少代码行

时间:2016-09-09 06:08:23

标签: c# asp.net

我有2条条件,但随着这行代码的增加。我可以减少一些代码,使其与现在一样工作。

if (ddlProject.SelectedValue != "0" && ddlBuilding.SelectedValue != "0")
    {
        string queryInsert;
        DataTable dtval = new DataTable();
        dtval = CF.ExecuteDT("Select BOOKING_NO from xxacl_pN_LEASES_ALL where project_id = '" + ddlProject.SelectedValue + "' and building_id = '" + ddlBuilding.SelectedValue + "'");

        for (int i = 0; i < dtval.Rows.Count; i++)
        {
            string StrSeq = CF.ExecuteScaler("Select xxcus.xxacl_pN_LEASES_ALL_SEQ.next_val from xxacl_pN_LEASES_ALL");
            queryInsert = "Insert into xxacl_pN_LEASES_ALL_h select '" + StrSeq + "', SYSDATE FROM xxacl_pn_leases_all where booking_no = '" + dtval.Rows[i]["BOOKING_NO"].ToString() + "'";
            OracleConnection conUpdate = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["OracleConn"].ToString());
            OracleCommand cmd1 = new OracleCommand();
            string allQueryUpdate = queryInsert;
            cmd1.CommandText = allQueryUpdate;
            cmd1.Connection = conUpdate;
            conUpdate.Open();
            cmd1.ExecuteNonQuery();
        }

        string queryUpdate;
        queryUpdate = "update xxacl_pN_LEASES_ALL set ASSIGNED_TO = '" + ddlSalesUser.SelectedValue + "'";

        OracleConnection conUpdate1 = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["OracleConn"].ToString());
        OracleCommand cmd2 = new OracleCommand();
        string allQueryUpdate1 = queryUpdate;
        cmd2.CommandText = allQueryUpdate1;
        cmd2.Connection = conUpdate1;
        conUpdate1.Open();
        cmd2.ExecuteNonQuery();
        ScriptManager.RegisterStartupScript(this, this.GetType(), "alert", "alert('Record updated successfully');window.location ='FrmHoldingCoordinateUpdate.aspx?Redirect=" + Request.QueryString["Redirect"] + "&userid=" + Request.QueryString["userid"].ToString() + "';", true);        
    }
    if (ddlProject.SelectedValue != "0" && ddlBuilding.SelectedValue == "0")
    {
        string queryInsert;
        DataTable dtval = new DataTable();
        dtval = CF.ExecuteDT("Select BOOKING_NO from xxacl_pN_LEASES_ALL where project_id = '" + ddlProject.SelectedValue + "' and building_id = '" + ddlBuilding.SelectedValue + "'");

        for (int i = 0; i < dtval.Rows.Count; i++)
        {
            string StrSeq = CF.ExecuteScaler("Select xxcus.xxacl_pN_LEASES_ALL_SEQ.next_val from xxacl_pN_LEASES_ALL");
            queryInsert = "Insert into xxacl_pN_LEASES_ALL_h select '" + StrSeq + "', SYSDATE FROM xxacl_pn_leases_all where booking_no = '" + dtval.Rows[i]["BOOKING_NO"].ToString() + "'";
            OracleConnection conUpdate = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["OracleConn"].ToString());
            OracleCommand cmd1 = new OracleCommand();
            string allQueryUpdate = queryInsert;
            cmd1.CommandText = allQueryUpdate;
            cmd1.Connection = conUpdate;
            conUpdate.Open();
            cmd1.ExecuteNonQuery();
        }

        string queryUpdate;
        queryUpdate = "update xxacl_pN_LEASES_ALL set ASSIGNED_TO = '" + ddlSalesUser.SelectedValue + "'";

        OracleConnection conUpdate1 = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["OracleConn"].ToString());
        OracleCommand cmd2 = new OracleCommand();
        string allQueryUpdate1 = queryUpdate;
        cmd2.CommandText = allQueryUpdate1;
        cmd2.Connection = conUpdate1;
        conUpdate1.Open();
        cmd2.ExecuteNonQuery();
        ScriptManager.RegisterStartupScript(this, this.GetType(), "alert", "alert('Record updated successfully');window.location ='FrmHoldingCoordinateUpdate.aspx?Redirect=" + Request.QueryString["Redirect"] + "&userid=" + Request.QueryString["userid"].ToString() + "';", true);        
    }

我正在检查条件.Rest代码相同

3 个答案:

答案 0 :(得分:2)

我使用winMerge工具比较了在两个if语句中编写的代码。甚至一个比特也没有区别。您应该只创建一个私有方法,以在模块中启用代码重用。这就是它的外观。毫无疑问,即使在我编写的新函数UpdateDatabase中也可以进行更多重构,以使其与clean-code的原则保持一致。

if (ddlProject.SelectedValue != "0" && ddlBuilding.SelectedValue != "0")
{
   UpdateDatabase();      
}

if (ddlProject.SelectedValue != "0" && ddlBuilding.SelectedValue == "0")
{
    UpdateDatabase();       
}

private void UpdateDatabase()
{
       string queryInsert;
        DataTable dtval = new DataTable();
        dtval = CF.ExecuteDT("Select BOOKING_NO from xxacl_pN_LEASES_ALL where project_id = '" + ddlProject.SelectedValue + "' and building_id = '" + ddlBuilding.SelectedValue + "'");

        for (int i = 0; i < dtval.Rows.Count; i++)
        {
            string StrSeq = CF.ExecuteScaler("Select xxcus.xxacl_pN_LEASES_ALL_SEQ.next_val from xxacl_pN_LEASES_ALL");
            queryInsert = "Insert into xxacl_pN_LEASES_ALL_h select '" + StrSeq + "', SYSDATE FROM xxacl_pn_leases_all where booking_no = '" + dtval.Rows[i]["BOOKING_NO"].ToString() + "'";
            OracleConnection conUpdate = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["OracleConn"].ToString());
            OracleCommand cmd1 = new OracleCommand();
            string allQueryUpdate = queryInsert;
            cmd1.CommandText = allQueryUpdate;
            cmd1.Connection = conUpdate;
            conUpdate.Open();
            cmd1.ExecuteNonQuery();
        }

        string queryUpdate;
        queryUpdate = "update xxacl_pN_LEASES_ALL set ASSIGNED_TO = '" + ddlSalesUser.SelectedValue + "'";

        OracleConnection conUpdate1 = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["OracleConn"].ToString());
        OracleCommand cmd2 = new OracleCommand();
        string allQueryUpdate1 = queryUpdate;
        cmd2.CommandText = allQueryUpdate1;
        cmd2.Connection = conUpdate1;
        conUpdate1.Open();
        cmd2.ExecuteNonQuery();
        ScriptManager.RegisterStartupScript(this, this.GetType(), "alert", "alert('Record updated successfully');window.location ='FrmHoldingCoordinateUpdate.aspx?Redirect=" + Request.QueryString["Redirect"] + "&userid=" + Request.QueryString["userid"].ToString() + "';", true);        
}

答案 1 :(得分:0)

从代码块中创建一个方法,公开所需的参数,并在具有不同参数的两个IF块中调用新方法

答案 2 :(得分:0)

根据上述答案改进,我认为不需要多个IF条件。

if (ddlProject.SelectedValue != "0")
{
   UpdateDatabase();      
}

private void UpdateDatabase()
{
       string queryInsert;
        DataTable dtval = new DataTable();
        dtval = CF.ExecuteDT("Select BOOKING_NO from xxacl_pN_LEASES_ALL where project_id = '" + ddlProject.SelectedValue + "' and building_id = '" + ddlBuilding.SelectedValue + "'");

        for (int i = 0; i < dtval.Rows.Count; i++)
        {
            string StrSeq = CF.ExecuteScaler("Select xxcus.xxacl_pN_LEASES_ALL_SEQ.next_val from xxacl_pN_LEASES_ALL");
            queryInsert = "Insert into xxacl_pN_LEASES_ALL_h select '" + StrSeq + "', SYSDATE FROM xxacl_pn_leases_all where booking_no = '" + dtval.Rows[i]["BOOKING_NO"].ToString() + "'";
            OracleConnection conUpdate = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["OracleConn"].ToString());
            OracleCommand cmd1 = new OracleCommand();
            string allQueryUpdate = queryInsert;
            cmd1.CommandText = allQueryUpdate;
            cmd1.Connection = conUpdate;
            conUpdate.Open();
            cmd1.ExecuteNonQuery();
        }

        string queryUpdate;
        queryUpdate = "update xxacl_pN_LEASES_ALL set ASSIGNED_TO = '" + ddlSalesUser.SelectedValue + "'";

        OracleConnection conUpdate1 = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["OracleConn"].ToString());
        OracleCommand cmd2 = new OracleCommand();
        string allQueryUpdate1 = queryUpdate;
        cmd2.CommandText = allQueryUpdate1;
        cmd2.Connection = conUpdate1;
        conUpdate1.Open();
        cmd2.ExecuteNonQuery();
        ScriptManager.RegisterStartupScript(this, this.GetType(), "alert", "alert('Record updated successfully');window.location ='FrmHoldingCoordinateUpdate.aspx?Redirect=" + Request.QueryString["Redirect"] + "&userid=" + Request.QueryString["userid"].ToString() + "';", true);        
}