如果使用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();
答案 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
这样您就不必更新记录了。