【问题标题】:SQL Update Query returning errorSQL 更新查询返回错误
【发布时间】:2016-10-05 09:20:05
【问题描述】:
OleDbCommand cmd = new OleDbCommand("SELECT Stock FROM Products WHERE ID=" + ProductID + ";", conn); //run the database query
OleDbDataReader cusReader = cmd.ExecuteReader(); //read the result of the query
cusReader.Read();           
ProductStock = (int)cusReader.GetValue(0);
cusReader.Close();
MessageBox.Show((ProductStock).ToString()); // checks that the form is being accessed and the SELECT query works

OleDbCommand cmd1 = new OleDbCommand("UPDATE Products SET Stock=" + (ProductStock - 1) + "WHERE ID= " + ProductID +";", conn);

try
{
   if (cusReader.RecordsAffected > 0)
   {
      MessageBox.Show("no issue was experienced");
   }
   else
   {
      MessageBox.Show("An issue occured when decreasing stock");
   }
   cusReader.Close();
}
catch (Exception ex)
{
   MessageBox.Show("An error occured in query.\n" + ex.Message);
}

更新查询返回“出现问题”消息。显示变量 Productstock 的消息框确实返回了正确的值。谁能解释一下如何解决这个问题?

【问题讨论】:

  • 你还在执行更新语句吗?
  • 您可能想在cmd1 上致电ExecuteNonQuery。我想这就是@Dirk 的意思。
  • 不工作的代码是从一个完美工作的更新查询中逐字复制的,所以我假设我有
  • @peter.petrov 是的,当然也可以像您在回答中所说的那样在查询中放置一个空格。
  • 我不确定如何使用ExecuteNonQuery

标签: c# sql sql-server ms-access


【解决方案1】:

+ "WHERE ID= " +中的WHERE之前放一个空格

另外,请务必在cmd1 上致电ExecuteNonQuery

【讨论】:

    【解决方案2】:

    请试试这个。它应该可以工作

    OleDbCommand cmd1 = new OleDbCommand("UPDATE Products SET Stock=" + (ProductStock - 1) + " WHERE ID= " + ProductID, conn);
    

    【讨论】:

      【解决方案3】:
      OleDbCommand cmd1 = new OleDbCommand("UPDATE Products SET Stock=" + (ProductStock - 1) + " WHERE ID= " + ProductID +";", conn);
      

      请使用上述命令。

      问题:股票价值和位置之间没有空格

      【讨论】:

        【解决方案4】:

        尝试更新一次性(不要分开selectupdate:有人可以修改数据之后你已经执行select但是之前你已经开始update),然后检查受影响的行。让你的 sql 变得可读以避免明显的错误。

        string sql = 
          // Parametrize your query or at least format it out: 
          $@"update Products
                set Stock = Stock - 1
              where Id = {ProductId} and
                    Stock >= 1 -- added: you must have stock to decrease";
        
        // Wrap IDisposable into using
        using (OleDbCommand cmd = new OleDbCommand(sql, conn)) {
          int affected = cmd.ExecuteNonQuery();
        
          if (affected > 0) 
            MessageBox.Show("No issue was experienced");
          else
            MessageBox.Show("An issue occured when decreasing stock");
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-16
          • 2014-11-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多