如何在C#和SQL Server中用条件实现fifo?

时间:2018-07-03 14:31:42

标签: c# sql sql-server windows winforms

我选择了多个具有相同产品名称,价格和数量的数据行,并根据它们在数据表中的主键值对其进行了排序。但是当我减少库存数量时,所有行的数量都减少。我希望我的代码根据在文本框中输入的用户数量检查库存数量,并仅从第一行减少库存。到目前为止,这是我能够做到的。预先为格式错误而道歉我是编程和stackoverflow的新手。

数据表具有列

Item_Name, Item_Quantity, Item_Price.

代码:

private void btn_save_Click(object sender, EventArgs e)
{
    SqlCommand cmd = con.CreateCommand();
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = "select * from stock_recieve where Item_Name like'" + comboBoxitem.Text + "'order by [Bill No] asc";

    cmd.ExecuteNonQuery();

    DataTable dt = new DataTable();
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(dt);

    foreach (DataRow dr in dt.Rows)
    {
        // DataRow row = dt.Select("Item_Quantity").FirstOrDefault();
        dt.Rows[0]["Item_Quantity"]=;

        int qty = 0;
        string pname = "";

        qty = Convert.ToInt32(dr["Item_Quantity"].ToString());
        qty = Convert.ToInt32(textBoxqty.Text);

        pname = dr["Item_Name"].ToString();

        SqlCommand cmd6 = con.CreateCommand();
        cmd6.CommandType = CommandType.Text;
        cmd6.CommandText = "update stock_recieve set Item_Quantity=Item_Quantity-" + qty + "where Item_Name ='" + pname.ToString() + "'";

        cmd6.ExecuteNonQuery();
    }

    //MessageBox.Show("Record inserted successfully");
}

1 个答案:

答案 0 :(得分:3)

只需在您选择的查询上使用top 1。另外,使用SQL参数也非常重要。试试:

...
cmd.CommandText = "select TOP 1 * from stock_recieve where Item_Name like @name order by [Bill No] asc";
cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value =comboBoxitem.Text;
cmd.ExecuteNonQuery();
...