pstrjds,根据您提供的代码,我正在尝试实现这些代码和您几天前提供的msdn链接。我不确定如何将它们组合在一起,但我看到一条消息:“变量名'@ID‘已被声明。变量名在查询批处理或存储过程中必须是唯一的。”我需要创建一个存储过程吗?我可以假设我的ID位也是正确的吗,你解释了很多次?谢谢。在此处输入代码
cs.Open();
int remainingStock = 0;
string Query = "SELECT StockA SET QTY = @QTY " + "WHERE ID = @ID;";
SqlCommand cmd = new SqlCommand(Query, cs);
cmd.Parameters.Add("@ID", SqlDbType.Int);
cmd.Parameters["@ID"].Value = 1;
cmd.Parameters.AddWithValue("@ID", Query);
try
{
if (remainingStock == 1)
{
lbqty.Text = "Not enough stocks.";
}
else
{
cmd.CommandText = "UPDATE StockA SET QTY = QTY-1
WHERE ID=1";
int rowsUpdated = cmd.ExecuteNonQuery();
remainingStock--;
string remaining = "Remaining stocks: " +
remainingStock.ToString();
txQty.Text = remaining;
lbqty.Text = remaining;
DGA.Update(); //this is DataGridView
}
Int32 rowsAffected = cmd.ExecuteNonQuery();
Console.WriteLine("RowsAffected: {0}", rowsAffected);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
cs.Close();
}发布于 2010-12-09 02:28:05
在再次阅读您的问题后,我更加确信我发布的评论实际上是问题所在。你在你的问题中说你的数量不会下降。如果您查看行的返回值:
cmd.ExecuteNonQuery();在你的else语句中,我相信你会得到一个0的值。这表示没有更新的记录。我相信这个问题与你的问题完全相关。如果您使用LINQPad或Sql Management studio等实用程序连接到数据库,并运行代码中列出的查询,我想您会发现它没有更新任何内容。我高度怀疑您的库存没有存储在名为tblContacts的表中。这就是为什么你不能从中选择一个数量,也不能更新其中的一个数量。
编辑:一开始就想提到这一点,然后就跑题了,忘了添加它。我会把你的SqlCommand放在一个using语句中。SqlCommand对象是可丢弃的,因此最好将可丢弃的对象放在using语句中或某种try/finally模式中,这样它们就可以被清除。
额外的编辑-重构你的代码:
cs.Open();
int remainingStock = 0;
string Query = "SELECT QTY from tblInventory WHERE ID=19";
using(SqlCommand cmd = new SqlCommand(Query, cs))
{
var result = cmd.ExecuteScaler();
if (result != null)
{
string str = result.ToString();
if (!string.isNullOrWhiteSpace(str))
{
// NOTE: It would probably be safer to use int.TryParse here
remainingStock = Convert.ToInt32(cmd);
}
if (remainingStock == 0)
{
lbqty.Text = "Not enough stocks.";
}
else
{
cmd.CommandText = "UPDATE tblInventory SET QTY = QTY-1 WHERE ID=19";
int rowsUpdated = cmd.ExecuteNonQuery();
remainingStock--;
if (remainingStock == 1)
{
lbqty.Text = "Re-order. Remaining stocks: 1";
}
else
{
string remaining = "Remaining stocks: " + remainingCount.ToString();
txtQty.Text = remaining;
lbqty.Text = remaining;
}
}
}
else
lbqty.Text = "No stock for contact";
}
dgUpdate();
}
cs.Close();发布于 2010-12-08 23:25:38
问题是,您没有检查ret == -1。将第二个if语句更改为if(ret < 1)应该可以解决您的问题。
此外,直接在cmd.ExecuteNonQuery();行后面添加ret--;,以使ret变量与数据库中的值同步。
发布于 2010-12-08 23:22:22
我认为这就是你的问题--你在处理的时候生成ret - 1,然后
txtQty.Text = "Remaining stocks: " + (ret - 1).ToString();
lbqty.Text = "Remaining stocks: " + (ret - 1).ToString();这表明少了一个项目。试着这样做:
txtQty.Text = "Remaining stocks: " + ret.ToString();
lbqty.Text = "Remaining stocks: " + ret.ToString();https://stackoverflow.com/questions/4378196
复制相似问题