【问题标题】:Datatable Select query Date range issue数据表选择查询日期范围问题
【发布时间】:2015-09-03 21:32:42
【问题描述】:

我有一个数据表,我在其中使用选择查询按日期范围选择值,但它返回 0 计数。我做错了什么?

这是我的代码:

string sUserName = "joe";
string Value = "4";
string sProcessStart = "2015-08-28 12:12:26 PM";
string sProcessEnd = "2015-08-28 12:29:26 PM";

DataTable dtDLCD = new DataTable();

DataColumn dtcolumn = new DataColumn("UserName");
dtcolumn.DefaultValue = "joe";
dtDLCD.Columns.Add(dtcolumn);

DataColumn dtcolumn1 = new DataColumn("Value");
dtcolumn1.DefaultValue = "4";
dtDLCD.Columns.Add(dtcolumn1);

DataColumn dtcolumn3 = new DataColumn("StartDate");
dtcolumn3.DefaultValue = "2015-08-28 12:20:26 PM";
dtDLCD.Columns.Add(dtcolumn3);

DataColumn dtcolumn4 = new DataColumn("EndDate");
dtcolumn4.DefaultValue = "2015-08-28 12:29:26 PM";
dtDLCD.Columns.Add(dtcolumn4);

DataRow drow = dtDLCD.NewRow();
dtDLCD.Rows.Add(drow);


DataRow[] drDocDetails = dtDLCD.Select("UserName = '" + sUserName +
                                   "' AND Value = '" + Value +
                                   "' AND StartDate >= '" + Convert.ToDateTime(sProcessStart).ToString("yyyy-MM-dd hh:mm:ss tt") +
                                   "' AND EndDate <= '" + Convert.ToDateTime(sProcessEnd).ToString("yyyy-MM-dd hh:mm:ss tt") + "'");

int count = drDocDetails.Count();

【问题讨论】:

  • 重新格式化代码块
  • 您确定没有此处未显示的代码正在修改计数变量吗?当我运行它时,它对我来说很好。
  • 别忘了声明列类型:dtcolumn3.DataType = typeof(DateTime);
  • 正如@mjw 所说,所示代码有效。 dotnetfiddle.net/70ey3g

标签: c#


【解决方案1】:

您在此代码示例中所做的是定义表本身:您没有添加任何数据行。 (在数据库表中,“字段”和“列”几乎是同义词。)

在代码段的末尾,您创建了一个行对象的实例——但您没有为每一列定义任何值。您调用 Add() 方法,但行中没有要添加的内容。

添加数据(每条记录一行),那么您的记录数将不为零。

【讨论】:

  • 不,在这里运行提供的代码会为我产生 1 的计数。
  • 怎么样?他在数据表中添加了一个空白行:StartDate 和 EndDate 的值为 NULL。 Null 传播意味着 WHERE 子句的计算结果为 NULL,因此查询不返回任何记录。与其辩论 OP 的作业问题(欢迎回到校园,孩子!),让我们同意他的问题是他没有在表格中放入任何数据......
  • 不要相信我的话。自己运行代码,count = 1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多