我如何通过在c#中使用单个查询来做到这一点?

本文关键字:查询 这一点 单个 何通过 | 更新日期: 2023-09-27 18:09:27

如果一个日期比今天早,我想用更新命令从数据库中记录的日期使它们被动。我如何通过在c#中使用单个查询来做到这一点?

columns: 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();

我如何通过在c#中使用单个查询来做到这一点?

查看DATEDIFF函数。

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

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

与其更新记录,不如在查询级别决定状态?因为你每天都检查这个,所以会有很多不必要的更新。

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

这样你就不用更新你的记录了