2014-03-12 28 views
0

我想問如何從數據庫中自動刪除項目,噹噹前日期和時間達到記錄刪除日期時間存儲在數據庫中?在指定日期時刪除記錄ASP.NET MVC

+2

,你的最簡單的辦法是建立一個計劃作業是SQL Server的 – slapthelownote

+0

的[Revalee(HTTP:// revalee。 sageanalytic.com)開源項目可能會幫助你解決這個問題。 –

回答

4

由於您已經使用ASP.NET MVC和Entity Framework對此進行了標記,因此我不確定您是否有權訪問底層數據庫服務器。但是,如果你這樣做,你的ASP.NET應用程序不是最好的地方。而是在後端服務器上設置一個SQL Server代理作業,該作業可以按指定的時間間隔運行並運行DELETE查詢。

創建一個存儲過程是這樣的:

CREATE PROCEDURE dbo.DeleteOnSchedule 
AS 
BEGIN 
    DELETE [dbo].[Table] 
    WHERE [DateTimeToDelete] <= CURRENT_TIMESTAMP; 
END 

然後計劃的基礎上運行的程序。

1

正如其他用戶指出用ASP.Net這樣做並不理想。你更好地設置工作或計劃任務。

話雖這麼說,我知道這並不總是可能因此有另一種途徑,如果你真的需要 -

有一個描述在這裏的如何設置上調 http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

你可以採取

本質上你只是使用緩存過期來觸發代碼執行。您可以簡單地將刪除邏輯添加到回調中,以定期清除舊記錄。這是一個黑客,所以我會用它作爲最後的手段。

+1

不錯。有時你別無選擇,只能像這樣進行破解。 :-) –

0

您可以通過創建.NET計時器來執行此操作,該計時器可以檢查您想要的任何內容並運行刪除代碼,例如5分鐘後刪除未確認的用戶。

public static class DeleteEmployerTimer 
{ 
    static private JobsEntities JobDatabase=new JobsEntities(); 
    private static Timer threadingTimer; 

    public static void StartTimer() 
    { 
     if (threadingTimer==null) 
     { 
      //raise timer callback every 5 minutes 
      threadingTimer = new Timer(new TimerCallback(CheckData), 
             HttpContext.Current, 5 * 60000, 5 * 60000); 
     } 
    } 
    private static void CheckData(object sender) 
    { 
     MembershipUserCollection AllEmployer = Membership.GetAllUsers(); 
     foreach (MembershipUser Employer in AllEmployer) 
     { 
      //your condition to delete records (it can be everything you want date, specific data in config file) 
      if(!Employer.IsApproved) 
      { 
       MeWork.Domain.Database.Employer FindedEmployer = JobDatabase.Employer.Find(Employer.ProviderUserKey); 
       JobDatabase.Employer.Remove(FindedEmployer); 
       JobDatabase.SaveChanges(); 
       Membership.DeleteUser(Employer.UserName, true); 
      } 
     } 
    } 
} 

創建如果您使用的是SQL服務器的應用程序定時器啓動

public class MvcApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     .... 
     //Create timer 
     DeleteEmployerTimer.StartTimer(); 

    } 
}