2016-09-09 5 views
0

조건이 있지만 조건이 2인데이 코드 줄이 증가하고 있습니다. 일부 코드를 축소하여 현재와 똑같이 작동시킬 수 있습니까? 그냥 내가 conditions.Rest 코드를 확인하고 조건에 따라 코드 줄 줄이기

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

+0

어떤 조건으로 점검하고 있습니까? – owczarek

+0

@owczarek : 먼저 두 개의 드롭 다운 목록이 선택되고 두 번째 드롭 다운 목록이 하나만 선택된 경우. 프로젝트는 항상 선택되며, 0이 될 수 없습니다. – BNN

+1

(개인) 메소드 사용을 시작하십시오. 코드가 더 읽기 쉽게됩니다. –

답변

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

코드 블록에서 방법은 당신이 필요로하는 매개 변수를 노출 확인하고 모두 다른 매개 변수

을 가진 블록 경우 새로운 메소드를 호출 동일
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);   
}