【问题标题】:The expression contains undefined function call DATEADD() | FilterExpression | Datetime filter表达式包含未定义的函数调用 DATEADD() |过滤器表达式 |日期时间过滤器
【发布时间】:2014-11-10 10:05:49
【问题描述】:

我有一个网格视图,我想过滤它以仅显示特定日期间隔内的数据(从日期 A 到日期 B,包括 A 和 B)

我使用SqlDataSource和FilterExpression,最初我使用这个FilterExpression:

FilterExpression="Submitted_time >= '{0}' AND Submitted_time <= '{1}'">

但结果中不包含 {1} 日期的数据(尽管我使用 ')(可能是因为时间(小时/分钟),所以我设法将 1 天添加到{1}:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:CTECS %>" SelectCommand="SELECT * FROM [Event] ORDER BY [Id] DESC"
                        FilterExpression="Submitted_time >= '{0}' AND Submitted_time <= DATEADD(day, 1, '{1}')">
                        <FilterParameters>
                            <asp:ControlParameter Name="FromDate" ControlID="oCalendar1" PropertyName="SelectedDate" DefaultValue="1/1/1800" Type="DateTime" />
                            <asp:ControlParameter Name="ToDate" ControlID="oCalendar2" PropertyName="SelectedDate" DefaultValue="1/1/3000" Type="DateTime" />
                        </FilterParameters>
                    </asp:SqlDataSource>

然后 Visual Studio 给我:表达式包含未定义的函数调用 DATEADD()

这里的任何解决方案,我的目标只是将日期 {1} 的数据包含到结果中......

【问题讨论】:

  • 不知道这是否会有所作为,但您在 {1} 的开头/结尾缺少引号,用于更新的函数 w/dateadd。我假设这是针对 sql server 的?我没有使用过 sqldatasource,所以我不确定,我想我会问:)
  • 没关系,他们都犯了同样的错误。最初我输入“{1}”,然后更改为 {1},{1} 类型是 DateTime 而不是字符串,所以“”在这里无关紧要

标签: c# asp.net datetime sqldatasource dateadd


【解决方案1】:

取自: http://www.experts-exchange.com/Programming/Editors_IDEs/Q_22907598.html

[在过滤器表达式中引用 dateadd]

不,它只是一个字符串样式的过滤器。你必须评估 日期,然后将其作为字符串传递给过滤器表达式

例如你不能在你的filterexpression中使用内置的sql函数(至少我是这样解释它的)。您需要在oCalendar2 日期或ControlParameter toDate 上添加DateTime.AddDays(1)

【讨论】:

  • 你是对的,也许filterexpression不支持这个功能,我确实使用后面的代码在控件oCalendar2中添加了1天以使其工作,只是想知道filterexpression是否可以处理这个和看起来没有。谢谢!
【解决方案2】:

您的日期需要有引号。现在它把它当作一个替身。

试试:

DATEADD(day, 1, '{1}')

【讨论】:

  • 同样的错误,最初我放了 '{1}' 然后只更改为 {1} 但它们都不起作用({1} 类型是 DateTime 而不是字符串,所以 ' ' 在这里无关紧要)
  • 另外,如果我没记错的话,我相信它应该是 DATEADD(d,1,'{1}')。看看是否能解决问题。
  • 试过 DATEADD(d,1,'{1}') ,它也是不行的,同样的错误。我的意思是我通过在代码后面的 ooCalendar2 控件上添加 1 天来让它工作,但这有点绕道,也许我只需要坚持一段时间
  • 不知道为什么它不起作用,是的,这是一种解决方法,但并不理想。此外,如果您在第二天使用,请确保使用 而不是
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-06
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
相关资源
最近更新 更多