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