2011-07-18 54 views
0

首先我給的兩種方法問題在C#中的數據訪問層添加SQL paramerters

public static List<FormGridEntity> GetAllCandidatesByProgram(string programShortName) 
    { 
     List<FormGridEntity> formGridEntities = null; 
     try 
     { 
      string cmd = SELECT + " WHERE " + CANDIDATE_PROGRAM_PA + " = " +  CANDIDATE_PROGRAM;`enter code here` 
      //string cmd = SELECT 

      DAOParameters dps = new DAOParameters(); 
      dps.AddParameter(CANDIDATE_PROGRAM_PA, programShortName); 
      List<SqlParameter> ps = Common.Methods.GetSQLParameters(dps); 
      SqlDataReader dataReader = QueryHandler.ExecuteSelectQuery(cmd, ps); 
      formGridEntities = Maps(dataReader); 
      dataReader.Close(); 
     } 

     catch (Exception exception) 
     { 
      throw exception; 
     } 
     return formGridEntities; 
    } 

例子,另一種方法是

public static List<FormGridEntity> GetAllCandidatesByDates(DateTime initialDate,DateTime finalDate) 
    { 
     List<FormGridEntity> formGridEntities = null; 
     try 
     { 
      string cmd = SELECT + " WHERE " + FORM_SUBMISSION_DATE_PA + " BETWEEN " + initialDate + " AND " + finalDate; 
      //string cmd = SELECT 

      DAOParameters dps = new DAOParameters(); 
      //What will I do here? since 
      **//dps.AddParameter(FORM_SUBMISSION_DATE_PA, initialDate); 
      //dps.AddParameter(FORM_SUBMISSION_DATE_PA, finalDate);** 
      List<SqlParameter> ps = Common.Methods.GetSQLParameters(dps); 
      SqlDataReader dataReader = QueryHandler.ExecuteSelectQuery(cmd, ps); 
      formGridEntities = Maps(dataReader); 
      dataReader.Close(); 
     } 

     catch (Exception exception) 
     { 
      throw exception; 
     } 
     return formGridEntities; 
    } 

我已經commentd了

這裏帽條款是所有常數,以上類似

private const string FORM_PURCHASING_DATE = "DateOfPurchase"; 
private const string FORM_PURCHASING_DATE_PA = "@DateOfPurchase" 
private const string FORM_SUBMISSION_DATE = "DateOfSubmission"; 
private const string FORM_SUBMISSION_DATE_PA = "@DateOfSubmission"; 

SELECT也被正確定義。我完美地使用了這個層。但是現在我發現了一個場景,我很困惑該怎麼做。到目前爲止,我一直在使用具有一對一關係的參數添加值。但是,在第二種方法中,我使用between運算符,其中兩個值是指一個參數,我會在這裏寫什麼來使事情正常工作。我已經評論了我想修改的特定區域。請儘可能幫助我。下面是方法GetSQLParameters public static List GetSQLParameters(DAOParameters dps) List parameters = new List();

 foreach (DictionaryEntry de in dps.hs) 
     { 
      SqlParameter p = new SqlParameter(); 
      p.ParameterName = de.Key.ToString(); 
      if (de.Value.ToString() == Convert.ToString(0)) 
      { 
       p.Value = DBNull.Value; 
      } 
      else 
      { 
       p.Value = de.Value; 
      } 

      parameters.Add(p); 
     } 

     return parameters; 
+0

我很困惑,一個參數的兩個值?你的意思是如果某個值適用於你改變參數值? – developerdoug

+0

在sql查詢中沒有關於操作符之間的事情,這裏使用兩個值作爲一個列值的邊界。 – Pankouri

+0

你能顯示Common.Methods.GetSQLParameters()方法的代碼嗎? – sll

回答

0

在GetAllCandidatesByDates(),也許你應該有:

FORM_SUBMISSION_DATE + "BETWEEN @initialDate AND @finalDate" 

,然後綁定initialDate爲 「@initialDate」 參數和finalDate爲 「@finalDate」 參數?現在你已經有了這種方式,你不使用這些日期的參數,而是將具體的DateTime值轉換爲字符串,並將這些字符串直接連接到最終的SQL中。

+0

這就是我正在尋找的答案! :)謝謝你的哥們。 – Pankouri