使用" between "获取两个日期之间的数据c#中的操作符
本文关键字:quot 之间 数据 操作符 日期 获取 between 使用 两个 | 更新日期: 2023-09-27 18:16:59
你好,我试图从数据库中获取一些数据,并将它们附加到c#中的listview,我试图检索的数据是在用户指定的开始日期和结束日期之间。我尽量说得具体一点:
- 我正在使用access .mdb数据库
- 我正在使用visual c# 2010, winforms进行开发。
所以我有一个表单由一个组合框和listView, combobox有12个项目,一个为一年中的每个月,我想要实现的是从访问数据库追加数据到listView,那是在那个月。
相关代码如下:
这是事件处理程序的项目选择更改为ComboBox,这是我做重要的事情:
private void cbMonth_SelectedIndexChanged(object sender, EventArgs e)
{
//CONEXION is a constant string with the path to the database
connectDB = new OleDbConnection(CONEXION);
//getting the selected month from the combo
int month = cbMonth.SelectedIndex;
//instanciating a string for the query
string query = getQuery(month);
// debugging XD
MessageBox.Show(query);
// this will be the dataTable with the data retrieved
DataTable EventTable = connectDB(query);
//filling the listview
fillListView(EventTable);
conexionDB.Close();
}
这个方法是返回查询字符串的方法,它相当直接但我认为问题在这里所以请注意xd
public string getQuery(int month)
{
string query = "";
//just placeholders
DateTime ini = DateTime.Now, fin = DateTime.Now;
switch (month)
{
case 0:
ini = DateTime.Parse("01/01/2013");
fin = DateTime.Parse("31/01/2013");
break;
case 1:
ini = DateTime.Parse("01/02/2013");
fin = DateTime.Parse("28/02/2013");
break;
case 2:
ini = DateTime.Parse("01/03/2013");
fin = DateTime.Parse("31/03/2013");
break;
case 3:
ini = DateTime.Parse("01/04/2013");
fin = DateTime.Parse("30/04/2013");
break;
case 4:
ini = DateTime.Parse("01/05/2013");
fin = DateTime.Parse("31/05/2013");
break;
case 5:
ini = DateTime.Parse("01/06/2013");
fin = DateTime.Parse("30/06/2013");
break;
case 6:
ini = DateTime.Parse("01/07/2013");
fin = DateTime.Parse("31/07/2013");
break;
case 7:
ini = DateTime.Parse("01/08/2013");
fin = DateTime.Parse("31/08/2013");
break;
case 8:
ini = DateTime.Parse("01/09/2013");
fin = DateTime.Parse("30/09/2013");
break;
case 9:
ini = DateTime.Parse("01/10/2013");
fin = DateTime.Parse("31/10/2013");
break;
case 10:
ini = DateTime.Parse("01/11/2013");
fin = DateTime.Parse("30/11/2013");
break;
case 11:
ini = DateTime.Parse("01/12/2013");
fin = DateTime.Parse("31/12/2013");
break;
}
query = "select * from Events where (EventsDate between #" +ini.ToShortDateString() + "# and #" + fin.ToShortDateString() + "#)";
return query;
}
这个方法返回我测试过的预期查询
现在是进行查询的方法,我认为这个方法也相当简单
public DataTable connectDB(string query)
{
conexionDB = new OleDbConnection(CONEXION);
//making the query
OleDbDataAdapter adapter = new OleDbDataAdapter(query, conexionDB);
// filling a datatable
DataTable EventTable= new DataTable();
adapter.Fill(EventTable);
return EventTable;
}
这是填充listview的方法
public void fillListView(DataTable EventsTable)
{
for (int i = 0; i < EventsTable.Rows.Count; i++)
{
DataRow row = EventosTable.Rows[i];
string nae= row["EventName"].ToString();
MessageBox.Show(name);
DateTime date = DateTime.Parse(fila["EventPrice"].ToString());
int price = int.Parse(fila["EvenPrice"].ToString());
string description = fila["EventDescrip"].ToString();
Event myevent = new Event();
myevent.Name = name;
myevent.Date= date;
myevent.Price= price;
myevent.Description= description;
EventsListView.Add(myevent);
ListViewItem item = new ListViewItem();
item.Text = name;
item.SubItems.Add(date.ToString());
item.SubItems.Add(price.ToString());
item.SubItems.Add(description.ToString());
EventsListView.Items.Add(item);
}
}
好吧,一切都很好…问题是,如果我在组合框中选择一个更大的月份,listview将加载每个月,即<=所选的月份,说,如果我有一个事件与eventDate"23/02/2013"和另一个事件与eventDate"20/12/2013",我在组合框中选择12月的listview,而不是加载只有事件,有相应的日期到12月,它加载两个事件。
所以它就像查询说,加载每个事件eventDate <= to month selected。帮助吗?
尝试以下两种方法之一:
1)将日期字符串改为MM/dd/yyyy格式:
case 10:
ini = DateTime.Parse("12/01/2013");
fin = DateTime.Parse("12/31/2013");
break;
2)或使用DateTime.ParseExact()方法指定格式:
case 11:
ini = DateTime.ParseExact("01/12/2013", "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);
fin = DateTime.ParseExact("31/12/2013", "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);
break;