2011-08-29 4 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을 만들었습니다. 아래 스크린 샷에는 기록이 나와 있습니다. 물론

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

은 다음과 같습니다

enter image description here

나중에 다음 코드 .. 당신과 같이 쿼리에 역 따옴표에 date을 둘 필요가

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이지만 좀 더 설명력이 좋습니다. lastchange.

+0

Not working. 여기에 '날짜'는 무엇입니까? 데이터베이스 테이블에'date'라는 것을 추가해야합니까? – Mal

+0

@Kars "date"는 원래 쿼리의 것입니다! 우리는 모두 테이블에 "마지막 활성"타임 스탬프를 저장하는 필드를 사용했습니다. 예, 당신은 당신의 테이블에 필드를 가지고 있어야합니다 (그리고 당신도 그것을 적절하게 업데이트해야합니다) 당신이 원하는 것을 얻을 수 있습니다! – ain

+0

@Kars, 귀하의 코드에서 복사 한 것입니다. 바보 같이 굴지 마세요. – Johan

1

대신 MINMINUTE을 사용해야합니다.

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

작동하지 않습니다. 여기에 '날짜'는 무엇입니까? 데이터베이스 테이블에'date'라는 것을 추가해야합니까? – Mal

관련 문제