计数器变量不工作Asp.net webform

时间:2018-03-22 14:40:54

标签: asp.net webforms

我有一个方法来检查表中是否存在id,以及是否插入到另一个数据库表中;另外我有标签,显示输入的数据。插入数据库并从数据库中选择的查询工作正常;但我的问题是我无法count,只能在任何时候收到1。它没有递增;我的问题如何让计数器增加而不是一直显示1。这就是我到目前为止所拥有的

protected void btnComplete_Click(object sender, EventArgs e)
{
    string id = txtid.Text;     
    string user = lblUsername.Text;      
    string date = lblDate.Text;
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["TWCL_OPERATIONSConnectionString"].ToString());

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

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

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


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


    conn.Open();


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

                cmd1.Parameters.Add("@id", SqlDbType.NVarChar).Value = barcode);

                 cmd1.Parameters.Add("@Username", SqlDbType.NVarChar).Value = user;
                 cmd1.Parameters.Add("@Date", SqlDbType.DateTime).Value = date;
                 counter = counter + 1;

            }

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


           lblCount.Text = counter.ToString();
        }
        else
        {

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


    }

1 个答案:

答案 0 :(得分:1)

在您被要求stored procedures之前,在给出具体答案之前,您应该修复代码中的一些问题

1)使用using{}command connection块来确保它们被处置。

2)在while循环中,您要向cmd1添加参数。想想如果while循环运行超过1次会发生什么!!

现在,如果你想在计数器中显示max,只需从数据库中获取max !!

  

cmd对象中,您向存储过程发送了一些ID。如果您的表中id是唯一的,它将始终返回1条记录。

所以你的计数器总是1

<强>解决方案

不修改大部分代码,在存储过程的查询中添加count(id) as counter,返回cmd的结果。 并在while循环中指定计数变量。

counter = Convert.ToInteger(reader[“counter”].ToString());
  

上面不是最佳解决方案。因为它会count记录所有行,并会随着时间的推移而降低性能。

要获得最佳解决方案,您需要创建另一个执行command

等查询的select count(id) from YourTableName对象

这将为您提供表格中的记录数量。

修改

来自你的评论。 从cmd1插入后,您只需要总记录。 只需做以下事情:

1)在cmd 1的storedProcedure中,写下Select Isnull(count(*),0) from YourTableNameHere

2)在您的代码中,使用ExecuteScalar代替ExecuteNonQuery

var result = cmd1.ExecuteScalar();
lblCount.Text = result.ToString();

修改2

您希望跟踪当前session中插入的记录数。使用viewstatesession,具体取决于您为session保存计数器的要求,或仅保留当前页面上的用户。

var recordsAdded = cmd1.ExecuteNonQuery();
if(Session[“counter”] == null)
{
   Session[“counter”] = 0;
}

if(recordsAdded>0)
{

    Session[“counter”] = Convert.ToInteger(Session[“counter”]) + 1;
}
lblCount.Text = Session[“counter”];

以上将跟踪会话中插入的记录