从 sql 数据库中删除字段,其中日期是 c# 中到今天的前一个日期

delete fields from sql database where the date is a previous date to today in c#

SqlConnection sqlcon = new SqlConnection(GlobalClass.DBLocate);
sqlcon.Open();

string query = "Delete from [Plans] Where Date < '" + 
GlobalClass.Date.ToShortDateString() + "'";

SqlDataAdapter sda = new SqlDataAdapter(query, sqlcon);

sda.SelectCommand.ExecuteNonQuery();

我尝试了很多技术,但此数据库中的所有内容都被删除或什么都没有。 非常感谢

试试这个。我猜你的日期值是新的,因此删除了所有内容。

SqlConnection sqlcon = new SqlConnection(GlobalClass.DBLocate);
sqlcon.Open();

DateTime yesterday = DateTime.Today.AddDays(-1);

string query = "Delete from [Plans] Where Date <= '" + 
yesterday.ToShortDateString() + "'";

SqlDataAdapter sda = new SqlDataAdapter(query, sqlcon);

sda.SelectCommand.ExecuteNonQuery();

为什么不使用它的本机日期函数来编写 SQL,而不是将日期作为字符串传递?

由于这个问题被标记为 C# 而不是 SQL 的任何特定风格,我正在写这个连接到 SQL 服务器。 您也没有提供要从中删除的 table 的 DDL。该代码基于为 [Date] 列使用适当的列类型,这将是 DateTime 的一些变体。

以下语句应该删除当前日期时间

之前的所有内容
string query = "DELETE from [Plans] WHERE Date < GetDate()";

如果你需要在今天之前对所有内容进行微调,那么你可以使用 CAST/CONVERT 并只获取日期部分:

string query = "DELETE from [Plans] WHERE Date < Cast(GetDate() as Date)";

您也不需要为 NonQuery 使用 DataAdapter;它的 return 类型是 int,可以直接赋值

int RowsDeleted = cmd.ExecuteNonQuery();

所以把它们放在一起,我们得到这个代码块。我还包裹在一个 using 块中,以便之后正确清理资源。

int RowsDeleted = -1;

using (SqlConnection sqlcon = new SqlConnection(GlobalClass.DBLocate)) {
    string query = "DELETE from [Plans] WHERE Date < GetDate()";
    SqlCommand cmd = new SqlCommand(query, sqlcon);

    sqlcon.Open();
    RowsDeleted = cmd.ExecuteNonQuery();
    sqlcon.Close();
}