2011-08-29 44 views
1

在我的项目中,我想自动删除45天以上保持活动状态的帐户。为了测试目的,我花了2分钟时间并写下以下代码。但它不工作。任何人都可以告诉我如何执行“记录删除”,如果保持2分钟不活动。删除帐户保持45天不活动

我的代码如下。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.Odbc; 

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

     string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" + "SERVER=localhost;" + "DATABASE=inactive;" + "UID=root;" + "PASSWORD=*********;" + "OPTION=3"; 
     OdbcConnection MyConnection = new OdbcConnection(MyConString); 
     try 
     { 
      MyConnection.Open(); 
      OdbcCommand cmd = new OdbcCommand("DELETE name FROM email WHERE date < DATE_SUB(NOW(), INTERVAL 2 MIN)", MyConnection); 
      MyConnection.Close(); 
      Label1.Text = "Done"; 
     } 
     catch (Exception ex) 
     { 
      Label1.Text = ex.ToString(); 
     } 

    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" + "SERVER=localhost;" + "DATABASE=inactive;" + "UID=root;" + "PASSWORD=*********;" + "OPTION=3"; 
      OdbcConnection MyConnection = new OdbcConnection(MyConString); 
      try 
      { 
       MyConnection.Open(); 
       OdbcCommand cmd = new OdbcCommand("Select name from email where email=?", MyConnection); 
       cmd.Parameters.Add("@email", OdbcType.VarChar, 255).Value = TextBox1.Text; 
       OdbcDataReader dr = cmd.ExecuteReader(); 
       if (dr.HasRows == false) 
       { 
        throw new Exception(); 
       } 

       if (dr.Read()) 
       { 
        Response.Write(dr[0].ToString()); 
       } 
      } 
      catch 
      { 

      } 
    } 
} 


更新时间:

首先,我创建了一个名为inactive数据库和创建表email。下面的截图说明了这个记录。

enter image description here

后来我用下面的代码..

protected void Page_Load(object sender, EventArgs e) 
{ 
    string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" + "SERVER=localhost;" + "DATABASE=inactive;" + "UID=root;" + "PASSWORD=******;" + "OPTION=3"; 
    OdbcConnection MyConnection = new OdbcConnection(MyConString); 
    try 
    { 
     MyConnection.Open(); 
     OdbcCommand cmd = new OdbcCommand("DELETE FROM email WHERE `date` < DATE_SUB(NOW(), INTERVAL 2 MINUTE)", MyConnection); 
     MyConnection.Close(); 


    } 
    catch (Exception ex) 
    { 
     Label1.Text = ex.ToString(); 
    } 
    } 

回答

1

DELETE语法似乎是错误的,删除字段名 “名”,即

DELETE FROM email WHERE `date` < DATE_SUB(NOW(), INTERVAL 2 MINUTE) 

(该delete命令删除整行,而不是单场)

1

你需要把date在反引号中查询,像这样:

"DELETE FROM email WHERE `date` < DATE_SUB(NOW(), INTERVAL 2 MINUTE)" 

当然,这将是甚至更好名称字段date但更像一些描述性的东西lastchange

+0

不工作。这里的'date'是什么?我是否需要在数据库表中添加名为'date'的任何东西? – Mal

+0

@Kars“日期”来自您的原始查询!我们都假设它在表中的一个字段,存储“最后活动”时间戳。是的,你必须在你的桌子上放置一个领域(你也必须适当地更新它)来达到你想要的效果! – ain

+0

@卡尔斯,这是你的代码的副本,请不要傻。 – Johan

1

而不是MIN你应该使用分钟所以:

DELETE FROM email WHERE `date` < DATE_SUB(NOW(), INTERVAL 2 MINUTE) 
+0

不工作。这里的'date'是什么?我是否需要在数据库表中添加名为'date'的任何东西? – Mal