2016-12-02 3 views
1

ステータス(Varchar、レコード "Paid"/"Unpaid"のみ)とnextDateOfPay(datetime、dateを記録)として別の列があります。日付(現在の日付)がnextDateOdPay列の日付を渡されたときに支払われたレコードのこのステータス列をUnpaidとして更新する必要があります。また、この更新をテーブルのすべての行に対して繰り返す必要があります。主キーはId列(整数)です。 私はT-sqlを使う必要があるのか​​、SQLエージェントの仕事を使わなければならないのか分からない。プログラム自体に書くことができる簡単な解決策があるかどうか知りたい。あまり前もって!手動ボタンを押すか、おそらくタイマーロジックを使用することによってトリガーさ、あなたのアプリケーションからこれを呼び出すことができ条件をチェックした後に日付を比較するdb列を更新する方法C#

UPDATE gymTb SET status='Unpaid' 
WHERE status='Paid' AND nextDateOfPay <= getdate() 

:クエリはどうなるの単純なUPDATE

dateTimePicker3.Value = DateTime.Now; 
textBox12.Enabled = false; 
string newstat; 
string query = "select Id,nextDateOfPay from gymTb where status='Paid'"; 

SqlConnection cn = new SqlConnection(cs); 
SqlCommand cmd = new SqlCommand(query, cn); 

DateTime x = DateTime.Now; 
DateTime y; 

if (cn.State.ToString() == "Closed") 
{ 
    cn.Open(); 
} 
try   
{ 
    object dtx = cmd.ExecuteScalar(); 
    y = Convert.ToDateTime(dtx); 
    int result = DateTime.Compare(x, y); 

    if (result >= 0) 
     newstat = "Unpaid"; 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 

答えて

3

、として コードは、これまでのところです。

SQL Serverエージェントの定期的なジョブに、UPDATEステートメントを毎日実行し、アプリケーションから独立させることができます。その詳細についてはこちらをご覧ください:
how to schedule a job for sql query to run daily?

+0

ああ私の涙、私は泣いています!それは動作し、そのようなシンプルな素晴らしいソリューションです。そんなにありがとうございました!神のお恵みがありますように !!何百万回もありがとう! – angels65

+0

シンプルさのパワー! –

関連する問題