Я пытаюсь провести инвентаризацию, используя FIFO. Все работает нормально. Это уже вставка и обновление. Моя проблема заключается в том, что всякий раз, когда в 1-й строке не хватает количества для лекарства, запрашиваемого клиентом, оно меняет значение на -1, а вычитает в другой строке с тем же идентификатором медикамента и обновляет запасы до отрицательного числа. Вот моя таблица Stocks_IN:
stocksID | ID | datereceive | dateexpiry | quantity |remainingstocks
1 | 1 | datehere | datehere | 10 | 10
2 | 1 | datehere | datehere | 5 | 5
У меня есть этот код в моей кнопке сохранения
private void button9_Click_1(object sender, EventArgs e)
{
DataGridViewRow row;
int quant = 0;
string query = @"INSERT INTO Stocks_Out(ID,idtran,quantity,user)
Values(@ID,@idtran,@quantity,@user)";
using (SqlConnection xcon = new SqlConnection(@"Server=MEAND\SQLEXPRESS;Database=SHC;Integrated Security=SSPI;"))
{
try
{
xcon.Open();
for (int n = 0; n < dataGridView2.Rows.Count - 1; n++)
{
row = dataGridView2.Rows[n];
using (SqlCommand xcom = new SqlCommand(query, xcon))
{
xcom.CommandType = CommandType.Text;
xcom.Parameters.AddWithValue("@ID", row.Cells["ID"].Value);
xcom.Parameters.AddWithValue("@idtran", row.Cells["idtran"].Value);
xcom.Parameters.AddWithValue("@quantity", row.Cells["quantity"].Value);
xcom.Parameters.AddWithValue("@user", row.Cells["user"].Value);
xcom.ExecuteNonQuery();
xcom.Dispose();
connection.Open();
quant = Convert.ToInt32(row.Cells["quantity"].Value.ToString());
SqlCommand xcom2 = connection.CreateCommand();
xcom2.CommandType = CommandType.Text;
xcom2.CommandText = "update Stocks_In set remainingquantity=remainingquantity-" + quant + " where ID= '" + row.Cells["ID"].Value + "'";
xcom2.ExecuteNonQuery();
xcom2.Dispose();
}
}
DialogResult result1 = MessageBox.Show("Are you sure you want to save this?",
"Important Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result1 == DialogResult.Yes)
{
Med b = new Med();
b.Show();
this.Hide();
}
}
catch (Exception)
{
throw;
}
finally
{
xcon.Close();
}
}
}
Так что, если я получу 11 лекарств, он вставляется в stocks_out и обновляет оставшиеся запасы в stocks_in. Но вместо того, чтобы возвращать значение 1-й строки в 0 и 2-е значение в 4, оно обновляет его до -1 (1-я строка) и -6 (2-я строка). Пожалуйста, помогите мне :( Эта вещь FIFO заставляет меня сходить с ума.
Вот обновленная таблица для Stocks_In:
stocksID | ID | datereceive | dateexpiry | quantity |remainingstocks
1 | 1 | datehere | datehere | 10 | -1
2 | 1 | datehere | datehere | 5 | -6