Команда Update Set работает в Access, но не в Visual Studio с @parameters - PullRequest
0 голосов
/ 15 марта 2019

Я работаю над личным проектом для компании, в которой я работаю, чтобы контролировать уровни запасов, чтобы попрактиковаться в моем 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, когда я заменяю параметры одинаковыми значениями.Кроме того, используя точки останова, я определил, что для параметров установлены правильные значения, назначенные им переменные получены в другом методе, все методы вызываются в событии кнопки отправки.

Однако значение количества вTblJuiceStock остается прежним.

Моя таблица tblJuiceStock

1 Ответ

0 голосов
/ 15 марта 2019

Через некоторое время возиться с ответом было просто. OLEDB работает с именованными параметрами, но вы должны объявить их, если вы не объявляете их, они используют позиционирование параметров, чтобы сопоставить их.

Моя проблема заключалась в том, что в строке запроса у меня были сначала @newquantity и второй @flavourID, тогда как при добавлении параметров я сначала добавлял @flavourID, а затем @newquantity.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...