我如何通过在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();
查看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
这样你就不用更新你的记录了