从 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();
}
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();
}