【问题标题】:Using datareader to count Asp.net使用datareader统计Asp.net
【发布时间】:2018-03-20 15:22:27
【问题描述】:

我正在检查数据库表中的条形码是否存在(使用选择查询)并将详细信息插入另一个数据库表,否则条形码不存在。插入很好,但我想计算输入的条形码数量。假设在会话中用户输入了 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!!";
            }


        }

【问题讨论】:

  • sqldatareader row count的可能重复
  • 当我插入时我想数数。这并没有为我提供太多帮助,但感谢您的赞赏
  • 如果它的用途很小。您可以在查询中添加计数,然后将其读出。
  • 插入 CrateHistory 值(@crateno,@crateLocation,@username,@activityType)这是我的查询如何将计数添加到该查询
  • 不是在插入过程中,而是在阅读过程中。

标签: asp.net stored-procedures


【解决方案1】:

您可以将号码存储在会话中,然后在会话结束时对其进行处理(将其存储在数据库中或您想要的任何东西中)。声明一个会话变量:

Session[“NumInserts”] = 0;

然后在每次插入时更新它:

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

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

【讨论】:

    【解决方案2】:

    我重新检查以确保我误解了您的问题,这导致了一些混乱。

    为了回答您的问题,我认为没有任何 简单 解决方案可以实时更新数字。我能想到的任何解决方案都是 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!!";
                        }
                    }
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      相关资源
      最近更新 更多