用户登录时更新MySql计数器



我有一个用户可以登录的网站。客户端希望有一种方法来记录任何特定用户登录的次数。我在表中有一行"计数器"。如何对应用程序(内置于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";
}

首先,您应该阅读MySQL参考手册中关于使用UPDATE的内容。

甚至还有一个你想做什么的例子。
链接中的报价:

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

UPDATE t1 SET col1 = col1 + 1;

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

另外,您应该阅读有关SQL注入的内容,因为这一点:

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

连接这样的字符串以传递参数可能会导致链接中描述的问题
下面是一个如何做得更好的例子。

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

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

最新更新