更新集命令可在Access中使用,但不能在带有@parameters的Visual Studio中使用

时间:2019-03-15 15:13:24

标签: c# sql ms-access

我一直在为自己的公司从事个人项目,以控制库存水平,以练习C#。

我希望我的应用程序通过tblJuiceStock搜索,找到与用户输入内容匹配的FlavourID,并通过UPDATE SET查询更新该记录的库存。

 public void InsertJuiceStockWithCheck()
    {
        using (OleDbConnection conn = new OleDbConnection())
        {
            conn.ConnectionString = ConnectionString;
            conn.Open();

            string tblJuiceStockCheck = "SELECT FlavourID, Quantity FROM tblJuiceStock";
            OleDbCommand cmdCheck = new OleDbCommand(tblJuiceStockCheck, conn);
            OleDbDataAdapter daCheck = new OleDbDataAdapter(cmdCheck);
            DataTable dtCheck = new DataTable();
            daCheck.Fill(dtCheck);

            foreach (DataRow row in dtCheck.Rows)
            {
                if ((int)row["FlavourID"] == fID)
                {
                    int currentQty = (int)row["Quantity"];
                    int updatedQty = currentQty + qty;
                    string tblJuiceStockExisting = @"UPDATE tblJuiceStock
                                                    SET Quantity = @newquantity 
                                                    WHERE FlavourID = @flavourID";
                    OleDbCommand cmdJuiceStockExisting = new OleDbCommand(tblJuiceStockExisting, conn);
                    cmdJuiceStockExisting.Parameters.AddWithValue("@flavourID", fID);
                    cmdJuiceStockExisting.Parameters.AddWithValue("@newquantity", updatedQty);
                    cmdJuiceStockExisting.ExecuteNonQuery();
                    matchFound = true;
                    break;
                }

            }

            if (!matchFound)
            {
                string tblJuiceStockNew = "INSERT INTO tblJuiceStock (FlavourID, Quantity, MinStockPOS) VALUES (@fID, @quantity, @minstock)";
                OleDbCommand cmdJuiceStockNew = new OleDbCommand(tblJuiceStockNew, conn);
                cmdJuiceStockNew.Parameters.AddWithValue("@fID", fID);
                cmdJuiceStockNew.Parameters.AddWithValue("@quantity", qty);
                cmdJuiceStockNew.Parameters.AddWithValue("@minstock", amt);
                cmdJuiceStockNew.ExecuteNonQuery();
            }
        }
    }

请注意:当我用相同的值替换参数时,此查询在Access中工作正常。同样,使用断点,我确定参数已设置正确的值,分配给它们的变量是在另一个方法中获取的,所有方法都在Submit button事件中调用。

但是,TblJuiceStock中的“数量”值保持不变。

My tblJuiceStock table

1 个答案:

答案 0 :(得分:0)

经过一段时间的讨论,答案很简单。 OLEDB确实可以使用命名参数,但是必须声明它们,如果不声明它们,它们将使用参数定位来匹配它们。

我的问题是,在查询字符串中,我先使用@newquantity,然后使用@flavourID,而在添加参数时,我先添加了@flavourID,然后又添加了@newquantity。