Comment exécuter une procédure SQL stockée via C# à un moment précis?

je suis en train de construire un site web pour une bibliothèque et j'ai besoin de vérifier tous les jours en même temps s'il y a des gens qui ont besoin de retourner leurs livres dans les cinq prochains jours et de leur envoyer un rappel par courriel.

ma question Est quelle sera la bonne façon de faire cela?

ce que je dois accomplir est quand le moment précis de la journée vient, je dois exécuter une procédure stockée sql et vérifier soit par visual studio 2010 ou de toute autre manière si le procédure stockée a retourné tous les résultats à laquelle je dois envoyer par email.

y a-t-il un moyen de vérifier l'heure du système en permanence sur C# et non comme un événement déclenché?

0
demandé sur Avada Kedavra 2012-09-17 19:26:49

3 réponses

j'imagine que la façon la plus simple de faire cela serait de créer un nouveau travail dans L'Agent de serveur SQL pour appeler votre procédure stockée tous les jours, plutôt que d'essayer de réaliser ceci dans une application que vous avez écrite.

voir le lien suivant pour plus d'informations sur créer des emplois SQL

Edit - Sorry , Je ne devrais vraiment pas essayer de répondre ainsi messages tout en faisant d'autres travaux aussi. J'ai complètement raté l' le fait que vous vouliez envoyer des e-mails, et que vous vouliez signaler les retards à l'écran. Duh.

pour envoyer des e-mails en retard à une certaine heure tous les jours, je suppose qu'un service windows ferait certainement le travail, mais semble un peu trop haut, et vous auriez besoin d'avoir le plein contrôle sur le serveur qu'il est en cours d'exécution.

vous pouvez à la place configurer une tâche programmée pour appeler un sendOverdueMail.page Web aspx tous les jours pour faire le travail peut-être? comme ceci

évidemment, il y a aussi L'option D'emailing agent de SQL Server, bien que je ne sois pas sûr du contrôle que vous auriez sur le format des emails qui produiraient.

enfin, ce tutoriel intervient en créant un effet de type de tâche programmée, en accrochant des événements d'expiration de cache sur un ASP.net serveur, qui vous permet ensuite d'appeler votre code d'e-mail.

private const string DummyCacheItemKey = "GagaGuguGigi";
protected void Application_Start(Object sender, EventArgs e)
{
    RegisterCacheEntry();
}

private bool RegisterCacheEntry()
{ 
    if( null != HttpContext.Current.Cache[ DummyCacheItemKey ] ) return false;

        HttpContext.Current.Cache.Add( DummyCacheItemKey, "Test", null, 
        DateTime.MaxValue, TimeSpan.FromMinutes(1), 
        CacheItemPriority.Normal,
        new CacheItemRemovedCallback( CacheItemRemovedCallback ) );

    return true;
}


public void CacheItemRemovedCallback( string key, 
        object value, CacheItemRemovedReason reason)
{
    Debug.WriteLine("Cache item callback: " + DateTime.Now.ToString() );

    // send reminder emails here
    DoWork();
}
1
répondu Ted 2017-05-23 12:12:14

pour comparer les dates, utilisez la fonction DATEDIFF dans T-SQL. par exemple, vous avez une table avec L'ID de ligne, Le nom de livre, le nom de l'étudiant, la Date empruntée et la Date D'échéance. La Date empruntée et la date d'échéance ont toutes deux des types DateTime.

pour demander pour les livres dus pour X montant de jours; qui est de 5 jours selon votre spécification, requête comme ceci

sélectionnez RowID, BookName, StudentName, DateBorrowed, DueDate FROM dbo.Emprunteur Où DATEDIFF(jour, DateBorrowed), DueDate) >= 5

ceci interrogera tous les livres dus pour rappel.

ensuite, utilisez une requête SQL pour déclencher une action qui sera ajoutée à une autre table qui contiendra une liste D'étudiants à rappeler. Ce tableau peut être lu à partir d'un service Windows qui utilisera cette liste comme une file d'attente d'e-mail. Vous pouvez aussi configurer SQL pour envoyer des e-mails directement.

0
répondu Martin Ongtangco 2012-09-17 15:33:03

utilisez Windows scheduled tasks pour appeler la page Web qui fait la tâche d'exécuter la procédure stockée et l'envoi des mails.

il n'y a pas de méthode spécifique dans C# cependant qui vous donnera de tels résultats.

si vous n'avez pas accès aux tâches programmées ou si vous n'êtes pas en mesure d'exécuter un service windows, c'est-à-dire que vous avez un hébergement partagé, il y a encore une autre alternative.

Il ya des services disponibles pour surveiller le temps de disponibilité ofy notre site. Ils font des demandes sur une base régulière. Vous pouvez utiliser cette requête pour faire vos tâches. Certains des liens donnés ici

Site uptime

Pingdom

j'ai utilisé plusieurs fois et ils sont assez fiables. Surtout, ils n'exigent pas que vous ayez accès administrateur sur le système pour effectuer des tâches programmées.

0
répondu Murtuza Kabul 2012-09-17 15:42:23