2017-02-10 53 views
0

別人在我創建的工會選擇位於C#在同一服務器內2個數據庫視圖的方法改善,這裏是該方法的代碼:創建動態聯盟選擇在C#方法

public override DataSet GetDynamicReportData(string strSQL) { 

      var sbSQL = new StringBuilder(strSQL); 
      var finalQueryStr = new StringBuilder(strSQL); 

      sbSQL.Replace("SELECT DISTINCT ", ""); 

      var iamNEAS3 = 
       new StringBuilder(" UNION SELECT DISTINCT "); 

      var queryColumns = sbSQL.ToString().Split(','); 

      for (var i = 0; i <= queryColumns.Length - 1; i++) { 

       iamNEAS3.Append(queryColumns[i]); 

       if (i < queryColumns.Length - 1) { 
        iamNEAS3.Append(", "); 
       } else if (i == queryColumns.Length - 1) { 

        var appendMagic = 
         queryColumns[i].Replace(
          "From [dbo].[vw_Classified_ApplicationsFiles]", 
          "FROM [project_phoenix].[dbo].[vw_Classified_ApplicationFiles]") 

        iamNEAS3.Append(appendMagic); 

        // Systematic removal; thank you! 
        iamNEAS3.Replace(queryColumns[i], ""); 
       } 
      } 

      finalQueryStr.Append(iamNEAS3); 

      return DALDynamicReport.GetData(finalQueryStr.ToString()); 
     } 

現在接收一個字符串參數,其中

strSQL = "Select Distinct [Row1], [Row2], [Row3], [Row4] From [project_mongoose].[dbo].[vw_Classified_ApplicationsFiles] where [Row2] <= 200". 

我知道我的編程技巧是有限的,但有沒有辦法像我一樣不手工代碼呢?

+0

無論如何你需要創建動態行選擇?創建一個proc並直接使用它,我們更容易和易於管理。 –

+0

好主意骯髒的,但讓我們假設一個環境,我的數據源只是視圖,我無法訪問任何後端的實際數據庫 –

+0

爲什麼你不直接在這裏創建查詢字符串? –

回答

0

是。不要這樣做。甚至不要這樣想。你能想象像這樣組裝你的應用程序代碼,在字符串文字中浮動的碎片,其中一部分從其他地方被吸入,在最後一分鐘被添加一點,一點點替換(),然後執行以查看什麼會得到爭執出來,如果它運行?噩夢

我確定如果你看看要求很嚴格,你可以想出更好的方法。

+0

這就是我擔心的,它是一個菊花鏈 –