根据条件减少代码行数

本文关键字:代码 条件 | 更新日期: 2023-09-27 18:06:14

我有两个if条件,但是随着这行代码的增加。我能不能减少一些代码,让它像现在一样工作?

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);        
    }

我只是在检查条件。其余代码相同

根据条件减少代码行数

我使用winMerge工具比较了在两个if语句中编写的代码。绝对没有一点差别。您应该简单地创建一个私有方法来启用模块中的代码重用。这就是它可能的样子。毫无疑问,即使在我编写的新函数UpdateDatabase中,也可以进行更多的重构,以使其符合干净代码的原则。

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);        
}

改进上述答案,我认为也不需要多个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);        
}