如何在C#中使用单个查询来做到这一点?

时间:2011-09-21 07:18:31

标签: c# sql

如果使用update命令在数据库中记录的日期之前,如果日期早于今天,我想让它们被动。如何在C#中使用单个查询来做到这一点?

Colums:Tarih(nvarchar),Durum(nvarchar)

例如;

if tarih<Datetime.Today.Date is set Durum='PASİF' 

代码:

string sorgu = "select BitTarihi from Abonelikler";
        SqlConnection gg = new SqlConnection(constr);
        SqlCommand gg2 = new SqlCommand(sorgu,gg);
        SqlDataReader gg3;
        gg.Open();
       gg3= gg2.ExecuteReader();
       while (gg3.Read())
       {
           DateTime b1 = new DateTime();
           DateTime b2 = new DateTime();
           b1 = Convert.ToDateTime(gg3.GetString(0));
           b2 = DateTime.Today.Date;
           TimeSpan fark = new TimeSpan();
           fark = b2 - b1;
           if (fark.TotalDays > 0)
           {
               SqlConnection vv = new SqlConnection(constr);
               SqlCommand vv2 = new SqlCommand("update Abonelikler set Durum='PASİF' where BitTarihi='" + b1.ToShortDateString() + "'", vv);
               vv.Open();
               vv2.ExecuteNonQuery();
               vv.Close();
               vv2.Dispose();

           }


       }
        gg.Close();
       gg2.Dispose();

2 个答案:

答案 0 :(得分:1)

查看DATEDIFF功能。

UPDATE Abonelikler SET Durum='PASIF' 
    WHERE DATEDIFF(DD, CONVERT(datetime, BitTarihi), GETDATE())>0

另外,请不要使用SQL语句的连接,使用参数。它更安全,有时候语句与参数的连接会妨碍服务器端语句优化。

答案 1 :(得分:1)

为什么不在查询级别决定状态,而不是更新记录?由于您每天都会检查这些内容,因此会有许多不必要的更新。

SELECT BitTarihi, CASE WHEN DATEDIFF(DAY, BitTarihi, GetDate()) = 0 THEN 'AKTIF' ELSE 'PASIF' END DURUM FROM Abonelikler 

这样您就不必更新记录了。