Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何根据查询中IF语句的结果进行更新?_C#_Mysql_If Statement - Fatal编程技术网

C# 如何根据查询中IF语句的结果进行更新?

C# 如何根据查询中IF语句的结果进行更新?,c#,mysql,if-statement,C#,Mysql,If Statement,正如上面的问题所说,我的查询中有一个IF子句。现在我想根据IF子句的结果进行更新。你知道我该怎么做吗 这是我的密码: string cmdstr = "UPDATE itemsordered i " + "INNER JOIN" + "( SELECT itemsOrdered_quantity, itemsOrdered_ID, " + "CASE WHEN it

正如上面的问题所说,我的查询中有一个IF子句。现在我想根据IF子句的结果进行更新。你知道我该怎么做吗

这是我的密码:

string cmdstr = "UPDATE itemsordered i " +
                "INNER JOIN" +
                    "(  SELECT itemsOrdered_quantity, itemsOrdered_ID,  " +
                            "CASE WHEN itemsOrdered_quantity = '" + quantityTxtBox.Text + "' THEN 'EQUAL' " +
                                 "WHEN itemsOrdered_quantity < '" + quantityTxtBox.Text + "' THEN 'LESS' " +
                                 "WHEN itemsOrdered_quantity > '" + quantityTxtBox.Text + "' THEN '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 " +
               "IF (res.r = 'EQUAL') " +
               "BEGIN " +
               "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 + "' " +
               "END " +
               "IF (res.r = 'LESS') " +
               "BEGIN " +
               "SET s.stock_quantity = (s.stock_quantity + i.itemsOrdered_quantity), " +
                   "s.stock_dateUpdated = '" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "', " +
                   "i.itemsOrdered_quantity = (i.itemsOrdered_quantity - " + quantityTxtBox.Text + "), " +
                   "i.itemsOrdered_dateReceived = '" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "' " +
                   "WHERE i.itemsOrdered_ID = '" + idTxtBox.Text + "' " +
               "END";
cmd = new MySqlCommand(cmdstr, db.mycon);
cmd.ExecuteNonQuery();

MessageBox.Show("ITEM RESTOCKED!");
它在cmd.ExecuteNonQuery上返回一个错误,并表示firstIF子句附近有错误。

而不是IF。。。首先,使用CASE表达式。删除开始。。。IF和只有一个SET子句。比如:

SET s.stock_quantity = CASE 
                         WHEN res.r = 'EQUAL' THEN s.stock_quantity + i.itemsOrdered_quantity
                         ELSE ...
                       END,
   s.stock_dateUpdated = CASE 
                           WHEN res.r = 'EQUAL' THEN ...
                           ELSE ...
                         END,
   ....
...
我会去掉IF块,得到两个不同的SQL语句


在每个查询的WHERE子句中放置不同的IF条件。

您能提供完整的错误消息吗!!!如果……之后开始?我做了。它说第一个IF子句附近有一个错误。您需要哪种类型的错误消息?我应该删除BEGIN吗?使用您的cmdstr并直接在mysql中运行它,您可能会收到更好的错误消息。这会起作用,但您也可以将更新分解为两个具有不同WHERE子句的单独更新查询。我想这是个人喜好。@Tom是的,你说得对。但是我不明白OP在做什么,所以我建议这个解决方案。@Mahmoud-你的代码非常好,我只是说有两种方法可以做到这一点。@John-如果有两个查询,代码会更长,但会更干净,因为对于1个查询,您需要为每个要更新的字段提供一个CASE语句。尽管对于非常大的数据集,1个查询可能运行得更快。