C#我的计数器不起作用

时间:2013-11-12 11:14:50

标签: c# asp.net counter

嗨,任何人都可以提供帮助我不知道为什么我的按钮旁边的计数器对所有其他代码都不起作用。我想使用计数器在我的数据库中构建运行数据。如果有一种更简单的方法可以做到这一点。

public partial class _Default : System.Web.UI.Page
{
    int iDefualt = 2;
    int iMainCounter = 0;
    SqlConnection con1 = new SqlConnection("Data Source=EON;Initial Catalog=DW2;Persist Security Info=True;User ID=Kapow;Password=Kapow");
    DataTable dt = new DataTable();              

    public void Page_Load(object sender, EventArgs e)
    {
        con1.Open();
        SqlDataReader myReader = null;
        //SqlCommand myCommand = new SqlCommand("select * from customer_registration where username='" + Session["username"] + "'", con1);
        SqlCommand myCommand = new SqlCommand(sNavigate(0), con1);
        /SELECT * FROM tblDW2 WHERE [User]='Petrus'
        myReader = myCommand.ExecuteReader();

        while (myReader.Read())
        {
            txtbxDaywords.Text = (myReader["Dayword"].ToString());
        }
        con1.Close();    
        iMainCounter = iDefualt;
        // "Daywords\t" + "\n" + DateTime.Now.ToString();
    }
    public string sNavigate(int iNavNum)
    {
        int iNavigate;

        if (iNavNum != 0)
        {
            iNavigate = iNavNum;    
        }
        else
        {                    
            iNavigate = iDefualt;
        }        
        return "SELECT * FROM (SELECT Dayword, ROW_NUMBER() OVER (ORDER BY Dayword) AS      Rownumber FROM tblDW2 WHERE [User]='Petrus' ) results WHERE results.Rownumber = "+ iNavigate.ToString();
    }    
    protected void btnNext_Click1(object sender, EventArgs e)
    {
        iMainCounter++;    
        con1.Open();
        SqlDataReader myReader = null;
        SqlCommand myCommand = new SqlCommand(sNavigate(iMainCounter), con1);
        myReader = myCommand.ExecuteReader();    
        while (myReader.Read())
        {
            txtbxDaywords.Text = (myReader["Dayword"].ToString());
        }
        con1.Close();
    }
}

3 个答案:

答案 0 :(得分:1)

根据ASP.NET页面生命周期,在任何事件中初始化任何变量时,可能是页面加载或任何其他事件。初始化特定于用户 并且一旦事件被触发就会重新初始化。

解决方案:

如果您期待全局持有计数器(不是特定于用户):使用应用程序变量来保存计数器值

如果您期望持有特定于用户的计数器(针对整个应用程序的特定用户):使用会话来保存计数器值

如果您需要示例代码,请告诉我,以便我提供。

public partial class Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        if (Session["Incrementer"] == null)
        {
            Session["Incrementer"] = "1";
        }
        else
        {
            int incrementer = Convert.ToInt32(Session["incrementer"].ToString()) + 1;
            Session["incrementer"] = incrementer.ToString();
        }
        Label1.Text = Session["incrementer"].ToString();
    }
}

答案 1 :(得分:0)

如果您没有存储在计数器的某个位置,则会在PageLoadPostBack之后重置

Web page are stateless

您可以使用ViewState o SessionState

无论如何,如果你不把反启动权放在

If(!IsPostBack)
{
    iMainCounter = iDefualt; 
}

每次重置

答案 2 :(得分:0)

通过这种方式,count将始终为2,因为您在页面加载事件中设置它,并且页面加载事件检查Ispostback,因此它将始终重新初始化为等于iDefault。 所以你应该将iDefault设置为不回发验证

if(!Page.IsPostBack)
{
   iMainCounter = iDefault;
}

另一个问题是iMainCounter未设置为静态,因此每个事务都会重新初始化它,因此请使用static int iMainCounter = 0