C# 动态WHERE子句';缺少关键字';带撇号

C# 动态WHERE子句';缺少关键字';带撇号,c#,.net,oracle,C#,.net,Oracle,我正在从下面的DropDownList动态生成一个WHERE子句。无论我是否手动添加撇号,我都会得到一个ORA-00905缺少的关键字(参见注释)。直接在数据库上运行脚本将返回行 <asp:DropDownList ID="callsInHour" runat="server" AutoPostBack="True"> <asp:ListItem Value="1">1</asp:ListItem> <asp:ListIt

我正在从下面的DropDownList动态生成一个WHERE子句。无论我是否手动添加撇号,我都会得到一个ORA-00905缺少的关键字(参见注释)。直接在数据库上运行脚本将返回行

<asp:DropDownList ID="callsInHour" runat="server" AutoPostBack="True">
        <asp:ListItem Value="1">1</asp:ListItem>
        <asp:ListItem Value="4">4</asp:ListItem>
        <asp:ListItem Value="8">8</asp:ListItem>
        <asp:ListItem Value="12">12</asp:ListItem>
        <asp:ListItem Value="24">24</asp:ListItem>
</asp:DropDownList>
删除整个WHERE子句也会返回行,所以这肯定是问题所在。对数据库运行跟踪时,似乎:zcallz是在没有值的情况下传递的。有趣的是,我有一个非常相似的代码集正在运行,但是使用了通配符,而且它可以工作

string eventName = "%" + ddlEvents.SelectedItem.Text + "%";

真让我抓狂。感谢

间隔需要一个字符串,并且对铸造和参数有点挑剔

作为一种解决办法,这应该做到:

... BETWEEN SYSDATE - (interval '1' hour * :zcallz) AND ...

INTERVAL:zcallz HOUR
的问题在于它是一个,即必须使用常量整数,而不是变量

要定义动态间隔值,请使用间隔函数

所以不是

 SYSDATE - INTERVAL :zcallz HOUR
使用


您是否尝试添加新的OracleParameter(“:zcallz”,…)-包括
?执行的完整查询是什么?@StephanBauer尝试了
,但运气不佳。也许您可以使用
Interval Day to Second
而不是
Interval Hour
,并将
TimeSpan
作为参数传递。请参见而不是
SYSDATE-INTERVAL:zcallz HOUR
使用
SYSDATE-NUMTODSINTERVAL(:zcallz,'HOUR')
。我想还有更多。
 SYSDATE - INTERVAL :zcallz HOUR
 sysdate - NUMTODSINTERVAL(:zcallz, 'HOUR')