首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#中的质量控制

C#中的质量控制
EN

Stack Overflow用户
提问于 2010-12-07 23:14:43
回答 5查看 395关注 0票数 0

pstrjds,根据您提供的代码,我正在尝试实现这些代码和您几天前提供的msdn链接。我不确定如何将它们组合在一起,但我看到一条消息:“变量名'@ID‘已被声明。变量名在查询批处理或存储过程中必须是唯一的。”我需要创建一个存储过程吗?我可以假设我的ID位也是正确的吗,你解释了很多次?谢谢。在此处输入代码

代码语言:javascript
复制
        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();

    }
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-12-09 02:28:05

在再次阅读您的问题后,我更加确信我发布的评论实际上是问题所在。你在你的问题中说你的数量不会下降。如果您查看行的返回值:

代码语言:javascript
复制
cmd.ExecuteNonQuery();

在你的else语句中,我相信你会得到一个0的值。这表示没有更新的记录。我相信这个问题与你的问题完全相关。如果您使用LINQPad或Sql Management studio等实用程序连接到数据库,并运行代码中列出的查询,我想您会发现它没有更新任何内容。我高度怀疑您的库存没有存储在名为tblContacts的表中。这就是为什么你不能从中选择一个数量,也不能更新其中的一个数量。

编辑:一开始就想提到这一点,然后就跑题了,忘了添加它。我会把你的SqlCommand放在一个using语句中。SqlCommand对象是可丢弃的,因此最好将可丢弃的对象放在using语句中或某种try/finally模式中,这样它们就可以被清除。

额外的编辑-重构你的代码:

代码语言:javascript
复制
    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();
票数 1
EN

Stack Overflow用户

发布于 2010-12-08 23:25:38

问题是,您没有检查ret == -1。将第二个if语句更改为if(ret < 1)应该可以解决您的问题。

此外,直接在cmd.ExecuteNonQuery();行后面添加ret--;,以使ret变量与数据库中的值同步。

票数 5
EN

Stack Overflow用户

发布于 2010-12-08 23:22:22

我认为这就是你的问题--你在处理的时候生成ret - 1,然后

代码语言:javascript
复制
txtQty.Text = "Remaining stocks: " + (ret - 1).ToString();
lbqty.Text = "Remaining stocks: " + (ret - 1).ToString();

这表明少了一个项目。试着这样做:

代码语言:javascript
复制
txtQty.Text = "Remaining stocks: " + ret.ToString();
lbqty.Text = "Remaining stocks: " + ret.ToString();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4378196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档