2013-01-10 49 views
2

這裏是我的代碼:我應該如何在SQL查詢中實現IF語句?

string cmdstr = "UPDATE itemsordered i " + 
       "INNER JOIN"+ 
        "( SELECT itemsOrdered_quantity, itemsOrdered_ID, "+ 
          "IF itemsOrdered_quantity = '"+quantityTxtBox.Text+"' SELECT 'EQUAL' "+ 
          "IF itemsOrdered_quantity < '" + quantityTxtBox.Text + "' SELECT 'LESS' " + 
          "IF itemsOrdered_quantity > '" + quantityTxtBox.Text + "' SELECT 'MORE' " + 
         "END AS r "+ 
         "FROM itemsordered "+ 
        ") res ON i.itemsOrdered_ID = res.itemsOrdered_ID "+ 
       "INNER JOIN stocksdb s ON s.stock_ID = i.stock_ID " + 
       "SET s.stock_quantity = (s.stock_quantity + i.itemsOrdered_quantity), " + 
        "s.stock_dateUpdated = '" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "', " + 
        "i.itemsOrdered_status = 'RECEIVED', " + 
        "i.itemsOrdered_dateReceived = '" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "'" + 
        "WHERE i.itemsOrdered_ID = '" + idTxtBox.Text + "' AND res.r = 'EQUAL'"; 
cmd = new MySqlCommand(cmdstr, db.mycon); 
cmd.ExecuteNonQuery(); 

MessageBox.Show("ITEM RESTOCKED!"); 

我真正想要做的是,如果itemsOrdered_quantity等於在quantityTxtBox的值,那麼它會通過增加對itemsOrdered_quantity量的電流量更新s.stock_quantity

我還想做其他的IF子句。但我想先解決這個困境。

它在cmd.ExecuteNonQuery上返回一個錯誤,並指向我的SQL字符串'near'我的IF語句。

+1

請使用參數而不是連續的將串連在一起。目前你的代碼容易受到[SQL注入](http://www.sommarskog.se/dynamic_sql.html#SQL_injection)的影響,所以用戶可以幫助你自己處理數據,刪除或更新他們想要的任何字段或行等。它的性能也更好。 – Bridge

+0

感謝您的提示!但我已經處理了按鍵事件,只允許TextBox上的數字 –

+1

由於性能方面的原因,更好一些,就好像查詢文本發生了變化,然後創建了一個新的查詢計劃 - 此時您每次都在更改查詢文本;如果您使用參數,則不會在每次執行時更改文本,因此可以重複使用計劃。如果您想了解更多信息,請閱讀[this](http://dev.mysql.com/doc/refman/5.1/en/query-cache-operation.html)。 – Bridge

回答

1

MySQL使用了該CASE說法,基本的語法是:

SELECT CASE WHEN a = b THEN c ELSE d END CASE 

你也可以做

SELECT CASE WHEN a = b THEN c 
      WHEN a > b THEN e 
      ELSE d END CASE 
+0

謝謝!我將如何根據結果更新表格? –

+0

嘗試將「IF itemsOrdered_quantity ='」+ quantityTxtBox.Text +「'SELECT'EQUAL'」更改爲「CASE WHEN itemsOrdered_quantity ='」+ quantityTxtBox.Text +「'THEN'EQUAL'」之類的內容,然後針對三條線執行此操作 – twoleggedhorse

0

是u可以使用if statment

SELECT IF(1<2,'yes','no'); 
    //output -> 'yes' 
    //if 1<2 is true then return `yes` if not true return `no` 
0
select (case when itemsOrdered_quantity= '"+quantityTxtBox.Text+"'then 'EQUAL' else (case when itemsOrdered_quantity< '"+quantityTxtBox.Text+"' then 'LESS' else 'MORE' end) end) as r from itemsordered