Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试从WPF中的Access数据库获取给定条件的日期时出错_C#_Wpf_Ms Access_C# 4.0_Oledb - Fatal编程技术网

C# 尝试从WPF中的Access数据库获取给定条件的日期时出错

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()直接插入条件

我正在开发一个WPF应用程序,它将用户注册和日期保存到Access数据库中。 我在插入日期时没有遇到任何问题,但现在我想使用DataReader检索给定条件下的一些日期(例如,当前月份的所有日期)。 当我试图通过应用程序读取数据时,DataReader不会返回任何行。但当我在DBeaver上尝试相同的查询时,它确实返回数据

这个阅读问题只在我尝试阅读日期时才会发生,就像我之前说过的,如果我尝试阅读所有的日期,就没有问题了

我尝试过使用参数化命令,并使用
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月的一天,因此它相当于