C# 尝试从WPF中的Access数据库获取给定条件的日期时出错
我正在开发一个WPF应用程序,它将用户注册和日期保存到Access数据库中。 我在插入日期时没有遇到任何问题,但现在我想使用DataReader检索给定条件下的一些日期(例如,当前月份的所有日期)。 当我试图通过应用程序读取数据时,DataReader不会返回任何行。但当我在DBeaver上尝试相同的查询时,它确实返回数据 这个阅读问题只在我尝试阅读日期时才会发生,就像我之前说过的,如果我尝试阅读所有的日期,就没有问题了 我尝试过使用参数化命令,并使用C# 尝试从WPF中的Access数据库获取给定条件的日期时出错,c#,wpf,ms-access,c#-4.0,oledb,C#,Wpf,Ms Access,C# 4.0,Oledb,我正在开发一个WPF应用程序,它将用户注册和日期保存到Access数据库中。 我在插入日期时没有遇到任何问题,但现在我想使用DataReader检索给定条件下的一些日期(例如,当前月份的所有日期)。 当我试图通过应用程序读取数据时,DataReader不会返回任何行。但当我在DBeaver上尝试相同的查询时,它确实返回数据 这个阅读问题只在我尝试阅读日期时才会发生,就像我之前说过的,如果我尝试阅读所有的日期,就没有问题了 我尝试过使用参数化命令,并使用String.Format()直接插入条件
String.Format()
直接插入条件
我目前有这个函数(如果我们不计算数据库中保存的天数,它会尝试计算每月剩下多少天):
public static int CalculateDaysLeftInMonth()
{
整数天=0;
列表日期=新列表();
尝试
{
if(dbConnection.State!=ConnectionState.Open)
dbConnection.Open();
OleDbCommand dbCommandQuery=新OleDbCommand{
CommandText=“选择*来自日期稳定,其中日期类似@Condition”
}
dbCommandQuery.Parameters.AddWithValue(“@Condition”,String.Format(“{0:yyyy-MM}-%”,DateTime.Now));
OleDbDataReader dbReader=dbCommandQuery.ExecuteReader();
如果(!dbReader.HasRows)
返回-1;
while(dbReader.Read())
{
Add(新的FechaFestivo(dbReader.GetDateTime(0.Date));
}
dbConnection.Close();
DateTime startDate=新的日期时间(DateTime.Now.Year,DateTime.Now.Month,1),
endDate=新的日期时间(DateTime.Now.Year、DateTime.Now.Month、,
DateTime.DaysInMonth(DateTime.Now.Year,DateTime.Now.Month));
for(DateTime date=startDate;date ff.date==date.date))
{
天++;
}
}
}
捕获(OLEDBEException ex)
{
dbConnection.Close();
返回-1;
}
返程天数;
}
这是参数化版本。
我还尝试使用:
dbCommandQuery.CommandText=String.Format(“选择*FROM DatesTable WHERE Date”+
“像{0:yyyy-MM}-%”,DateTime.Now);
我希望得到一个类似这样的日期列表,这样我就可以遍历它们:
(CalendarioLaboral
将是DatesTable
,FechaFestivo
将是Dates
)
提前谢谢。最后对我有用的代码如下:
public static int CalculateDaysLeftInMonth()
{
整数天=0;
列表日期=新列表();
尝试
{
if(dbConnection.State!=ConnectionState.Open)
dbConnection.Open();
OLEDBCOMAND dbCommand=新OLEDBCOMAND{
CommandText=String.Format(“从{0}中选择*,其中(DATEPART('yyyy',FechaFestivo)=@Year”+
“和日期部分('m',FechaFestivo)=@Month)”,TablaCalendario)
}
dbCommandQuery.Parameters.AddWithValue(“@Year”,DateTime.Now.Year);
dbCommandQuery.Parameters.AddWithValue(“@Month”,DateTime.Now.Month);
OleDbDataReader dbReader=dbCommandQuery.ExecuteReader();
如果(!dbReader.HasRows)
返回-1;
while(dbReader.Read())
{
Add(新的FechaFestivo(dbReader.GetDateTime(0.Date));
}
dbConnection.Close();
DateTime startDate=新的日期时间(DateTime.Now.Year,DateTime.Now.Month,1),
endDate=新的日期时间(DateTime.Now.Year、DateTime.Now.Month、,
DateTime.DaysInMonth(DateTime.Now.Year,DateTime.Now.Month));
for(DateTime date=startDate;date ff.date==date.date))
{
天++;
}
}
}
捕获(OLEDBEException ex)
{
dbConnection.Close();
返回-1;
}
返程天数;
}
使用DatePart函数,如注释中所述@Holger和@June7。谢谢大家! 最终对我有用的代码如下:
public static int CalculateDaysLeftInMonth()
{
整数天=0;
列表日期=新列表();
尝试
{
if(dbConnection.State!=ConnectionState.Open)
dbConnection.Open();
OLEDBCOMAND dbCommand=新OLEDBCOMAND{
CommandText=String.Format(“从{0}中选择*,其中(DATEPART('yyyy',FechaFestivo)=@Year”+
“和日期部分('m',FechaFestivo)=@Month)”,TablaCalendario)
}
dbCommandQuery.Parameters.AddWithValue(“@Year”,DateTime.Now.Year);
dbCommandQuery.Parameters.AddWithValue(“@Month”,DateTime.Now.Month);
OleDbDataReader dbReader=dbCommandQuery.ExecuteReader();
如果(!dbReader.HasRows)
返回-1;
while(dbReader.Read())
{
Add(新的FechaFestivo(dbReader.GetDateTime(0.Date));
}
dbConnection.Close();
DateTime startDate=新的日期时间(DateTime.Now.Year,DateTime.Now.Month,1),
endDate=新的日期时间(DateTime.Now.Year、DateTime.Now.Month、,
DateTime.DaysInMonth(DateTime.Now.Year,DateTime.Now.Month));
for(DateTime date=startDate;date ff.date==date.date))
{
天++;
}
}
}
捕获(OLEDBEException ex)
{
dbConnection.Close();
返回-1;
}
返程天数;
}
使用DatePart函数,如注释中所述@Holger和@June7。谢谢大家!
如“2019-10-%”
表示2019年10月的一天,因此它相当于2019-10-01和2019-10-31之间的日期。试试看:
SELECT * FROM DatesTable WHERE Date between '2019-10-01' AND' 2019-10-31'
如“2019-10-%”
表示2019年10月的一天,因此它相当于