我想从产品减少面板减少数据库中我的产品数量。但如果输入的数字大于我的产品数量,即数量减少并变为负数,我希望它给出错误。我找不到这个决策机制和必要的命令,你能帮助我吗?
我的意思是我想减少数字(产品数量),但我不希望数字(产品数量)变为负数。当输入大于金额时,我想给出一个错误,例如“我们没有足够的产品!”
我就是这样尝试的
string constr = ConfigurationManager.ConnectionStrings["stok"].ConnectionString;
SqlConnection con = new SqlConnection(constr);
SqlCommand cmda;
SqlCommand cmdb;
con.Open();
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM urunler WHERE barkod = '" + barkod.Text + "'", con);
SqlDataAdapter db = new SqlDataAdapter("SELECT * FROM urunler WHERE adet >= '0' AND barkod = '" + barkod.Text + "'", con);
DataSet ds = new DataSet();
DataSet dl = new DataSet();
da.Fill(ds);
db.Fill(dl);
if (ds.Tables[0].Rows.Count > 0)
{
cmda = new SqlCommand("UPDATE urunler SET cikarTarih='" + cikarTarih.Text + "'WHERE barkod='" + barkod.Text + "'", con);
cmdb = new SqlCommand("UPDATE urunler SET adet=adet-1 WHERE barkod='" + barkod.Text + "'", con);
for (int i = Convert.ToInt32(adet.Text); i > 0 ; i--)
{
cmdb.ExecuteNonQuery();
if (dl.Tables[0].Rows.Count < 0)
{
ClientScript.RegisterClientScriptBlock(this.GetType(), "K", "swal('Hata', 'Ürün adedi yeterli değil!', 'error')", true);
}
}
cmda.ExecuteNonQuery();
ClientScript.RegisterClientScriptBlock(this.GetType(), "K", "swal('İşlem Tamamlandı', 'Ürün adedi başarıyla güncellendi!', 'success')", true);
}
else
{
ClientScript.RegisterClientScriptBlock(this.GetType(), "K", "swal('Hata', 'Aradığınız ürün bulunamadı!', 'error')", true);
}
con.Close();
这是我的解决方案!
string constr = ConfigurationManager.ConnectionStrings["stok"].ConnectionString;
SqlConnection con = new SqlConnection(constr);
SqlCommand cmda;
SqlCommand cmdb;
con.Open();
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM urunler WHERE barkod = '" + barkod.Text + "'", con);
SqlDataAdapter db = new SqlDataAdapter("SELECT * FROM urunler WHERE adet >='" + Convert.ToInt32(adet.Text) + "'AND barkod = '" + barkod.Text + "'", con);
DataSet ds = new DataSet();
DataSet dl = new DataSet();
da.Fill(ds);
db.Fill(dl);
if (ds.Tables[0].Rows.Count > 0)
{
if (dl.Tables[0].Rows.Count > 0)
{
cmda = new SqlCommand("UPDATE urunler SET cikarTarih='" + cikarTarih.Text + "'WHERE barkod='" + barkod.Text + "'", con);
cmdb = new SqlCommand("UPDATE urunler SET adet=adet-1 WHERE barkod='" + barkod.Text + "'", con);
for (int i = Convert.ToInt32(adet.Text); i > 0 ; i--)
{
cmdb.ExecuteNonQuery();
}
cmda.ExecuteNonQuery();
ClientScript.RegisterClientScriptBlock(this.GetType(), "K", "swal('İşlem Tamamlandı', 'Ürün adedi başarıyla güncellendi!', 'success')", true);
}
else
{
ClientScript.RegisterClientScriptBlock(this.GetType(), "K", "swal('Hata', 'Yeterli ürün bulunamadı!', 'error')", true);
}
}
else
{
ClientScript.RegisterClientScriptBlock(this.GetType(), "K", "swal('Hata', 'Aradığınız ürün bulunamadı!', 'error')", true);
}
con.Close();
所有这些代码都可以用单个 SqlCommand 替换:
var sql=@"UPDATE urunler
SET cikarTarih=@text, adet=adet-1
WHERE barkod=@barcode AND adet>1";
using(var con = new SqlConnection(constr))
using (var cmd=new SqlCommand(con,sql))
{
cmd.Parameters.Add("@barcode",SqlDbType.NVarchar,20).Value=barkod.Text ;
cmd.Parameters.Add("@text",SqlDbType.NVarchar,20).Value=cikarTarih.Text ;
var modified=cmd.ExecuteNonQuery();
if(modified=0)
{
//Update failed, notify user.
}
}
问题的代码不能保证不会出现负值,因为其他一些连接可以轻松读取相同的初始值并减少它。为了防止这种情况,需要显式事务。一次更新不需要额外的事务。
ExecuteNonQuery 返回受影响的行数