0

我正在使用 C# 和 sqlite 在 Visual Studio 上开发一个健身房会员计划。在每次员工登录尝试时,我希望程序检查 ExpiryDate(Customer 表中的属性) 小于今天日期的过期客户。这是我使用的一段代码:

string sql2 = "delete from Customer where ExpiryDate<' " + DateTime.Today + " ' ";
SQLiteCommand command2 = new SQLiteCommand(sql2, m_dbConnection);
command2.ExecuteNonQuery(); 
4

2 回答 2

3

使用参数化查询,将日期转换为字符串的问题将消失

 string sql2 = "delete from Customer where ExpiryDate < @td"; 
 SQLiteCommand command2 = new SQLiteCommand(sql2, m_dbConnection); 
 command2.Parameters.AddWithValue("@td", DateTime.Today);
 command2.ExecuteNonQuery(); 

当然,这也是避免 Sql Injections 的推荐方法,但在这种情况下不是您主要关心的问题。

顺便说一句,我同意您上述问题中的评论。在计算最后期限时允许一些灵活性可能会更好。例如,您可以添加一个配置选项来设置截止日期后允许的最大天数,并将其添加到 DateTime.Today 值。

于 2013-10-29T17:00:03.260 回答
3

为什么不使用 SQLite 内置函数?

delete from Customer where ExpiryDate<DATE('NOW')

你是不是错过了类似的东西

delete from Customer where ExpiryDate<DATE('NOW') AND Costumer_id=?
于 2013-10-29T17:02:31.577 回答