我有一个用户可以登录的网站。客户希望有一种方法来记录任何特定用户登录的次数。我有一个"计数器"在表中排。当人们登录时,如何编写应用程序(内置于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";
}
答案 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”是本地计数器变量(也应该从数据库中读取)。这现在有意义吗?