2014-01-18 33 views
0

我想將Sql參數添加到我的項目,但我有一個類中的數據庫連接。如何將我去加入他們的代碼試圖讀取employerId作爲列名使用參數與數據庫連接類

我在一類這個代碼閱讀和從數據庫返回:

public SqlDataReader ExecuteQuery(String query)   
{ 
    SqlCommand cmd = new SqlCommand(query,sqlConn); 
    SqlDataReader reader = cmd.ExecuteReader();     
    return reader; 
} 

這個代碼在Web服務:

[WebMethod] 
public string CheckTime1(string employerId) 
{ 
    try 
    { 
     UseDatabase useDb = new UseDatabase("database.mdf"); 
     string queryString = "SELECT * FROM [employer] WHERE [employerId] =" + employerId; 
     useDb.ConnectToDatabase(); 

     SqlDataReader dbReader = useDb.ExecuteQuery(queryString); 
     if (dbReader != null && dbReader.HasRows) 
     { 
      return "RECORDS EXIST"; 
     } 
     else if (dbReader == null) 
     { 
      return "RECORDS DONT EXIST"; 
     } 
     else 
     { 
      return "Error"; 
     }  
     useDb.DisconectDatabase(); 
    } 
    catch (Exception exq) 
    { 
     return exq.ToString(); ; 
    } 
} 
+1

這可能是我,但你可以澄清你的問題有點好嗎? –

+2

不是一個答案,而是一個建議,這些使用「全部製作」數據庫類的方法通常比收益更痛苦。該課程通常不完整,降低複雜性所需的權衡對性能或安全性有直接影響。我建議投入一些時間來使用已經過測試的[Dapper](http://code.google.com/p/dapper-dot-net/)這樣的ORM,並且它的速度非常快,而不是試圖修復你的數據庫類。 – Steve

+0

爲了使用'SqlParameter',你需要一個'SqlCommand'。看起來你已經在'UseDatabase'類中包裝了'SqlConnection'?這是否支持運行'SqlCommand'? – Yuck

回答

0

雖然我強烈建議您重新考慮從頭開始你的數據訪問層,這裏有一個簡單的解決問題的方法:

public SqlDataReader ExecuteQuery(String query, params object[] p) 
{ 
    SqlCommand cmd = new SqlCommand(query, sqlConn); 
    for (int i = 0; i < p.Length; i++) 
    { 
     cmd.Parameters.Add(new SqlParameter("@p"+i, p[i])); 
    } 

    SqlDataReader reader = cmd.ExecuteReader(); 
    return reader; 
} 

然後調用它像這樣:

public string CheckTime1(string employerId) 
{ 
     ... 

     string queryString = "SELECT * FROM [employer] WHERE [employerId] = @p0"; 

     SqlDataReader dbReader = useDb.ExecuteQuery(queryString, employerId); 

     ... 
} 
+0

爲什麼'params對象[]'而不僅僅是'IEnumerable '?你還假設OP可以修改'UseDatabase'類。 OP沒有說明該類別的所有者是誰,因此它可能不是一種選擇。所有的猜測當然是因爲這個問題缺乏如此多的重要信息。 – Yuck

+0

確實,OP沒有說明誰擁有'UseDatabase'類。是的,您可以直接傳遞SqlParameters或Dictionary 來構造參數。但是,使用隱式命名參數似乎是最簡單的解決方案。這種設計適合整體設計。不要誤解我的意思,我不會推薦這是最先進的DAL,我只是說這回答了這個問題。 – TomT