0

現在、図書館用のウェブサイトを構築していますが、5 日以内に本を返却する必要がある人がいるかどうかを毎日同時に確認し、電子メールでリマインダーを送信する必要があります。

私の質問は、それを行う正しい方法は何ですか?

私が達成する必要があるのは、特定の時刻が来たら、SQL ストアド プロシージャを実行し、ストアド プロシージャが電子メールで送信する必要がある結果を返したかどうかを Visual Studio 2010 またはその他の方法で確認する必要があることです。

トリガーされたイベントとしてではなく、C#でシステム時間を常にチェックする方法はありますか?

4

3 に答える 3

1

これを行う最も簡単な方法は、作成したアプリケーションでこれを実現しようとするのではなく、SQLServerエージェントで新しいジョブを作成してストアドプロシージャを毎日呼び出すことです。

SQLジョブの作成の詳細については、次のリンクを参照してください

編集-申し訳ありませんが、他の作業をしているときにSOの投稿に答えようとしないでください。私はあなたが電子メールを送りたいという事実を完全に見逃し、あなたが画面上で期限切れの記録を報告したいということを頭に浮かびました。ええと。

毎日特定の時間に期限切れの電子メールを送信するには、Windowsサービスが確実に機能すると思いますが、少しやり過ぎのようであり、実行中のサーバーを完全に制御する必要があります。

代わりに、sendOverdueMail.aspx Webページを毎日呼び出して作業を行うようにスケジュールされたタスクを設定できますか?このような

明らかに、SQL Serverエージェントの電子メールオプションもありますが、生成される電子メールの形式をどの程度制御できるかはわかりません。

最後に、このチュートリアルでは、ASP.netサーバーでキャッシュの有効期限イベントをフックして、スケジュールされたタスクタイプの効果を作成します。これにより、電子メールコードを呼び出すことができます。

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();
}
于 2012-09-17T15:31:12.813 に答える
0

日付を比較するには、T-SQLのDATEDIFF関数を使用します。たとえば、行ID、本の名前、学生の名前、借りた日付、および期日を含むテーブルがあります。借用日と期日はどちらもDateTimeタイプです。

x日分の本を照会する。これはあなたの仕様によると5日です、このようにクエリしてください

SELECT RowID、BookName、StudentName、DateBorrowed、DueDate FROM dbo.Borrowers WHERE DATEDIFF(day、DateBorrowed、DueDate)> = 5

これにより、リマインダーが必要なすべての本が照会されます。

次に、SQLクエリジョブを使用して、リマインダーが必要な学生のメーリングリストを含む別のテーブルに追加するアクションをトリガーします。このテーブルは、そのリストを電子メールキューとして使用するWindowsサービスから読み取ることができます。または、電子メールを直接送信するようにSQLを構成することもできます。

于 2012-09-17T15:33:03.427 に答える
0

Windows のスケジュールされたタスクを使用して、ストアド プロシージャを実行し、メールを送信するタスクを実行する Web サイト ページを呼び出します。

C# には特定の方法はありませんが、そのような結果が得られます。

スケジュールされたタスクにアクセスできない場合、または Windows サービスを実行できない場合、つまり共有ホスティングを使用している場合は、さらに別の方法があります。

サイトのアップタイムを監視するために利用できるサービスがあります。彼らは定期的にリクエストを出します。このリクエストを使用してタスクを実行できます。ここに記載されているリンクの一部

サイト稼働時間

ピンダム

私はそれらを数回使用しましたが、かなり信頼できます。何よりも、スケジュールされたタスクを実行するためにシステムに管理者アクセスする必要はありません。

于 2012-09-17T15:42:23.270 に答える