gpt4 book ai didi

c# - 从数据库中获取两个日期之间的所有记录 C#

转载 作者:可可西里 更新时间:2023-11-01 07:09:30 25 4
gpt4 key购买 nike

我的数据库中有一个日期列。我有两个日期时间选择器(过去和现在)三个单选按钮,分别称为零售商、子经销商和经销商。我想在我的数据网格中显示两个日期之间的所有记录。但首先我将设置两个日期并选择一个单选按钮并单击搜索按钮。我已经在单选按钮中解决了我的问题。我只是在我的查询中添加了“OR”,这样即使在获取两个日期之间的日期时出现问题,它仍然会。我没有使用 datime,因为我在数据库中使用 varchar 作为日期的数据类型。我不能将其更改为日期时间,因为那是我的老师给我的。

这是我的代码。非常感谢。

public static List<Retailer> GetDataByType(string type, string past, string present)
{
List<Retailer> data = new List<Retailer>();

MySqlConnection con = DBConnection.ConnectDatabase();
try
{ // AND
MySqlCommand cmd = new MySqlCommand("SELECT * FROM " + tablename + " WHERE date BETWEEN '" + past + "' AND '" + present + "'" + "' OR type LIKE '%" + type + "%'", con);
MySqlDataReader reader = cmd.ExecuteReader();

if (reader.HasRows)
{
while (reader.Read())
{
Retailer rawData = new Retailer();
rawData.Date = reader.GetString(0);
rawData.Walletid = reader.GetString(1);
rawData.Fname = reader.GetString(2);
rawData.Lname = reader.GetString(3);
rawData.Birthdate = reader.GetString(4);
rawData.Address = reader.GetString(5);
rawData.Province = reader.GetString(6);
rawData.City = reader.GetString(7);
rawData.Balance = reader.GetDouble(8);
rawData.Frozen = reader.GetDouble(9);
rawData.Sponsor_id = reader.GetString(10);
rawData.Share = reader.GetDecimal(11);
rawData.Email = reader.GetString(12);
rawData.Password = reader.GetString(13);
rawData.Type = reader.GetInt32(14);
data.Add(rawData);

MessageBox.Show(rawData.Date);
}
}
reader.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
con.Close();
}

return data;
}
}

最佳答案

由于您的日期列是 varchar,因此您必须使用 str_to_date .我建议您在查询中的字符串来自用户的地方使用参数,即使您没有被要求这样做,因为这将使您免于 sql injections .

MySqlCommand cmd = new MySqlCommand("SELECT * FROM " + tablename + " WHERE  STR_TO_DATE(`date`,  '%Y/%m/%d')  BETWEEN STR_TO_DATE(@pastvalue,  '%Y/%m/%d') AND STR_TO_DATE(@presentvalue,  '%Y/%m/%d')  OR type LIKE '%" + type + "%'", con);
command.Parameters.AddWithValue("@pastvalue", past);
command.Parameters.AddWithValue("@presentvalue", present);
MySqlDataReader reader = cmd.ExecuteReader();

我假设日期以以下格式存储 2016/09/01。如果日期在另一个 fromat 中,则分别更改 str_to_date 的格式。

没有参数查询看起来像

MySqlCommand cmd = new MySqlCommand("SELECT * FROM " + tablename + " WHERE STR_TO_DATE(`date`,  '%Y/%m/%d') BETWEEN STR_TO_DATE(past,  '%Y/%m/%d') AND STR_TO_DATE(present,  '%Y/%m/%d')" + "'  OR type LIKE '%" + type + "%'", con);

关于c# - 从数据库中获取两个日期之间的所有记录 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39263317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com