使用datareader计算Asp.net

时间:2018-03-20 15:22:27

标签: asp.net stored-procedures

我检查数据库表中的条形码(使用选择查询)是否存在,并将详细信息插入另一个数据库表,否则条形码不存在。插入很好,但我想计算输入的条形码数量。在一个会话中,用户输入5个条形码,然后总计数为5,但我的代码保持返回1而不是递增。

protected void btnReturn_Click(object sender, EventArgs e)
{
    string barcode = txtBarcode.Text;
    string location = lblLocation.Text;
    string user = lblUsername.Text;
    string actType = lblAct.Text;
    string date = lblDate.Text;



    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["TWCL_OPERATIONSConnectionString"].ToString());

    //commands identifying the stored procedure
    SqlCommand cmd = new SqlCommand("selectCrate", conn);

    SqlCommand cmd1 = new SqlCommand("CreateCrateBox", con);

    // execute the stored procedures
    cmd.CommandType = CommandType.StoredProcedure;
    cmd1.CommandType = CommandType.StoredProcedure;


    cmd.Parameters.Add(new SqlParameter("@crateno", barcode);


    conn.Open();


 using (SqlDataReader reader = cmd.ExecuteReader())
        {
            if (reader.HasRows) {
                while (reader.Read())
                {

                    lblResult.Text = reader[0].ToString();
                    lblResult1.Text = reader[1].ToString();


                    cmd1.Parameters.Add("@crateno", SqlDbType.NVarChar).Value = barcode);
                    cmd1.Parameters.Add("@CurrentLocation", SqlDbType.NVarChar).Value = location;

                    cmd1.Parameters.Add("@Username", SqlDbType.NVarChar).Value = user;
                    cmd1.Parameters.Add("@Date", SqlDbType.DateTime).Value = date;
                    cmd1.Parameters.Add("@status", SqlDbType.NVarChar).Value = actType;





                    counter = counter + 1;

                }

    reader.Close();
                cmd1.ExecuteNonQuery();

                txtCount.Text = counter.ToString();
                lblCount.Text = string.Format("Number of rows: {0}", counter);
            }
            else
            {

                lblError.Text = barcode + " does not exist!!";
            }


        }

2 个答案:

答案 0 :(得分:0)

我重新检查确认并且我误解了你的问题导致了一些混乱。

为了回答您的问题,我不认为有任何简单解决方案可以实时更新数字。我能想到的任何解决方案都是websocket连接,我个人不了解webforms内部(不知道它是否可能)。

我格式化了你的代码。这应该一次性返回总行数(屏幕上没有实时更新)。

protected void btnReturn_Click(object sender, EventArgs e)
{
    int counter = 0;
    string barcode = txtBarcode.Text;
    string location = lblLocation.Text;
    string user = lblUsername.Text;
    string actType = lblAct.Text;
    string date = lblDate.Text;

    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["TWCL_OPERATIONSConnectionString"].ToString()))
    {
        con.Open();
        //commands identifying the stored procedure
        using (SqlCommand cmd = new SqlCommand("selectCrate", con))
        {
            using (SqlCommand cmd1 = new SqlCommand("CreateCrateBox", con))
            {
                // execute the stored procedures
                cmd.CommandType = CommandType.StoredProcedure;
                cmd1.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new SqlParameter("@crateno", barcode));

                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            lblResult.Text = reader[0].ToString();
                            lblResult1.Text = reader[1].ToString();

                            cmd1.Parameters.Add("@crateno", SqlDbType.NVarChar).Value = barcode;
                            cmd1.Parameters.Add("@CurrentLocation", SqlDbType.NVarChar).Value = location;
                            cmd1.Parameters.Add("@Username", SqlDbType.NVarChar).Value = user;
                            cmd1.Parameters.Add("@Date", SqlDbType.DateTime).Value = date;
                            cmd1.Parameters.Add("@status", SqlDbType.NVarChar).Value = actType;
                            counter++;
                        }
                        cmd1.ExecuteNonQuery();

                        txtCount.Text = counter.ToString();
                        lblCount.Text = string.Format("Number of rows: {0}", counter);
                    }
                    else
                    {
                        lblError.Text = barcode + " does not exist!!";
                    }
                }
            }
        }
    }
}

答案 1 :(得分:0)

您可以在会话中存储该号码,然后在会话结束时将其存储(将其存储在数据库或任何您想要的内容中)。声明一个会话变量:

Session[“NumInserts”] = 0;

然后用每个插入更新它:

Session[“NumInserts”] = (int) Session[“NumInserts”] + 1;

只要会话存在,该变量就会被维护。此外,请确保仅声明会话变量一次,并且不要在会话的生命周期中允许它重置。否则,它将返回0并给你不准确的结果。