2015-05-04 109 views
0

是否可以結合使用兩個不同參數的WHERE子句?我必須將兩個參數傳遞給此查詢以進行連接。where子句和多個參數C#?

這裏是我的代碼:

using (var conn = new MySqlConnection(connStr)) 
{ 
    string sSQL = "SELECT * FROM head_doc h INNER JOIN doc_details d ON h.id_doc = d.id_doc INNER JOIN clients c ON c.id_client = h.id_client WHERE t.id_doc="+ Session["id_doc"].ToString()+ "AND id_client="+ Session["id_client"].ToString()); 
    MySqlCommand cmd = new MySqlCommand(sSQL, conn); 
    cmd.CommandType = CommandType.Text; 
    MySqlDataAdapter adp = new MySqlDataAdapter(cmd); 
    adp.Fill(dt); 
} 

顯然,我不能這樣做,因爲mysql反對這種語法。我怎樣才能做到這一點?

+1

你得到了什麼錯誤信息? –

+2

它拒絕語法,因爲您沒有空格。 「並且 - 在此之前需要一個空格 – MajkeloDev

+1

同意@MajkeloDev請不要在推薦使用參數而不是連接命令中的值 –

回答

2

你需要引號和空格:

string sSQL = "SELECT * FROM head_doc h INNER JOIN doc_details d ON h.id_doc = d.id_doc INNER JOIN clients c ON c.id_client = h.id_client WHERE t.id_doc='"+ Session["id_doc"].ToString()+ "' AND id_client='"+ Session["id_client"].ToString()+"'"); 

然而更好的使用參數:

string sSQL = "SELECT * FROM head_doc h INNER JOIN doc_details d ON h.id_doc = d.id_doc INNER JOIN clients c ON c.id_client = h.id_client WHERE [email protected] AND [email protected]"); 

     MySqlCommand cmd = new MySqlCommand(sSQL, conn); 
     cmd.Parameters.AddWithValue("@par1", Session["id_doc"].ToString()); 
     cmd.Parameters.AddWithValue("@par2", Session["id_client"].ToString()); 
     cmd.CommandType = CommandType.Text; 
     ... 

編輯: 如果確實id_client場兩個表中存在使用:

string sSQL = "SELECT * FROM head_doc h INNER JOIN doc_details d ON h.id_doc = d.id_doc INNER JOIN clients c ON c.id_client = h.id_client WHERE [email protected] AND [email protected]"); 
+0

我按照您的建議使用參數,但出現錯誤:where子句中的id_client是曖昧...... –

+0

似乎id_client存在於你的兩個表中看到我的編輯 – apomene

+0

另外,在參數!=必須使用'ToString()'。 – DeMama

0

嘗試變更

"AND id_client 

" AND id_client 

這可能是與第一個參數之後缺少空間的問題。

0

這是可能的,這裏最好的建議是由Nerd Nord提到參數。 但是我注意到,涉及id_doc的「t.id_doc」來自表t,並且在您的select中,我看不到帶別名t的表。 因此,使用參數語法,併爲您的id_doc找到適當的表別名。

0

謝謝大家。這是我最終使用的(工作)代碼。

 using (var conn = new MySqlConnection(connStr)) 
     { 
      string sSQL = "SELECT * FROM head_doc h INNER JOIN doc_details d ON h.id_doc = d.id_doc INNER JOIN clients c ON c.id_clients = h.id_clients WHERE [email protected] AND [email protected]"; 
      MySqlCommand cmd = new MySqlCommand(sSQL, conn); 
      cmd.CommandType = CommandType.Text; 
      cmd.Parameters.Add(new MySqlParameter("@par1", Session["id_doc"].ToString())); 
      cmd.Parameters.Add(new MySqlParameter("@par2", Session["id_client"].ToString())); 
      MySqlDataAdapter adp = new MySqlDataAdapter(cmd); 
      adp.Fill(dt); 
     }