用户登录时更新MySql计数器

时间:2012-02-23 20:16:51

标签: c# asp.net mysql updating

我有一个用户可以登录的网站。客户希望有一种方法来记录任何特定用户登录的次数。我有一个"计数器"在表中排。当人们登录时,如何编写应用程序(内置于C#ASP.NET)来更新计数器?这段代码是否正确:

cmd.ExecuteNonQuery =" UPDATE Counter FROM brokercenter"

我刚刚毕业(如本月10日)所以我是新手,加上我对数据库一无所知,我只是在学习工作。如果我需要任何其他参数或连接字符串或其他信息,请告诉我?这是在按钮点击事件中,那里已经有一个连接字符串来检查用户名和密码,所以我不认为我需要另一个连接字符串,但我不确定。提前谢谢!

就此而言,这是整个事件(登录的工作正常,只是更新是我的问题):

string connectionString =         
    ConfigurationManager.ConnectionStrings["moverschoiceConnectionString"].ConnectionString;    
OdbcConnection conn = new OdbcConnection(connectionString);   
conn.Open();   OdbcCommand cmd = new OdbcCommand();   
cmd.Connection = conn;   
cmd.CommandText = "select Email, Password from brokercenter where Email = '" + txtLoginEmail.Text + "'";   
OdbcDataReader reader = cmd.ExecuteReader();   

while(reader.Read())   
{     
    if (reader["Password"].ToString() == txtLoginPassword.Text)     
    {         
        reader.Close();
        if (cbRememberMe.Checked == true)
        {
            Response.Cookies["username"].Value = txtLoginEmail.Text;
            Response.Cookies["username"].Expires = DateTime.Now.AddMonths(1);
            Response.Cookies["password"].Value = txtLoginPassword.Text;
            Response.Cookies["password"].Expires = DateTime.Now.AddMonths(1);
        }
        else
        {
            Response.Cookies["username"].Expires = DateTime.Now.AddMonths(-1);
            Response.Cookies["password"].Expires = DateTime.Now.AddMonths(-1);
        }

            Response.Redirect("BrokerResources.aspx");     
        }     
        else     
        {         
            lblLoginError.Text = "Invalid Password";     
        }   
    }   
    lblLoginError.Text = "Invalid Email or Password";    
    reader.Close();

    cmd.ExecuteNonQuery = "UPDATE counter FROM brokercenter";
}

2 个答案:

答案 0 :(得分:3)

首先,您应了解如何在MySQL's Reference Manual中使用UPDATE

甚至有一个例子可以说明你想要做什么 引用链接:

  

如果从表中访问要在表达式中更新的列,   UPDATE使用列的当前值。例如,   以下语句将col1设置为比其当前值多一个:

UPDATE t1 SET col1 = col1 + 1;

这基本上就是您所需要的,只需添加WHERE子句并过滤用户名或电子邮件。

另外,你应该阅读SQL Injection因为这个:

where Email = '" + txtLoginEmail.Text + "'"; 

连接这样的字符串以传递参数可能会导致问题,如链接中所述 Here's an example如何做得更好。

答案 1 :(得分:-1)

cmd.ExecuteNonQuery = String.Format("UPDATE brokercenter SET counter = {0} WHERE Email = {1}", myCounter++, txtLoginEmail.Text);

其中“myCounter”是本地计数器变量(也应该从数据库中读取)。这现在有意义吗?